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環境でも参考になると思います。