コンパス社員がお届けする最新情報ブログ

Laravel 12 × Nginx を VPS で安全に運用する! 専用ユーザー運用

Laravel 12 は高速かつモダンで、多くの Web サービスで採用されています。
しかし、本番運用する上では以下のような課題があります。
- 複数のサイトが同じユーザー(例:www-data)で動いていると、一方が侵害されたときに他方のファイルまでアクセスされるリスクがある
- VPS 上で Git pull したいが、デフォルトの www-data ユーザーと一般ユーザーで権限が異なり、デプロイがしづらい
- サイトごとにファイル所有者を分けたいが、Nginx や PHP-FPM の設定が面倒
これらを解決するため、サイトごとに専用ユーザーを作成し、アプリファイルの所有者を分離する運用が有効です。
ここでは Laravel 12 を例に、以下の構成で手順を解説します。
✅ 専用ユーザー(例: cmps )を作成
✅ Nginx と PHP-FPM を cmps ユーザーで動作させる
✅ GitHub から直接デプロイできる環境を作る
✅ セキュアなファイル権限設定を行う
前提条件
以下の環境・準備が整っていることを前提とします。
- VPS(Ubuntu 22.04 など)に SSH で接続可能
- VPS に root 権限または sudo 権限がある
- Laravel 12 のプロジェクトを用意済み
- ドメインを取得済み
サーバー環境
今回の想定環境:
- VPS (Ubuntu 22.04)
- Nginx
- PHP 8.2
- Laravel 12
- GitHub でソース管理
1. サーバーを最新化
まずはパッケージを最新化します。
sudo apt update
sudo apt upgrade -y
2. 専用ユーザーの作成
新たに cmps というユーザーを作成します。
sudo adduser cmps
パスワードを設定し、他の情報は Enter でスキップして OK です。
さらに、sudo 権限が必要であれば付与します。
sudo usermod -aG sudo cmps
3. 必要パッケージのインストール
PHP 8.2 のインストール
Laravel 12 は PHP 8.2 以上が必要です。
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.2 php8.2-fpm php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-json php8.2-zip php8.2-curl php8.2-mysql unzip
Nginx のインストール
sudo apt install nginx
4.Composer のインストール
Composer をグローバルにインストールします。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer
Composer の動作確認
以下を実行し、バージョンが表示されれば成功です:
composer --version
5. アプリケーションファイルの移動
一般的には /var/www
に Laravel が置かれていますが、専用ユーザー運用のため /home/cmps/www に移動します。
まずディレクトリを作成します。
sudo mkdir -p /home/cmps/www
既存のアプリを移動する場合:
sudo mv /var/www/* /home/cmps/www/
6. 所有権の変更
アプリケーションディレクトリの所有者を cmps に変更します。
sudo chown -R cmps:cmps /home/cmps/www
7. Laravel 12 セットアップ
cmps ユーザーに切り替え、Laravel の依存関係をインストールします。
su - cmps
cd ~/www
composer install --optimize-autoloader --no-dev
.env ファイルを編集し、設定を記載します。
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://your-domain.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_db
DB_USERNAME=your_user
DB_PASSWORD=your_pass
APP_KEY を生成します。
php artisan key:generate
storage のリンクを作成します。
php artisan storage:link
パーミッションを設定します。
chmod -R ug+rwx storage bootstrap/cache
8. Nginx の設定
Nginx の設定ファイルを新規作成します。
sudo nano /etc/nginx/sites-available/cmps
以下のように記述します。
server {
listen 80;
server_name your-domain.com;
root /home/cmps/www/public;
index index.php index.html;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
有効化。
sudo ln -s /etc/nginx/sites-available/cmps /etc/nginx/sites-enabled/
9. PHP-FPM を専用ユーザーで動かす
PHP-FPM を www-data のままにすると、ファイルアクセスの権限で問題が起きます。
以下のように修正します。
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
変更箇所:
[cmps]
user = cmps
group = cmps
listen.owner = cmps
listen.group = cmps
ファイルの読み取りができるように、www-data ユーザーを cmps グループに追加します。
sudo usermod -a -G cmps www-data
保存後、PHP-FPM を再起動します。
sudo systemctl restart php8.2-fpm
10. Nginx の再起動
Nginx の設定をテストします。
sudo nginx -t
問題なければ再起動します。
sudo systemctl restart nginx
11. SSL 設定(Let’s Encrypt)
本番環境では SSL を設定します。
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
12. GitHub からのデプロイ設定
GitHub から pull するには cmps ユーザーで SSH 鍵を使います。
まず .ssh フォルダを作成します。
sudo mkdir /home/cmps/.ssh
Ubuntu ユーザーの鍵を移動する例:
sudo mv /home/ubuntu/.ssh/id_rsa.pub /home/cmps/.ssh/id_rsa.pub
sudo mv /home/ubuntu/.ssh/id_rsa /home/cmps/.ssh/id_rsa
sudo chown -R cmps:cmps /home/cmps/.ssh
sudo chmod 700 /home/cmps/.ssh
laracasts ユーザーに切り替え:
sudo su cmps
cd ~/www
git pull origin main
初回接続時には GitHub のホスト確認が求められるので yes を入力してください。
13. Laravel キャッシュ最適化
最後に以下を実行し、キャッシュを生成します。
php artisan config:cache
php artisan route:cache
php artisan view:cache
まとめ
✅ サイトごとに専用ユーザーを作成 → セキュリティ向上
✅ PHP-FPM を専用ユーザーで動かす → 権限トラブルを防止
✅ Git デプロイ対応 → 運用が楽になる
以上で、Laravel 12 を VPS 上で 安全に運用するための構成 が完成です。
特に本番環境では、こうした分離運用が非常に重要です。ぜひ導入してみてください!