1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【完全版】LINE Webhook × AWS EC2 × Docker × SSL セットアップ手順(迷わず構築できる)

1
Posted at

⚠️ 本記事について
本記事は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のインフラ構築は一通り完了です。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?