EC2 Amazon Linux 2023 にて PHP をインストールして、
ブラウザに hello world を表示させるまでのメモ。
環境
- AWS
- EC2 Amazon Linux 2023
- Nginx 1.24.0
- PHP 8.3.10
- 作業ユーザーは ec2-user
- 管理者は root
PHP のインストール
バージョン指定しなかったら最新版がインストールされるっぽい。
# 大量にでてくる
$ dnf search php
# 必要そうなものだけインストールする
# 正直どれが必須でどれが不必要か分からない
#
$ sudo dnf -y install php php-fpm php-devel php-cli php-common php-mbstring php-mysqlnd php-pdo php-bcmath php-xml php-gd php-gmp
# 確認
$ php -v
PHP 8.3.10
# php-fpm の起動、自動起動
$ sudo systemctl start php-fpm.service
$ sudo systemctl enable php-fpm.service
php-fpm の設定
Nginx で PHP を動かす時は php-fpm が必要。
変更点と確認する点のみ抜粋。
/etc/php-fpm.d/www.conf
デフォルトが apache になってる。
; Unix user/group of processes
user = nginx
group = nginx
sock ファイルの名前とパス確認。
; The address on which to accept FastCGI requests.
listen = /run/php-fpm/www.sock
権限の確認。デフォルトが nobody になってる。
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
こちらの権限も確認。
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
listen.acl_users = apache,nginx
;listen.acl_groups =
ログの場所の確認。
; The log file for slow requests
slowlog = /var/log/php-fpm/www-slow.log
再起動
$ sudo systemctl restart php-fpm.service
Nginx の設定
/etc/nginx/conf.d/php-fpm.conf
特に必要ないから名前を変更しておく。
$ cd /etc/nginx/conf.d/
$ sudo mv php-fpm.conf php-fpm.conf.temp
/etc/nginx/default.d/php.conf
特に必要ないから名前を変更しておく。
$ cd /etc/nginx/default.d/
$ sudo mv php.conf php.conf.temp
/etc/nginx/conf.d/your-product.conf
PHP のフレームワークを導入想定。
server {
listen 80;
listen [::]:80;
# server_name your.prod.com;
server_name localhost;
root /path/to/your-product/app/public;
index index.php index.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# using PHP
#
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index /index.php;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# using PHP Framework
#
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^(.*)$ /index.php?_url=$1;
}
location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
root /path/to/your-product/app/public;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
再起動
$ sudo systemctl restart nginx.service
hello world
/path/to/your-product/app/public/index.php
hello world!
その他作業
- PHP にて session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied の対応
- PHP のバージョン管理 Composer について
確認
該当サーバーの IP アドレスにアクセスすると、 hello world が表示されている。と思う。