目的
かなり昔にGlitchでdiscordbotを運用していたがGlitchがサービス終了してしまったためAWSに移行したい。
費用を抑えるためにEC2ではなくLightsailで運用したい。
AWSを使いたい(私欲)
手順
※DiscordbotのID/TOKENの設定等については調べればその辺にあります(適当)
Lightsailインスタンスの作成
- AWSコンソールのLightsailの画面に遷移しCreate instanceを押す
- Select a platform:Linux/Unixを選択
- Select a blueprint:Ubuntu22.04を選択
- SSH key:デフォルトでOK
- Select a network type:IPv4(デフォルト)でOK
- Select a size:好きなプランを選んでください
- 好きな名前とかタグをつけてインスタンスの作成
Node.jsのセットアップ
-> コンソールからSSH接続
1. システム更新
sudo apt-get update -y && sudo apt-get upgrade -y
2. nvm(Node Version Manager)のインストール
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
3. nvmの設定をシェルに反映
export NVM_DIR="$HOME/.nvm"
. "$NVM_DIR/nvm.sh"
4. Node.js LTSバージョンをインストール
nvm install --lts
5. バージョン確認
node -v
npm -v
6. pm2のグローバルインストール
npm i -g pm2
pm2について
pm2はNode.jsアプリをバックグラウンドで動かし続けるためのプロセスマネージャーです
- pm2の役割
- 常駐運用
- ターミナルが閉じられていてもプログラムを動かし続けられます
- 自動再起動
- アプリケーションが落ちても自動で再起動します
- サーバーを再起動しても自動でアプリケーションを起動します
- ログ管理
- 実行ログを保存・リアルタイムで確認できます
- 複数のアプリ管理
- 複数のアプリうやAPIを同時に管理できます
- リソース監視
- CPUやメモリの使用量をリアルタイムで確認できます
- 常駐運用
アプリケーション配置
※ Gitですでに運用できるbotを作成した状態です
1. UbuntuにGitをインストール
sudo apt-get install -y git
2. ソースコードをGithubからサーバーにクローン
git clone <URL> <ディレクトリ名>
3. 依存モジュールのインストール
cd <ディレクトリ名>
npm ci
.envファイルの作成
※ アプリケーションの構成によって異なる
1. envファイルを作成
cd <ディレクトリ名>
touch .env
2. envファイルを編集
# どちらか
nano .env
vi .env
動作確認
※ アプリケーションによって異なる
# コマンドの登録
node command.js
# フォアグラウンドでテスト
node index.js
常駐化
1. バックグラウンドで起動 & pm2にプロセス登録
pm2 start index.js --name <プロセス名>
2. pm2での監視・自動起動設定
pm2 startup systemd -u <ユーザー名(例:$USER)> --hp <ホームディレクトリ(例:$HOME)>
3. pm2にプロセスを永続保存
pm2 save
4. 動作確認
pm2 status
pm2 logs <プロセス名>
更新時
1. プロジェクトディレクトリに移動
cd <ディレクトリ名>
2. 最新のコードを取得
git pull
3. パッケージの再インストール
npm ci
4. プロセスの再起動
pm2 restart <プロセス名>
5. pm2にプロセスを保存
pm2 save
6. 動作確認
pm2 status
pm2 logs <プロセス名>
セキュリティ/運用
- パーミッションの制限
chmod 600 .env
- 定期更新
sudo apt-get update -y && sudo apt-get upgrade -y
- ヘルスチェック
pm2 status
pm2 logs
感想
軽いアプリケーションなら24時間365日使用しても月$5~で運用できるのは本当にすごい!
しかもネットワークの設定等の難しそうなのは一切なし!めっちゃ楽!