[AWS 環境構築 #02]Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定

aws

AWS 環境構築:もくじ

  1. Webサーバ EC2 + Nginx + ドメインを割り当てる(DNS設定)
  2. 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環境でも参考になると思います。

スポンサーリンク
レクタングル(大)
レクタングル(大)

コメントをどうぞ

メールアドレスが公開されることはありません。

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>