
それではSSHでサーバーに入り、各ソフトウェアをインストールしていきましょう。
※ 以降のコード中に「your-domain.com」と記述されているところは、ご自身のチャットボットAPIのサーバーのドメインに置き換えてください。
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
python3 -c "import secrets; print(secrets.token_hex(32))"
そして吐き出された文字列をコピーして持っておきます。あとで使います。
flask openai gunicorn Flask-Session flask-cors
ついでにここでプログラム本体となる chat.py を中身空で用意しちゃいます。中身はあとで作成します。
そして、この requirements.txt と chat.py を /var/www/chatbot にアップロードします。
pip install -r requirements.txt deactivate
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
sudo systemctl daemon-reload sudo systemctl start chatbot sudo systemctl enable 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
sudo certbot --nginx -d your-domain.com
返答に従い証明書を取得・自動リロード設定
実行中に対話で「既存の設定を編集して HTTPS を追加しますか?」と聞かれたら 「はい」 を選んでください。
 
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
}
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
Gunicorn systemdリロード
sudo systemctl daemon-reload sudo systemctl restart chatbot
Nginx再起動
sudo nginx -t sudo systemctl reload nginx
 
環境構築は一通り完了です。
次はようやくコーディングに入っていきます。