コンテンツにスキップ

Oracle Cloud Always Free VPS セットアップガイド

📁 docs/bot-scheduler/artifact/oracle-vps-setup.md

MyLabのBot・スクリプト群をOracle Cloud VPS(ARM A1)に移行し、24/7常時稼働させる手順。

アーキテクチャ

Oracle Cloud VPS (Ubuntu 22.04 ARM A1 / 4OCPU 24GB)
├── systemd(常駐プロセス)
│   ├── mylab-discord-bot    ← scripts/discord_bot/bot.py
│   └── bookmark-discord-bot ← projects/bookmark-discord-bot/main.py
└── cron(定期実行)
    ├── 08:00  buzz-collector --all-genres
    ├── 07:00  task_monitor.py
    ├── 21:00  task_monitor.py
    ├── 21:30  daily_summary/main.py
    └── */15   task_sync/main.py

Step 1: OCIアカウント作成(要クレカ)

入力済み情報(前回の続き):

項目
ホームリージョン Japan Central (Osaka) ← 変更しない
クラウドアカウント名 kazuma_dev
メールアドレス kazuma.001110@gmail.com
  1. https://signup.cloud.oracle.com/ にアクセス
  2. 「支払検証方法の追加」からクレジットカード情報を入力
  3. 「無料トライアルの開始」をクリック

注意: バーチャル・プリペイド・使い捨てカードは不可。本人確認のみで課金なし。


Step 2: PAYGアップグレード(アイドル回収防止)

登録直後に実施。Always Free範囲内では課金されない。

  1. OCIコンソール → 右上のユーザーアイコン → 「アップグレードと管理」
  2. 「従量課金制にアップグレード」を選択
  3. 確認して完了

Step 3: A1インスタンス作成

  1. OCIコンソール → コンピュート → インスタンス → 「インスタンスの作成」
  2. 設定:
項目
名前 mylab-vps
イメージ Ubuntu 22.04 (Canonical)
シェイプ VM.Standard.A1.Flex
OCPU 4
メモリ 24 GB
SSHキー 公開鍵を貼り付け(~/.ssh/id_rsa.pubの内容)
  1. 「作成」→ パブリックIPアドレスをメモ

Step 4: VPS初期セットアップ

# SSH接続
ssh ubuntu@<パブリックIP>

# MyLabをクローン(PATを用意しておくこと)
git clone https://github.com/KZ55230/MyLab.git ~/MyLab

# セットアップスクリプト実行
bash ~/MyLab/scripts/vps/setup.sh

セットアップスクリプトが以下を自動処理: - apt更新・必要パッケージインストール - Python venv作成・依存パッケージインストール - systemdユニット登録・自動起動有効化


Step 5: Credentials配置

ローカルPCから認証情報をVPSへ転送:

# ローカルPCで実行
scp Credentials/discord_token.json   ubuntu@<IP>:~/MyLab/Credentials/
scp Credentials/github_pat.json      ubuntu@<IP>:~/MyLab/Credentials/
scp Credentials/google_sheets.json   ubuntu@<IP>:~/MyLab/Credentials/
scp Credentials/gemini_api.json      ubuntu@<IP>:~/MyLab/Credentials/
scp Credentials/twitter_api.json     ubuntu@<IP>:~/MyLab/Credentials/

Step 6: cron登録

# VPS上で実行
crontab ~/MyLab/scripts/vps/cron/crontab.txt

# ログディレクトリ作成
mkdir -p ~/MyLab/logs/cron

# 確認
crontab -l

Step 7: Discord Bot起動・確認

# Bot起動
sudo systemctl start mylab-discord-bot
sudo systemctl start bookmark-discord-bot

# ログ確認
journalctl -fu mylab-discord-bot
journalctl -fu bookmark-discord-bot

# 自動起動状態確認
sudo systemctl status mylab-discord-bot
sudo systemctl status bookmark-discord-bot

Step 8: Windows側のTask Schedulerを無効化

VPS側の動作が確認できたら:

  1. タスクスケジューラを開く
  2. 以下のタスクを無効化(削除ではなく無効化推奨):
  3. MyLab Discord Bot
  4. Bookmark Bot
  5. Buzz Collector
  6. Task Monitor(朝/夜)
  7. Daily Summary
  8. Task Sync

日常運用

コード更新時

ssh ubuntu@<IP>
bash ~/MyLab/scripts/vps/deploy.sh

ログ確認

# Discord Bot ログ(リアルタイム)
journalctl -fu mylab-discord-bot

# cronジョブのログ
tail -f ~/MyLab/logs/cron/buzz-collector.log
tail -f ~/MyLab/logs/cron/task-sync.log

サービス操作

sudo systemctl restart mylab-discord-bot   # 再起動
sudo systemctl stop mylab-discord-bot      # 停止
sudo systemctl status mylab-discord-bot    # 状態確認

トラブルシューティング

インスタンス作成で「Out of capacity」エラー

  • 大阪リージョンで試す(東京は枯渇しやすい)
  • 深夜〜早朝(JST 01:00〜06:00)に再試行
  • OCPU/メモリを少し下げて試す(2コア/12GBなど)

Bot が起動しない

journalctl -u mylab-discord-bot --since "5 minutes ago"

よくある原因: - Credentialsファイルが未配置 - requirements.txtのパッケージ未インストール - discord_token.jsonのトークンが無効

cronが実行されない

grep CRON /var/log/syslog | tail -20

よくある原因: - パスが絶対パスになっていない(crontab.txtのMYLAB変数を確認) - venvのPythonパスが間違っている