AWS EC2にLAMP環境を構築するまで
2017-08-08AWS EC2にLAMP環境を構築したときのメモです。DBも、RDSを使用せずにEC2に入れてます。
作りたい環境
- Amazon Linux
- Apache2.4
- MySQL 5.6
- PHP7
前提
- EC2インスタンスが起動している
- ターミナルからSSHでログインできる
手順
必要なものをインストール
ログイン
~ $ ssh -i .ssh/your_key.pem ec2-user@{インスタンスのIP}
yumアップデート
[ec2-user@ip-***** ~]$ sudo yum update -y
Apache、MySQL、PHP、MySQLドライバのインストール
[ec2-user@ip-***** ~]$ sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
Apache、PHP、MySQLのバージョン確認
# Apache
[ec2-user@ip-***** ~]$ httpd -v
Server version: Apache/2.4.25 (Amazon)
Server built: Jan 19 2017 16:55:49
# PHP
[ec2-user@ip-***** ~]$ php -v
PHP 7.0.16 (cli) (built: Mar 6 2017 19:45:42) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
# MySQL
[ec2-user@ip-***** ~]$ sudo service mysqld start
...
...
...
Starting mysqld: [ OK ]
[ec2-user@ip-***** ~]$ mysql --version
mysql Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using EditLine wrapper
Apacheの設定
起動・スタートページの表示
# サービス開始 (起動はするが ServerNameを設定してください と出る(一旦スルー))
[ec2-user@ip-***** ~]$ sudo service httpd start
Starting httpd: AH00557: httpd: apr_sockaddr_info_get() failed for ip-******
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[ OK ]
#ブラウザで EC2のIPアドレスにアクセスして、Apaceのスタートページが表示されることを確認する
# ドキュメントルートの確認
[ec2-user@ip-***** ~]$ sudo cat /etc/httpd/conf/httpd.conf | less
# 「/DocumentRoot」 で検索
DocumentRoot "/var/www/html"
# 起動設定
[ec2-user@ip-***** ~]$ sudo chkconfig httpd on
# 確認 (2, 3, 4, 5がONになっていればOK)
[ec2-user@ip-***** ~]$ chkconfig
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
グループ設定
# ec2-user を apache グループに追加
[ec2-user@ip-***** ~]$ sudo usermod -a -G apache ec2-user
# 一旦ログアウトして再度ログイン
[ec2-user@ip-***** ~]$ groups
ec2-user wheel apache
# /var/www以下の権限確認
[ec2-user@ip-***** ~]$ ls -l /var/www/
total 20
drwxr-xr-x 2 root root 4096 Jan 19 16:56 cgi-bin
drwxr-xr-x 3 root root 4096 Jun 26 06:18 error
drwxr-xr-x 2 root root 4096 Jan 19 16:56 html
drwxr-xr-x 3 root root 4096 Jun 26 06:18 icons
drwxr-xr-x 2 root root 4096 Jun 26 06:18 noindex
# apacheグループに /var/www 所有・書き込み権限付与
[ec2-user@ip-***** ~]$ sudo chown -R ec2-user:apache /var/www
[ec2-user@ip-***** ~]$ sudo chmod 2775 /var/www/
# /var/www 以下のディレクトリの権限変更
[ec2-user@ip-***** ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
# /var/www 以下のファイルの権限変更
[ec2-user@ip-***** ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
httpd.confの設定
# サーバ管理者メールアドレス 変更 87行目あたり
ServerAdmin your_email@example.com
# サーバ名 (ドメイン設定してから)
# クロスサイトトレーシング対策 追記
TraceEnable Off
# ディレクトリ一覧を非表示 変更 145行目あたり
Options -Indexes +FollowSymLinks
# cgi-bin使用しない 248〜260行目あたり
# ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Require all granted
#</Directory>
security.confの設定(新規作成)
ServerTokens Prod
Header unset X-Powered-By
# httpoxy 対策
RequestHeader unset Proxy
# クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# XST対策
TraceEnable Off
<Directory /var/www/html>
# .htaccess の有効化
AllowOverride All
# ファイル一覧出力の禁止
Options -Indexes
</Directory>
Welcomeページ非表示
/etc/httpd/conf.d/welcome.conf
中身をコメントアウト
Apache再起動
[ec2-user@ip-***** ~]$ sudo service httpd restart
phpinfoの設置
[ec2-user@ip-***** ~]$ vi /var/www/html/phpinfo.php
<?php
echo phpinfo();
# ブラウザで IPアドレス/phpinfo.php にアクセス
# 確認後、phpinfo.phpを削除
[ec2-user@ip-***** ~]$ rm /var/www/html/phpinfo.php
PHP設定
[ec2-user@ip-***** ~]$ sudo cp /etc/php.ini /etc/php.ini.org
# タイムゾーン設定
- ;date.timezone =
+ date.timezone = Asia/Tokyo
# 日本語設定
- ;mbstring.internal_encoding =
+ mbstring.internal_encoding = UTF-8
- ;mbstring.language = Japanese
+ mbstring.language = Japanese
- ;mbstring.http_input =
+ mbstring.http_input = auto
- ;mbstring.detect_order = auto
+ mbstring.detect_order = auto
MySQLの設定
起動
[ec2-user@ip-***** ~]$ sudo /etc/init.d/mysqld start
...
Starting mysqld: [ OK ]
起動設定
[ec2-user@ip-***** ~]$ sudo chkconfig mysqld on
初期設定
[ec2-user@ip-***** ~]$ sudo mysql_secure_installation
...
...
Enter current password for root (enter for none):
# Enterキー
Set root password? [Y/n]
# rootのパスワードを変更するか。
# Y
New password:
# 任意のパスワード入力
Re-enter new password:
# もう一度入力
Password updated successfully!
Remove anonymous users? [Y/n]
# 匿名ユーザーを削除するかどうか。
# Y
Disallow root login remotely? [Y/n]
# rootユーザーのリモートホストからのログインを無効化するかどうか。
# Y
Remove test database and access to it? [Y/n]
# testデータベースを削除するか。
# Y
Reload privilege tables now? [Y/n]
# これらの変更を即座に反映するか。
# Y
...
Thanks for using MySQL!
Cleaning up...
mysqlへログイン
[ec2-user@ip-***** ~]$ mysql -u root -p
Enter password:
# 初期設定で設定したパスワード
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.6.36 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
...
mysql>
アプリケーション用データベース追加
# 現在の状態を確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
# データベース「test_app_db」を追加
mysql> create database test_app_db character set utf8;
# 確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test_app_db |
+--------------------+
アプリケーションユーザ追加
# 現在のユーザ設定確認
mysql> select Host, User, Password from mysql.user;
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *1234567890ABCDEFGHIJ0987654321KLMNOPQRST|
| 127.0.0.1 | root | *1234567890ABCDEFGHIJ0987654321KLMNOPQRST|
| ::1 | root | *1234567890ABCDEFGHIJ0987654321KLMNOPQRST|
+-----------+------+-------------------------------------------+
# ユーザ「app_user」を追加 (ユーザ名は16文字以内)
mysql> create user 'app_user'@'localhost' identified by '任意のパスワード';
# データベース「test_app_db」にのみアクセス可能
# 権限は、ALL
mysql> grant ALL on test_app_db.* to 'app_user'@'localhost';
# 設定の反映
mysql> flush privileges;
# 権限の確認
mysql> show grants for 'app_user'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for app_user@localhost |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'app_user'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFGHIJ0987654321KLMNOPQRST1234567890' |
| GRANT ALL PRIVILEGES ON `test_app_db`.* TO 'app_user'@'localhost' |
+--------------------------------------------------------------------------------------------------------------------+
# ログアウト
mysql> quit
Bye
# アプリケーションユーザでログイン
[ec2-user@ip-***** ~]$ mysql -u app_user -p
# データベースの確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test_app_db |
+--------------------+
mysql> quit
phpMyAdminのインストール
# 「EPEL」リポジトリ有効化
[ec2-user@ip-***** ~]$ sudo yum-config-manager --enable epel
# phpMyAdminインストール
[ec2-user@ip-***** ~]$ sudo yum install -y phpMyAdmin
# エラーになった
Error: php70-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
Error: php56-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
Error: php56-process conflicts with php-process-5.3.29-1.8.amzn1.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
# 手動でインストール
[ec2-user@ip-***** ~]$ cd /var/www/html
[ec2-user@ip-***** html]$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.6/phpMyAdmin-4.6.6-all-languages.tar.gz
[ec2-user@ip-***** html]$ sudo tar xzvf phpMyAdmin-4.6.6-all-languages.tar.gz
[ec2-user@ip-***** html]$ sudo mv phpMyAdmin-4.6.6-all-languages phpMyAdmin
[ec2-user@ip-***** html]$ sudo rm phpMyAdmin-4.6.6-all-languages.tar.gz
[ec2-user@ip-***** html]$ cd phpMyAdmin
[ec2-user@ip-***** phpMyAdmin]$ sudo cp config.sample.inc.php config.inc.php
# IPアドレス/phpMyAdmin でアクセス
# PHPの「mbstring」拡張が無いというエラーが出るのでインストール
[ec2-user@ip-***** ~]$ sudo yum install -y php70-mbstring
# Apace再起動
[ec2-user@ip-***** ~]$ sudo service httpd restart
# .htaccessでphpMyAdminへのアクセス制限
[ec2-user@ip-***** phpMyAdmin]$ sudo vi .htaccess
order deny,allow
deny from all
allow from **.***.***.***
# ブラウザで [IPアドレス]/phpMyAdmin にアクセスしてログインできるか確認
phpMyAdminの環境保護領域設定
ブラウザでアクセスした際、画面下に「phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。」というメッセージが表示されていた場合、初期設定が必要。
まず、phpMyAdminのディレクトリ内にある create_tables.sql を流す
/phpMyAdmin/sql/create_tables.sql
# アプリケーションユーザに phpMyAdminテーブルへのアクセス権を付与する
[ec2-user@ip-***** ~]$ mysql -u root -p
# 現在の権限確認
mysql> show grants for 'app_user'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for app_user@localhost |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'app_user'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFGHIJ0987654321KLMNOPQRST1234567890' |
| GRANT ALL PRIVILEGES ON `test_app_db`.* TO 'app_user'@'localhost' |
+--------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
# select, insert, update ,deleteの権限を付与
mysql> grant select, insert, update, delete on phpmyadmin.* to 'app_user'@'localhost';
# 設定を反映
mysql> flush privileges;
# 確認
mysql> show grants for 'app_user'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for app_user@localhost |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'app_user'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFGHIJ0987654321KLMNOPQRST1234567890' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `phpmyadmin`.* TO 'app_user'@'localhost' |
| GRANT ALL PRIVILEGES ON `test_app_db`.* TO 'app_user'@'localhost' |
+--------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
# config.inc.php の編集
[ec2-user@ip-***** ~]$ sudo vi /var/www/html/phpMyAdmin/config.inc.php
# 以下の記述のコメントアウトを解除する
/* Storage database and tables */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma__relation';
// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
// $cfg['Servers'][$i]['history'] = 'pma__history';
// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
// $cfg['Servers'][$i]['recent'] = 'pma__recent';
// $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
// $cfg['Servers'][$i]['users'] = 'pma__users';
// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
設定ファイル用パスフレーズの設定
ログイン時に「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」というメッセージが表示されている場合、設定ファイルにパスフレーズを追記する必要がある。
[ec2-user@ip-***** ~]$ sudo vi /var/www/html/phpMyAdmin/config.inc.php
# 下記の部分に任意の文字列(32文字以上)を入力
/**
* This is needed for cookie based authentication to encrypt password in
* cookie. Needs to be 32 chars long.
*/
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
その他
時刻設定
[ec2-user@ip-***** ~]$ sudo vi /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
[ec2-user@ip-***** ~]$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
[ec2-user@ip-***** ~]$ sudo /etc/init.d/crond restart
[ec2-user@ip-***** ~]$ date
Tue Jun 27 10:20:25 JST 2017
git
[ec2-user@ip-***** ~]$ sudo yum install -y git
[ec2-user@ip-***** ~]$ git --version
git version 2.7.5
composer
[ec2-user@ip-***** ~]$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...
Composer (version 1.4.2) successfully installed to: /home/ec2-user/composer.phar
Use it: php composer.phar
[ec2-user@ip-***** ~]$ sudo mv composer.phar /usr/local/bin/composer
[ec2-user@ip-***** ~]$ composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.4.2 2017-05-17 08:17:52
参考URL
- Amazon Linux への LAMP ウェブサーバーのインストール
- EC2にMySQLインストールと設定確認
- MySQL 5.6 リファレンスマニュアル :: 6.3.2 ユーザーアカウントの追加
- [MySQL]データベースの作成、ユーザの追加と権限の設定
- AWSのApache2.4の初期設定とセキュリティ設定
- Apacheセキュリティ設定
- phpMyAdminの使い方
comments powered by Disqus