さくらVPS上でLAMP環境を構築した際の覚書です。
すでに、VPS上でUbuntu Server 18.04がインストールされた直後でなおかつ、前回のApache2.4のインストール作業が適用済み、という条件で設定をしていきます。

今回は、PHPをインストールします。

ゴール

  • すでにApache2.4のセットアップが終わっているものとします。
  • 今後インストールする予定のWordPress向けのPHP関連パッケージをインストールします。
  • また、PHP-FPMを有効にして、Apacheのevento MPMを有効にします。

PHPのインストール

PHP7.2をインストールします。

$ sudo apt install php-imagick php-pear php7.2 php7.2-cli php7.2-cgi php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml php7.2-xmlrpc php7.2-zip libapache2-mod-php7.2

php.iniの編集

php.iniファイルは、SAPI毎に用意されており、/etc/php/${PHP_VERSION}/${SAPI}/にあります。用途に応じて編集する必要がありそうです。

インストール直後は、/etc/php/7.2/apache2/php.ini になります。

下記は主な設定を提示しています。デフォルトのままの値もあれば違うものもあります。

; PHP タグの短縮型  を使用 可能にしない
short_open_tag = Off
; PHPのバージョン情報をさらさない
expose_php = Off
; スクリプトがタイムアウトするまでの秒数。
max_execution_time = 30
; リクエストをパースするときのタイムアウトまでの秒数
max_input_time=30
; 最大使用メモリ
memory_limit = 128M

;; エラーハンドリング
; スクリプトのエラーメッセージを表示しない。
display_errors = Off
; 起動時のエラーメッセージを表示しない
display_startup_errors = Off
; エラーをログに残す
log_errors = On
; エラーメッセージにタグを含めるかどうか。
html_errors = Off
;
error_log=/var/log/apache2/php_errors.log

;; データハンドリング
; PHPが変数argvとargcを宣言するかどうか
register_argc_argv = Off
; ブラウザで送信できる最大サイズ
post_max_size = 16M

;; ファイルアップロード
file_uploads = On
; アップロードできる最大サイズ
upload_max_filesize = 10M

;; Fopenラッパー
; URL(http://やftp://など・・)を、ファイルとして処理するかどうか
allow_url_fopen = On
; URL(http://やftp://など・・)を、ファイルとしてインクルードするかどうか
allow_url_include = off

;; [Date]
; タイムゾーンを日本に
date.timezone = "Asia/Tokyo"

;; [Session]
; 初期化していないセッションIDを受け付けない
session.use_strict_mode = 1
; セッションIDを保存するためにCookieを使用する
session.use_cookies = 1
; セッションIDの保存にCookieのみを使用し、URLに埋め込みません
session.use_only_cookies = 1
; セキュアな接続を通じてのみCookieを送信。HTTPとHTTPSが混在する場合はセッションを継続できないので注意
session.cookie_secure = 1
; セッション名を指定し、Cookie名として使用されます。アルファベットのみ。
session.name = SRANDCSESSID

;; [mbstring]
; mbstringで使用されるデフォルトの言語設定
mbstring.language = Japanese
; 透過的な文字エンコーディングフィルタを有効にするかどうか
mbstring.encoding_translation = Off
; 文字コードの検出の順番
mbstring.detect_order = auto

;; [opcache]
; キャッシュを有効にする
opcache.enable=1
; CLIのキャッシュを有効にする
opcache.enable_cli=1
; 共有メモリのサイズ
opcache.memory_consumption=128
; internされた文字列を格納するために使用されるメモリ量
opcache.interned_strings_buffer=8
; スクリプトの最大数
opcache.max_accelerated_files=4000
; 更新時にタイムスタンプをチェックする頻度。0でリクエストごとにチェック
opcache.revalidate_freq=60

; PHPの出力をgzip圧縮
zlib.output_compression = On

PHPが動作しているか確認

sudo apachectl -M | grep -i phpで、php7.2モジュールが有効になっているか確認。有効になっていない場合は、sudo a2enmod php7.2で有効にします。

phpの動作するページを作成し、表示させてみます。

$ sudo vi /var/www/html/index.php


PHP TEST PAGE


保存後、https://mydomain.com/index.php等で表示されればOK。

phpinfo() を表示

さらにもう一つphpファイルを作成します。

$ sudo vi /var/www/html/info.php

ページを表示させる前に、Apache2のmod_security2のセキュリティフィルタを一旦Offにします。セキュリティフィルタを有効にしたままだと、403 Forbidden..で403がレスポンスで返されるので、注意してください。

$ sudo a2dismod security2

その後、Apache2を再起動した上で、https://mydomain.com/info.phpで下のような画面が表示されればOK。

PHP-FPM with Apache2 mpm_event_module

Apacheで、mod_phpの代わりにphp-fpm(PHP FastCGIを使うように設定します。
PHP FastCGIモジュールをインストールします。

$ sudo apt install php7.2-fpm

必須のモジュールを有効にします。

$ sudo a2enmod proxy_fcgi setenvif

php-fpmを有効にします。

$ sudo a2enconf php7.2-fpm

mod_phpモジュールを無効にします。

$ sudo a2dismod php7.2

Apache2.4からは、MPM(Multi-Processing Module)はevent MPMが導入されてデフォルトにされているのですが、Ubuntuではprefork MPMがデフォルトにされています。
そこで、MPMをprefork MPMからevent MPMに変更します。

$ sudo a2dismod mpm_prefork

mpm_eventモジュールを有効に

$ sudo a2enmod mpm_event

php.ini を、/etc/php/7.2/apache2/php.ini からコピーしてきます。

$ sudo cp /etc/php/7.2/apache2/php.ini /etc/php/7.2/fpm/

apacheを再起動します。

$ sudo systemctl restart apache2

ここで再度、前項と同様にinfo.phpのページを表示させてみます。
以下のようになっていればOKです。

チェックポイントは、ServerAPIが、FPM/FastCGIとなっていること。もう一つは、設定ファイルのパスが/etc/php/${PHP_VERSION}/fpm以下から読み出されている部分(赤枠で囲んだ範囲)。

表示後は、mod_security2を有効にしておきます。

PHP7.3を導入するには?

PHP7.3をインストールすることもできます。

  • リポジトリを追加
$ sudo apt install software-properties-common
$ sudo apt-add-repository ppa:ondrej/php
  • パッケージ情報を更新
$ sudo apt update
PHP7.3で、WordPress(5.0.3)で動作を確認したところ、エラーを吐いてしまいました。
公式ではサポートされているはずですが、使用しているプラグインやテーマに依存するかもしれません。
そのため、ここではphp7.2をインストールしています。

0件のコメント

コメントを残す

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