どうもこんにちは。この記事は、Laravel製SNS「Apprentory」のデプロイに苦しみまくった一人の開発者の、リアルな戦いの記録です。
このシリーズでは、以下の3部構成でお届けします。
- 前編:構成概要・環境準備・事前に知っておけばよかったこと
- 中編:Docker・Laravelの本番構成と落とし穴
- 後編:HTTPS化・エラー修正・CloudWatchでの監視まで
🎯 どんなサービス?
教材やオリジナルプロダクトをシェアできるSNS「Apprentory」を、AWS EC2(Amazon Linux)上でDocker+Laravelで動かしています。
- Laravel + MySQL + Apache
- Dockerコンテナで構築(MySQL含む)
- ACM + Route53 で HTTPS 対応(※ALBは使用せずEC2に直接対応)
🔥 地獄の始まり
開発はローカルで順調に動く。けど、いざ本番環境にデプロイしようとすると…
Dockerコンテナ起動しない
本番だけLaravelの.envが読み込まれない
CloudWatchが何も表示してくれない
何が起きてるのかすら分からない。とにかく辛い。何回コンテナ再起動したか覚えてない。SSHもタイムアウトして無言のエラー地獄。
ただ、あの地獄を超えたことで「本番環境の設計と向き合う力」がめちゃくちゃ鍛えられました。
☁️ 使ったAWS構成
項目 | 内容 |
---|---|
EC2 | Amazon Linux 2023 |
Docker | Laravelアプリ、MySQL含めコンテナ構成(docker-compose使用) |
Route53 | 独自ドメイン設定(apprentory.click) |
ACM | HTTPS対応(証明書発行、ALBなし) |
⚙️ 前準備で絶対やっておくべきこと
1. .env
をローカルと本番で分けろ!
本番で .env
を読み込まない原因、だいたいこれ:
APP_ENV=production
が抜けてる、または php artisan config:cache
してない。
php artisan config:clear
php artisan config:cache
この2行を本番環境で叩かないと、Laravelは.envの変更に気づいてくれません。
2. EC2のSSH接続、Elastic IP必須
再起動でIP変わる → VSCode繋がらない → 永遠の「初期化中」
→ Elastic IPで固定するのマジ大事
3. Docker内MySQLはIPで繋げ!
localhost
にしてると繋がらない。docker inspect
でIP調べてピンポイント指定が必要。
(本当は docker-compose のサービス名で解決するのが正道)
mysql -h 172.21.0.3 -u user -p
💡 今回のまとめ(前編)
- ローカルで動いてても、本番は別物と思え
- Elastic IPと.env構成は先にちゃんと設計しとこう
- SSHで毎回詰まって心折れそうになる
- でも、ちゃんと学びに変えればこの経験は一生モノ
次回は実際の Docker構成やLaravelの設定 にどんなトラップが潜んでたか、中編でがっつり晒していきます!