⚠️ 本記事について
本記事はAIの補助を受けて作成しています。
内容の正確性には注意していますが、環境差異やバージョン違いにより動作しない可能性があります。
実行する際はご自身の環境に合わせてご確認ください。
自分自身理解が浅くあまりまとめられていませんが備忘録もかねて、、、。
■LINE Webhook × AWS EC2 完全セットアップ
■① ゴール
最終的に構築する構成は以下です。
LINE → HTTPS → EC2(Nginx)→ Docker → Laravel → ChatGPT → LINE返信
■② 前提条件
■インフラ
AWS EC2(Ubuntu)起動済み
Elastic IP 割り当て済み
■ドメイン
独自ドメイン取得済み
■DNS設定(最重要)
Aレコード:
yourdomain.com → EC2のElastic IP
■確認
nslookup yourdomain.com
👉 これが通らない場合、SSLは失敗します
■③ セキュリティグループ設定
EC2のセキュリティグループで以下を許可
HTTP 80 0.0.0.0/0
HTTPS 443 0.0.0.0/0
SSH 22 自分のIP
■④ EC2初期セットアップ
sudo apt update
sudo apt install -y nginx
sudo apt install -y certbot python3-certbot-nginx
sudo apt install -y docker.io docker-compose
sudo usermod -aG docker ubuntu
newgrp docker
■⑤ nginx(HTTPで起動)
sudo nano /etc/nginx/sites-enabled/default
server {
listen 80;
server_name yourdomain.com;
location / {
try_files $uri $uri/ =404;
}
}
sudo nginx -t
sudo systemctl restart nginx
■⑥ SSL設定
sudo certbot --nginx -d yourdomain.com
■失敗する場合
DNSエラー
Aレコード未設定または反映待ち
nginxエラー
SSL設定を先に書いてしまっている
■⑦ nginx(本番構成)
sudo nano /etc/nginx/sites-enabled/default
server {
listen 80 default_server;
server_name _;
return 404;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
sudo nginx -t
sudo systemctl restart nginx
■⑧ Docker構成
nginx:
ports:
- "8000:80"
❌ NG
- "443:443"
👉 443はホストのnginxが使用
■⑨ コンテナ起動
cd ~/line-chatgpt-api
docker-compose up -d
docker ps
期待状態
laravel_nginx Up 0.0.0.0:8000->80
laravel_app Up 9000
mysql_db Up
■⑩ 動作確認
https://yourdomain.com
👉 鍵マークが表示されれば成功
■⑪ LINE Webhook設定
Webhook URL
https://yourdomain.com/api/webhook/line
👉 Verify成功でOK
■⑫ 通信フロー
LINE
↓
POST /api/webhook/line
↓
EC2 nginx(443)
↓ proxy_pass
localhost:8000
↓
Docker nginx
↓
PHP-FPM
↓
Laravel Controller
↓
ChatGPT API
↓
LINE返信
■⑬ トラブルシュート
■DNS確認
nslookup yourdomain.com
■ポート確認
sudo lsof -i :80
■nginx確認
sudo systemctl status nginx
■Docker確認
docker ps
■⑭ フェーズ確認
① DNS OK → SSLへ
② SSL OK → Dockerへ
③ Docker OK → LINE接続
■⑮ 完成状態
インフラ:構築完了
HTTPS:有効
LINE:接続済み
Bot:稼働
■最重要まとめ
DNSが最重要(ここが通らないと全て失敗)
SSLはDNSが通れば成功する
443はホストnginx専用
Dockerは8000で受ける
LINEはHTTPS必須
この手順で、LINE Botのインフラ構築は一通り完了です。