はじめに
以前の記事の続きです
https://qiita.com/dragonnn/items/2f2e87d87204958ffaa2
以前作成したBotのソースはgitにあげといてください(.envはあげないよう気を付けて)
今回は、Amazon Lightsailでデプロイします
事前にAWSアカウントを作成してください
無料で使える「Koyeb」でデプロイするのが最適解です!
今回は勉強も兼ねてAmazon Lightsailでの手順を書きます。
Amazon Lightsailとは
AWSが提供する、使いやすい仮想プライベートサーバー(VPS)サービスで、ウェブサイトやアプリケーションを簡単に構築・運用できるサービスです。
最安で5ドルのプランがあり、現在は3か月間無料です
インスタンス作成
AWSマネジメントコンソールのLightsailにて、Create instance をクリック
設定は以下を参考にしてください
- Select a platform:Linux/Unix
- Select a blueprint:Operating System (OS) only (Ubuntu)
- Select a size:最安プラン
- Instance name:任意
インスタンス生成後は、SSH接続してみましょう
Connectタブ押下後、下部からSSH keyがダウンロードできるので、ダウンロードして、ローカルの.sshフォルダに入れといてください


下記コマンドでローカルからSSH接続してみましょう
# 例: ダウンロードしたファイル名が LightsailDefaultKey-ap-northeast-1.pem の場合
chmod 400 ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem
# インスタンスのIPアドレスは、Lightsailコンソールのインスタンス一覧で確認できます
ssh -i ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem ubuntu@インスタンスのIP
接続出来たら一旦OK
インスタンスにBotのソースを配置しよう
まずはローカルでプロジェクト直下にrequirements.txtを作ってpush
discord.py
python-dotenv
gitからcloneしよう
SSHでインスタンスに接続した状態で、コンソールからSSH Keyを作りましょう
ssh-keygen -t ed25519 -C "lightsail-github"
さらに公開鍵の内容を表示しましょう
cat ~/.ssh/id_ed25519.pub
GitHub → 対象リポジトリ →
Settings → Deploy keys → Add deploy key
で、先ほどの公開鍵の内容を貼り付けましょう
後はcloneするだけ
cd ~
git clone git@github.com:あなたのアカウント/リポジトリ名.git
cd 'cloneしたリポジトリ'
インスタンスにPython環境を作ろう
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
# 仮想環境を作成(推奨)
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
.envを作成
nano .env
nanoエディタでTOKENを設定
DISCORD_TOKEN=あなたのBotToken
パーミッション設定
chmod 600 .env
systemd でBotを常時稼働させよう
サービスファイルを作成
sudo nano /etc/systemd/system/'任意の名前.service'
以下を参考にしてください
WorkingDirectory、ExecStart、EnvironmentFileは、実際のディレクトリ名に変更してください
[Unit]
Description=Discord Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/discord-bot-test
ExecStart=/home/ubuntu/discord-bot-test/venv/bin/python /home/ubuntu/discord-bot-test/main.py
Restart=always
EnvironmentFile=/home/ubuntu/discord-bot-test/.env
[Install]
WantedBy=multi-user.target
ここまでお疲れ様でした
作成したserviceを動かしましょう
# 設定ファイルの再読み込み
sudo systemctl daemon-reload
# サービスの起動
sudo systemctl start '上記で付けたserviceの名前'
# サービスの自動起動を有効化(サーバー再起動時も自動で起動)
sudo systemctl enable '上記で付けたserviceの名前'
チャンネルで/helloと打つと、Botが挨拶を返してくれるはずです!
最後に
Botが起動しない場合は、以下コマンドでログを見てください
sudo journalctl -u サービス名 -n 50 --no-pager
次はCI/CD編を書きます