MySQLのバージョンアップ(RDS) Laravel API(Lightsail)

RDS作成設定まとめ

Aurora and RDSサービスを選択して、「データベースを作成する」をクリック

エンジン設定

  • エンジンタイプ: MySQL
  • エンジンバージョン: MySQL 5.7.44-rds.20250103
  • テンプレート: 無料利用枠

DB設定

  • DB識別子: laravel-rds-db
  • マスターユーザー: admin
  • マスターパスワード: (設定したパスワード)※記録しておいてください

インスタンス設定

  • DBインスタンスクラス: db.t3.micro
  • ストレージタイプ: 汎用SSD (gp2)
  • ストレージ割り当て: 20 GiB

ネットワーク設定

  • VPC: Default VPC (vpc-949d95f3)
  • パブリックアクセス: あり
  • VPCセキュリティグループ: laravel-rds-sg(新規作成)

データベース設定

  • 最初のデータベース名: laravel_production
  • DBパラメータグループ: default.mysql5.7
  • バックアップ保持期間: 1日
  • 暗号化: 有効(aws/rds)

その他

削除保護: 無効(学習用)

マイナーバージョン自動アップグレード: 有効

セキュリティグループの設定

AWSコンソール画面でEC2サービスを選択して「セキュリティグループ」をクリック

先ほど作成したデータベースのlaravel-rds-sgがあるので、選択

インバウンドルールを編集

インバウンドルールとは

インバウンドルールで許可したIPアドレスだけがサーバーに接続できます。許可していないIPからの接続は全てブロックされます。

┌─────────────┐
│  あなたのPC  
└──────┬──────┘
       │ 接続リクエスト
       ▼
┌─────────────────────────┐
│  インバウンドルール
│  ✓ 設定したIP → OK
│  ✗ その他のIP → 拒否
└──────┬──────────────────┘
       │ 許可
       ▼
┌─────────────┐
│  RDS MySQL
└─────────────┘

設定内容

セキュリティグループ: laravel-rds-sg

  • タイプ: MYSQL/Aurora
  • ポート: 3306
  • ソース: 「マイIP」で入力
  • 説明: Local development accessなど

ソースで「マイIP」を選択できます

ローカル開発環境からアクセスする際、「マイIP」を選択すると現在接続しているネットワークのIPアドレスが追加されます。

グローバルIPアドレスは接続場所によって変わるため、自宅、カフェ、会社など複数の場所から作業する場合は、それぞれの場所のIPアドレスを個別に追加する必要があります。

また、LaravelをEC2にデプロイした後は、EC2インスタンスからRDSへ接続できるよう、EC2のセキュリティグループIDをソースとして追加します。

RDS接続情報

curlコマンドで確認

RDSでデータベース作成時に設定した「マスターユーザー」、「マスターパスワード」、「データベース名」を使用

# MySQLクライアントで接続テスト
mysql -h laravel-rds-db.c1ewmsukaqko.ap-northeast-1.rds.amazonaws.com \
  -P 3306 \
  -u admin \
  -p laravel_production

予算の作成

「請求とコスト管理」

予算タイプを選択

「コスト予算 – 推奨」 を選択

ローカルで Docker Sail 使っている Laravel プロジェクトのデプロイについて

「Docker 関連ファイルが入ったままデプロイでいいのか?」

docker-compose.yml がサーバー上にあっても実行されないため無害です。

わざわざ .gitignore に追加する必要はありません。DB 接続情報は .env ファイルで環境ごとに設定するだけで対応できます。

つまり本番環境(EC2/Lightsail/共用サーバー)では Laravel コードのみ使用し、MySQL は RDS を利用します。現状のリポジトリ構成のまま git push して、各サーバーで git clone または git pull すれば OK です。

Lightsail インスタンス作成

Lightsailとは?

基本定額定($5/月)データ転送が 1TB を超えた場合: $0.09/GB

インスタンス作成

Lightsail を開いて「インスタンスの作成」ボタンをクリック。

  • インスタンスの場所アジアパシフィック (東京) ap-northeast-1
  • プラットフォームをLinux/Unix
  • ブループリントをOS のみ → Ubuntu 24.04 LTS
  • インスタンスプランを$5 USD/月(512 MB RAM、1 vCPU、20 GB SSD)
  • インスタンス名をlaravel-api

静的 IP の作成

上記でインスタンスが生成されたら、ダッシュボードからそのインスタンスを選択して、Networkingタブを選択

静的IPの作成をして「Attach static IP」を確認

サーバーの初期設定

インスタンス一覧の接続するインスタンスの右上のターミナルのアイコンをクリックしてSSH接続

インストール可能なパッケージリストを更新して、最新版に更新(コピペはショートカットでなく右クリック貼り付け)

sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mysql-client php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-bcmath php8.3-curl php8.3-zip unzip git
  • nginx: Web サーバー(Laravel を公開するため)
  • mysql-client: RDS に接続するためのツール
  • php8.3: PHP 本体
  • php8.3-fpm: PHP を nginx で動かすために必要
  • php8.3-mysql: PHP から MySQL(RDS)に接続するため
  • php8.3-mbstring: 日本語などマルチバイト文字処理
  • php8.3-xml: XML 処理(Laravel が使用)
  • php8.3-bcmath: 高精度計算(Laravel が使用)
  • php8.3-curl: HTTP リクエスト(API 通信など)
  • php8.3-zip: ZIP ファイル処理(Composer が使用)
  • unzip: ZIP 解凍ツール
  • git: GitHub からコード取得

Composer のインストール

Composer インストーラーをダウンロード

curl -sS https://getcomposer.org/installer | php

Composer を使いやすい場所に移動

curl -sS https://getcomposer.org/installer | php

確認

composer --version

Laravel コードを配置

sudo mkdir -p /var/www
sudo chown -R ubuntu:ubuntu /var/www
cd /var/www
/var/www/
 ┗ html/  (nginx のデフォルト公開ディレクトリ)

Gitクローン

項目HTTPSSSH
clone設定不要SSH鍵の登録が必要
pull設定不要(公開リポジトリ)SSH鍵の登録が必要
pushPersonal Access Token が必要SSH鍵の登録が必要
事前設定なし(pushする場合のみ認証設定)SSH鍵生成 → GitHub登録
今回の用途サーバーで pull のみ → 最適push も必要なら推奨
ubuntu@ip-172-26-6-105:/var/www$ sudo chown -R ubuntu:ubuntu /var/www
ubuntu@ip-172-26-6-105:/var/www$ git clone https://github.com/idw-coder/laravel-rds.git laravel
Cloning into 'laravel'...
remote: Enumerating objects: 146, done.
remote: Counting objects: 100% (146/146), done.
remote: Compressing objects: 100% (108/108), done.
remote: Total 146 (delta 29), reused 131 (delta 14), pack-reused 0 (from 0)
Receiving objects: 100% (146/146), 99.18 KiB | 8.26 MiB/s, done.
Resolving deltas: 100% (29/29), done.
ubuntu@ip-172-26-6-105:/var/www$ 

Composer で依存関係をインストール

cd laravel
composer install --no-dev --optimize-autoloader

ストレージ権限設定
Laravel のログやキャッシュ用のディレクトリに書き込み権限を設定

php artisan migrate:status

RDS のセキュリティグループに Lightsail の IP を追加する必要があります

sudo chown -R www-data:www-data /var/www/laravel/storage /var/www/laravel/bootstrap/cache
sudo chmod -R 775 /var/www/laravel/storage /var/www/laravel/bootstrap/cache

Laravel を公開するために Nginx を設定

sudo nano /etc/nginx/sites-available/laravel

server {
    listen 80;
    server_name 54.178.81.51;
    root /var/www/laravel/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
sudo unlink /etc/nginx/sites-enabled/default

設定ファイルの切り替え、テスト

ubuntu@ip-172-26-6-105:/var/www/laravel$ sudo unlink /etc/nginx/sites-enabled/default
ubuntu@ip-172-26-6-105:/var/www/laravel$ sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
ubuntu@ip-172-26-6-105:/var/www/laravel$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ubuntu@ip-172-26-6-105:/var/www/laravel$ 

Nginx と PHP-FPM を再起動

sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm

ブラウザでアクセスできるか確認

RDSの料金が割高な気がする

LightsailにDBのデプロイもまとめた方がいいかも

https://aws.amazon.com/jp/lightsail/pricing