
AWS 環境構築:もくじ
- Webサーバ EC2 + Nginx + ドメインを割り当てる(DNS設定)
- Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定
PHP7インストールと初期設定
Amazon Linuxでは、PHP7のインストールも簡単です。
通常、のCentOS6系では、remiリポジトリを追加してインストールするケースが多いと思いますが、amznリポジトリでPHP7はサポートされているので、そのままyumコマンドでインストール出来ます。
ちなみに、CentOSなら以下のコマンドでremiリポジトリを追加します。
CentOS6系
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
CentOS7系
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
インストール
sudo yum install -y php70 php70-cli php70-common php70-devel php70-mbstring php70-pdo php70-gd php70-fpm
httpdは依存インストールされたようです。
また、NginxからPHPを実行するには、php-fpmは必須です。
PHP-FPMについては、こちらのページが詳しくまとまっていたので参考になります。
nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する – Qiita
PHP設定
php.iniのバックアップと編集
sudo cp /etc/php.ini /etc/php.ini.org sudo vi /etc/php.ini
以下の通り設定します。
エラーディスプレイ表示(確認のみ) display_errors = Off 文字コード(確認のみ) default_charset = "UTF-8" HTTPヘッダーにPHPバージョンを出力しない expose_php = Off タイムゾーン date.timezone = Asia/Tokyo mbstring 参考: http://php.net/manual/ja/mbstring.configuration.php mbstring.language = Japanese mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none mbstring.func_overload = 0
PHP-FPM設定
www.confのバックアップと編集
sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org sudo vim /etc/php-fpm.d/www.conf
以下の通り設定します。
;user = apache user = nginx ;group = apache group = nginx ;listen = 127.0.0.1:9000 listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx
PostgreSQLインストールと初期設定
インストール
PostgreSQLもamznリポジトリでは、バージョン8, 9.2, 9.3, 9.4, 9.5と選びたい放題ですね!
今回は、事情があってバージョン9.2インストールしました。
sudo yum -y install postgresql92-server postgresql92-contrib postgresql92-devel
ちなみに、CentOS環境なら以下のコマンドでyumにリポジトリを追加してインストールが可能です。
sudo yum -y localinstall https://download.postgresql.org/pub/repos/yum/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-8.noarch.rpm
PostgreSQL設定
続いて初期化を行います。
sudo service postgresql92 initdb
作業ユーザは、postgresを使いますのでパスワードを設定します。
sudo passwd postgres
初期の状態では、ユーザとパスワードによるコマンド操作ができないようなので、pg_hba.confを編集して設定します。
sudo cp /var/lib/pgsql92/data/pg_hba.conf /var/lib/pgsql92/data/pg_hba.conf_org sudo vi /var/lib/pgsql92/data/pg_hba.conf
# "local" is for Unix domain socket connections only #local all all peer local all all trust # IPv4 local connections: #host all all 127.0.0.1/32 ident host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 ident host all all ::1/128 trust
以下が、自動起動の設定と起動、停止コマンドです。
sudo chkconfig postgresql92 on sudo service postgresql92 start sudo service postgresql92 stop sudo service postgresql92 restart
続いて、DBを作成してコマンドで接続してみます。
createdb -E UTF8 -U postgres -W testdb psql -U postgres -d testdb
上手く接続出来ました。
僕は、PostgreSQLは触る機会が少ないのでMySQLと比べると随分と文化が違うとかんじました。
Nginxリバースプロキシ設定
この、Nginxのリバースプロキシ設定は、ほぼ覚書きのためです。
普通は、必要ないと思います。
僕は、開発環境で利用する場合が多いです。
利用シーンは以下の3つです。
- Apachのバーチャルホストの様に復数のドメインを利用したい場合
- Nodeアプリケーションの場合(80番ポートのリクエストを流す為)
- 何かしらの理由で、IPベースのリバースが必要な場合
nginx.confのバックアップと編集
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org sudo vim /etc/nginx/nginx.conf
Apachのバーチャルホストの様に復数のドメインを利用したい場合
以下は、ポート80番の名前ベースのリクエストをリバースします。
僕は、PHPの利用が多いので、PHPを利用する場合の設定も含めています(下部はPHPの設定)。
server {
listen 80;
server_name php.dev;
location / {
root /home/vagrant/public/www/php.dev/_src;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /home/vagrant/public/www/php.dev/_src;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Nodeアプリケーションの場合(80番ポートのリクエストを流す為)
server {
listen 80;
server_name node.dev;
location / {
proxy_pass http://192.168.xx.xx:3000;
# root ;
}
}
何かしらの理由で、IPのリバースが必要な場合
server {
server_name 55.200.xx.01;
listen 80;
location / {
proxy_pass 55.200.xx.02;
}
}
まとめ
今回のエントリーは、ほぼ覚書きのためになってしまいました。
特にAWSに限ったことではないので別のLinux環境でも参考になると思います。