さくら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
<html>
<head>
<title>PHP TEST PAGE</title>
</head>
<body>
<div style="font-size: 48px; font-weight: bold;">
<?php
print "Hello world!";
?>
</body>
</html>
保存後、https://mydomain.com/index.php
等で表示されればOK。
phpinfo() を表示
さらにもう一つphpファイルを作成します。
$ sudo vi /var/www/html/info.php
<?php phpinfo(); ?>
ページを表示させる前に、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件のコメント