第10回 デプロイと運用管理

Laravel WebAPI開発

こんにちは、PHP開発者の皆さん!この連載の第10回では、Laravel 10を使って構築したAPIを本番環境にデプロイし、運用管理を行う方法について詳しく解説します。デプロイと運用管理は、アプリケーションの品質とパフォーマンスを維持するために重要なステップです。それでは、始めましょう!

1. デプロイの準備

環境設定

本番環境の設定ファイルを準備します。.env ファイルを作成し、本番環境に合わせた設定を行います。

本番環境用の設定例

.env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com

DB_CONNECTION=mysql
DB_HOST=your_db_host
DB_PORT=3306
DB_DATABASE=your_db_name
DB_USERNAME=your_db_user
DB_PASSWORD=your_db_password

CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
INI

デプロイツールの選択

デプロイには様々なツールがありますが、ここでは Laravel ForgeGitHub Actions を使用する方法を紹介します。

2. Laravel Forgeを使ったデプロイ

サーバーのセットアップ

  1. Laravel Forgeにログインし、新しいサーバーを作成します。ForgeはDigitalOcean、AWS、Linodeなどのクラウドプロバイダをサポートしています。
  2. サーバーがセットアップされたら、新しいサイトを作成し、GitHubリポジトリを接続します。

環境設定の追加

  1. 作成したサイトの「環境設定」タブで、本番環境用の.envファイルの内容を追加します。
  2. 「デプロイスクリプト」タブで、デプロイスクリプトを編集します。

デプロイスクリプトの例

cd /home/forge/yourdomain.com

git pull origin main
composer install --no-interaction --prefer-dist --optimize-autoloader

php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

npm install
npm run production
Bash

デプロイの実行

サイトの「デプロイ」タブから「デプロイ」ボタンをクリックして、デプロイを実行します。

3. GitHub Actionsを使ったデプロイ

ワークフローファイルの作成

GitHubリポジトリのルートに .github/workflows/deploy.yml ファイルを作成します。

deploy.ymlの例

.github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
          extensions: mbstring, intl, redis

      - name: Install Composer dependencies
        run: composer install --no-interaction --prefer-dist --optimize-autoloader

      - name: Install NPM dependencies
        run: npm install

      - name: Build assets
        run: npm run production

      - name: Deploy to server
        env:
          DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
        run: |
          ssh -o StrictHostKeyChecking=no forge@yourdomain.com -i $DEPLOY_KEY << 'EOF'
          cd /home/forge/yourdomain.com
          git pull origin main
          composer install --no-interaction --prefer-dist --optimize-autoloader
          php artisan migrate --force
          php artisan config:cache
          php artisan route:cache
          php artisan view:cache
          EOF
YAML

シークレットの設定

GitHubリポジトリの「Settings」→「Secrets and variables」→「Actions」から、新しいシークレットを追加します。ここでは、DEPLOY_KEY としてSSHデプロイキーを設定します。

4. 運用管理

ログ管理

Laravelは、デフォルトで storage/logs フォルダにログを保存します。本番環境では、エラーログやアプリケーションログを定期的に確認しましょう。

ログの設定

config/logging.php ファイルでログの設定を行います。例として、stackチャンネルにSlack通知を追加します。

config/logging.php
'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily', 'slack'],
    ],
    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 14,
    ],
    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'username' => 'Laravel Log',
        'emoji' => ':boom:',
        'level' => 'error',
    ],
],
PHP

パフォーマンスモニタリング

パフォーマンスの監視には、New RelicやLaravel Telescopeを使用します。

Laravel Telescopeのインストール

./vendor/bin/sail composer require laravel/telescope
./vendor/bin/sail artisan telescope:install
./vendor/bin/sail artisan migrate
Bash

Telescopeの設定

config/telescope.php ファイルで設定を行い、本番環境での使用を有効にします。

バックアップ

定期的なデータベースとファイルのバックアップを設定します。Laravel Backupパッケージを使用すると便利です。

Laravel Backupのインストール

./vendor/bin/sail composer require spatie/laravel-backup
./vendor/bin/sail artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
Bash

バックアップの設定

config/backup.php ファイルで設定を行い、S3などのリモートストレージを使用する場合は、適切な設定を追加します。

セキュリティアップデート

Laravelや依存パッケージのセキュリティアップデートを定期的に確認し、適用します。

Composerのアップデート

./vendor/bin/sail composer update
Bash

5. まとめ

この記事では、Laravel 10を使って構築したAPIのデプロイと運用管理について解説しました。適切なデプロイ手順を踏み、運用中に必要な監視やバックアップを行うことで、アプリケーションの安定性とセキュリティを維持することができます。この連載を通して、Laravel 10でのAPI開発の基本から運用までを学んでいただけたと思います。引き続き、学びを深めていきましょう!

Follow me!

コメント

PAGE TOP
タイトルとURLをコピーしました