さくらのVPS(Debian 12)にnginx + PHP-FPM + MariaDBを入れて、Laravelが動くLEMP環境を構築した手順メモ。毎回調べ直すのが面倒なのでまとめておく。
パッケージのインストール
apt update && apt upgrade -y
# nginxとMariaDB
apt install -y nginx mariadb-server
# PHP 8.3(ondrej/phpリポジトリを使う)
apt install -y lsb-release apt-transport-https ca-certificates wget
wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update
apt install -y php8.3-fpm php8.3-cli php8.3-mbstring php8.3-xml php8.3-curl
php8.3-zip php8.3-mysql php8.3-intl php8.3-bcmath
MariaDBの初期設定
mysql_secure_installation
対話式でrootパスワードの設定、匿名ユーザーの削除、リモートrootログインの無効化などを行う。全部「Y」で基本的にはOK。
# データベースとユーザーを作成
mysql -u root -p
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp'@'localhost';
FLUSH PRIVILEGES;
EXIT;
PHP-FPMの設定
デフォルトの /etc/php/8.3/fpm/pool.d/www.conf を確認する。
# Unixソケット方式に変更(TCP portより高速)
listen = /run/php/php8.3-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
# プロセス数(1GBプランの場合)
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
systemctl restart php8.3-fpm
systemctl enable php8.3-fpm
nginxの設定
/etc/nginx/sites-available/myapp を作成する。
server {
listen 80;
server_name example.com www.example.com;
root /home/yamazaki/myapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}
# シンボリックリンクを張って有効化
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# 構文チェック
nginx -t
# リロード
systemctl reload nginx
パーミッションの設定
chown -R www-data:www-data /home/yamazaki/myapp/storage
chown -R www-data:www-data /home/yamazaki/myapp/bootstrap/cache
chmod -R 755 /home/yamazaki/myapp/storage
動作確認
# PHP-FPM確認
systemctl status php8.3-fpm
# nginx確認
systemctl status nginx
# MariaDB確認
systemctl status mariadb
# phpinfoで動作確認(テスト後は必ず削除すること)
echo "<?php phpinfo();" > /home/yamazaki/myapp/public/info.php
まとめ
Debian 12 + nginx + PHP 8.3-FPM + MariaDB の組み合わせは、さくらのVPSで問題なく動く。PHP 8.3のインストールにはsury.orgのリポジトリ追加が必要な点だけ注意。Laravelを動かす場合はこの構成に加えてcomposer installとphp artisan系のコマンドを実行すれば動く。SSL化(Let's Encrypt)は次回の記事にまとめる予定。
