Docker+nginx+php7.0でphpinfo()を表示する
私、今まではLAMP環境しか触ったことがなかったんですが、最近それだけではダメだと気づき(手遅れに近いですが)、今回たまたまオープンソースをお試し程度に使うことになりオススメ環境がnginxだったので導入してみることにしました。
ちょこっと躓くこともあったのでメモ程度に
これでecho phpinfo();が表示されるまでの道のりを残したいと思います。
前提としてオープンソース自体も試しに使ってみるので環境はDockerで構築、nginxもDockerで準備しました。
まずはnginxのコンテナを準備
※ポートはDockerでの自身の管理している任意ポート、プロジェクトもローカルにマウント
※今回はコンテナの削除で何も残らなくてもいいのでコンテナ内で環境を試行錯誤しながら構築
ベースイメージ docker pull nginx で取得できるDoker Hub公式イメージ
(nginx version: nginx/1.13.8)
docker run -it -p 【任意のポート】:80 -v 【ローカルのマウントパス】:/var/www/html --name=nginx_sample nginx:latest bash
コンテナに入るので
最低限必要だったパッケージをインストール(個人的な好みです)
apt-get update
apt-get install procps net-tools less vim
ちなみにdocker pull したイメージがdebianでdebianを取り扱うのも初めてでした。
apt-get update
をしないとパッケージリストにvimなどが出てこなかったので混乱しました。
phpをインストール
※今回はphp7を導入します。php5系からphp7に移行したらものすごくパフォーマンスが上がったので実際に使うことになったらphp7にしたいため。でも7.0にしておきます。
phpをインストールするための準備
apt-get install software-properties-common
apt-get update
add-apt-repository ppa:ondrej/php
これをやらずに
apt-get install php7.0
しても
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php7.0
みたいに出ました。centOSばかり使っていたのでデフォルトでパッケージが入っているものとは違うんですね。
php7.0をインストール
apt-get install php7.0 php7.0-fpm
ここからは設定ファイルの編集です(ファイルの場所は環境により変わると思います)
vim /etc/nginx/conf.d/default.conf
#server_name localhost;
server_name 【ローカルのhostsで設定したローカル用のドメイン】;
location / {
root /usr/share/nginx/html;
#index index.html index.htm;
index index.php index.html index.htm;
}
・・・省略・・・
location ~ \.php$ {
root /var/www/html;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
青文字が変更点で変更前はコメントしています。
location / のところに index.phpを追記しましたが意味はないかもしれません。
apacheで言う所のドキュメントルート的なイメージで追記しましたがindex.phpでスタートしませんでした。
/scripts を $document_root(この場合はserver直下で root /var/www/html と指定する必要がある)にするかドキュメントルートにしたいパスを記述する必要がある
※unix socketでの設定でうまくいったのでこちらで記述していますがTCPの場合は以下のようにするみたいです。
vim /etc/nginx/conf.d/default.conf
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
vim /etc/php/7.0/fpm/pool.d/www.conf
listen = 127.0.0.1:9000
;listen = /run/php/php7.0-fpm.sock
ドキュメントルート的なのを/var/www/htmlにするので
mkdir -p /var/www/html
これでマウントしたローカルの配下に
<?php
echo phpinfo();
を書いたinfo.phpファイルを置く
再びコンテナ内で
vim /etc/php/7.0/fpm/pool.d/www.conf
; user = www-data
; group = www-data
user = nginx
group = nginx
アクセスユーザーの変更
nginxユーザーに設定したのでドキュメントルート以下もnginxにする
chown -R nginx:nginx /var/www/html
service nginx restart
service php7.0-fpm restart
これでhttp://【設定ローカルホスト名】:【任意のポート】/info.phpで表示されました。
これからサービスのつなぎこみにMysqlコンテナを作成して立ち上げオープンソースのサービスを動かしてみようと思います。
※【502 Bad Gateway】が出る場合はsocketがnginxから読み込めないのかもしれませんので見てください。
コメント
コメントを投稿