php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

Docker+nginx+php7.0でphpinfo()を表示する

Docker+nginx+php7.0でphpinfo()を表示する

私、今まではLAMP環境しか触ったことがなかったんですが、最近それだけではダメだと気づき(手遅れに近いですが)、今回たまたまオープンソースをお試し程度に使うことになりオススメ環境がnginxだったので導入してみることにしました。

ちょこっと躓くこともあったのでメモ程度に

nginx + php 7.0

これで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から読み込めないのかもしれませんので見てください。

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする