それでは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
環境構築は一通り完了です。
次はようやくコーディングに入っていきます。