🎉
Laravel + EC2 + RDS + GitHub ActionsでCD構築した備忘録
CD環境メモ
Laravel12 + PHP8.2のDocker環境をEC2上に置き、RDS(MySQL) に接続、GitHub Actionsでpushすると自動でCDされる環境を作ったので、その歩みをまとめました。
コンセプト
- Laravel12 / PHP8.2 (Docker)
- Amazon EC2 (Amazon Linux 2023)
- RDS (MySQL 8.0)
- GitHub Actions
1. EC2にLaravel + Docker環境構築
Docker構成:
docker-compose.yml
services:
app:
build: ./infra/php
volumes:
- ./src:/data
web:
image: nginx:1.20-alpine
ports:
- 80:80
volumes:
- ./src:/data
- ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: laravel
MYSQL_USER: phper
MYSQL_PASSWORD: secret
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
PHP Dockerfile:
FROM php:8.2-fpm-bullseye
RUN apt-get update && \
apt-get install -y git unzip libzip-dev libicu-dev libonig-dev && \
docker-php-ext-install pdo_mysql intl zip bcmath
COPY /usr/bin/composer /usr/bin/composer
2. RDS(MySQL) の構築
- DBエンジン: MySQL 8.0
- インスタンスタイプ: db.t3.micro (free tier)
- セキュリティグループ設定:
- EC2からRDSの3306ポートへの通信を許可
.env
は以下:
DB_CONNECTION=mysql
DB_HOST=<RDSエンドポイント>
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=admin
DB_PASSWORD=<your-password>
検証が終わったら、Secretsに移行
3. Laravelのパーミッション設定
sudo chown -R nginx:nginx storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
php artisan config:clear
php artisan config:cache
php artisan migrate --force
4. GitHub Actions での CD
1) SSH鍵の登録(GitHubからEC2にSSHするための準備)
🔑 秘密鍵/公開鍵の作成手順
ローカル(Macなど)で以下を実行:
ssh-keygen -t ed25519 -C "github-deploy-key"
# ファイル保存場所は例: ~/.ssh/github-ec2
続いて:
cat ~/.ssh/github-ec2.pub
↑ これをコピーして、EC2側の ~/.ssh/authorized_keys
に追記
GitHubには秘密鍵の中身を登録:
cat ~/.ssh/github-ec2
🔐 GitHub Secrets に登録する値
-
EC2_SSH_KEY
: 上記の秘密鍵の中身すべて -
EC2_HOST
: EC2のパブリックIP -
EC2_USER
: ec2-user
deploy.yml
2) name: Deploy to EC2
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Add SSH key
uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.EC2_SSH_KEY }}
- name: Deploy via SSH
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
cd /var/www/laravel/src
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
EOF
まとめ
- LaravelをEC2に置いて、RDSと連携
- GitHub Actionsでpush すると自動deploy
Discussion