WORKS

実績・制作事例

サイトにチャットボット設置

4. AWS Lightsail に必要なモジュールをインストールする

それではSSHでサーバーに入り、各ソフトウェアをインストールしていきましょう。
※ 以降のコード中に「your-domain.com」と記述されているところは、ご自身のチャットボットAPIのサーバーのドメインに置き換えてください。

  1. 基本モジュールのインストール
    1行ずつ実行していってください。

    sudo apt update && sudo apt upgrade -y
    sudo apt install -y python3 python3-venv python3-pip nginx certbot python3-certbot-nginx git
    sudo mkdir -p /var/www/chatbot
    sudo chown ubuntu:ubuntu /var/www/chatbot
    cd /var/www/chatbot
    python3 -m venv venv
    source venv/bin/activate
    
  2. ここで、セッションをCookieで管理するときの暗号化キーを作っておきます。
    python3 -c "import secrets; print(secrets.token_hex(32))"
    

    そして吐き出された文字列をコピーして持っておきます。あとで使います。

  3. 必要なモジュールリストをテキストファイルで用意します。
    requirements.txt

    flask
    openai
    gunicorn
    Flask-Session
    flask-cors
    

    ついでにここでプログラム本体となる chat.py を中身空で用意しちゃいます。中身はあとで作成します。
    そして、この requirements.txt と chat.py を /var/www/chatbot にアップロードします。

  4. モジュールインストール
    pip install -r requirements.txt
    deactivate
    
  5. Gunicorn systemd サービス設定
    sudo nano /etc/systemd/system/chatbot.service
    

    chatbot.serviceファイルの中身を次のようにします。
    ここでさきほど用意した暗号化キーと、前々チャプターで用意したOpenAI API の Secret Key を所定の場所に書き込みます。

    [Unit]
    Description=Gunicorn instance to serve Flask chatbot
    After=network.target
    
    [Service]
    User=ubuntu
    Group=www-data
    WorkingDirectory=/var/www/chatbot
    Environment=PATH=/var/www/chatbot/venv/bin
    Environment=SECRET_KEY=ここにSECRET_KEY
    Environment=OPENAI_API_KEY=ここにOPENAI_API_KEY
    ExecStart=/var/www/chatbot/venv/bin/gunicorn --workers 2 --bind unix:/var/www/chatbot/chatbot.sock chat:app
    
    [Install]
    WantedBy=multi-user.target
    
  6. ファイルを保存して閉じたら、systemd を再読み込みしてサービスを起動
    sudo systemctl daemon-reload
    sudo systemctl start chatbot
    sudo systemctl enable chatbot
    
  7. Nginx リバースプロキシ設定
    /etc/nginx/sites-available/chatbot を作成します。

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

    以下のように記述します。

    server {
        listen 80;
        server_name your-domain.com;
    
        location /api/chat {
            include proxy_params;
            proxy_pass http://unix:/var/www/chatbot/chatbot.sock;
        }
    
        location /chat/ {
            alias /var/www/chatbot/static/;
            try_files $uri $uri/ =404;
        }
    }
    

    リバースプロキシの有効化と、Nginx 再起動

    sudo ln -s /etc/nginx/sites-available/chatbot /etc/nginx/sites-enabled
    sudo nginx -t
    sudo systemctl reload nginx
    
  8. SSL/TLS 設定(Let’s Encrypt)
    sudo certbot --nginx -d your-domain.com
    

    返答に従い証明書を取得・自動リロード設定
    実行中に対話で「既存の設定を編集して HTTPS を追加しますか?」と聞かれたら 「はい」 を選んでください。

  9. HTTPSを通す
    インスタンスを開き、「ネットワーキング」タブを選択。
    「IPv4 ファイアウォール」欄でHTTPS(TCP 443)を許可します。
    「ルールを追加」で
    カスタム TCP 443ポート を追加します。

  10. 最終的なNginx のリバースプロキシ設定の確認
    SSLを設定すると、そのタイミングで certbot がファイルを書き換えているはずです。
    /etc/nginx/sites-available/chatbot を開く:

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

    中身が以下のようになっているか確認します。

    # HTTPS(TLS)サーバーブロック
    server {
        server_name your-domain.com;
    
        # API リクエストを Gunicorn へ
        location = /api/chat {
            include proxy_params;
            proxy_pass http://unix:/var/www/chatbot/chatbot.sock;
        }
        location /chat/ {
            alias /var/www/chatbot/static/;
            try_files $uri $uri/ =404;
        }
    
        listen 443 ssl http2;  # managed by Certbot
        ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;   # managed by Certbot
        include             /etc/letsencrypt/options-ssl-nginx.conf;                 # managed by Certbot
        ssl_dhparam         /etc/letsencrypt/ssl-dhparams.pem;                       # managed by Certbot
    }
    
    # HTTP → HTTPS リダイレクト
    server {
        if ($host = your-domain.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
        listen 80;
        server_name your-domain.com;
        return 404; # managed by Certbot
    }
    
  11. メモリ不足対策にスワップ(1GB)追加します。
    cd /
    sudo fallocate -l 1G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
    # 起動時にも有効にする
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    
  12. 再起動

    Gunicorn systemdリロード

    sudo systemctl daemon-reload
    sudo systemctl restart chatbot
    

    Nginx再起動

    sudo nginx -t
    sudo systemctl reload nginx
    

 
環境構築は一通り完了です。
次はようやくコーディングに入っていきます。