🌐 VPS 環境 再構築 Runbook¶
📁 docs/ops/runbook/vps.md
[!IMPORTANT] 最終検証日: 2026-07-13 環境変更時(OS再インストール・パッケージ更新・サービス追加)は必ずこの日付を更新すること。
対象環境¶
| 項目 | 仕様 |
|---|---|
| プロバイダ | Oracle Cloud Infrastructure(Always Free Tier) |
| OS | Ubuntu 22.04 ARM64 |
| 主な用途 | Bot 常時起動・cron・Webhook 受信 |
| ドメイン | kzlab.com(Cloudflare 管理) |
⚡ クイックスタート(全ステップ一覧)¶
Phase 1: 初期設定(ユーザー・SSH・ファイアウォール)
Phase 2: 開発ツール(Python・Git・pip)
Phase 3: 1Password CLI(op)
Phase 4: MyLab セットアップ
Phase 5: サービス設定(systemd・cron)
Phase 6: Cloudflare Named Tunnel
Phase 7: 監視・ログ設定
Phase 1: 初期設定¶
1-1. SSH 接続確認¶
1-2. システム更新¶
1-3. 作業ユーザー確認¶
1-4. 必要パッケージ¶
sudo apt install -y \
git curl wget unzip jq \
python3 python3-pip python3-venv \
build-essential libssl-dev \
tmux htop
1-5. ファイアウォール設定¶
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
sudo ufw status
Phase 2: 開発ツール¶
2-1. Git 設定¶
git config --global user.name "KZ55230"
git config --global user.email "73998660+KZ55230@users.noreply.github.com"
2-2. Python 環境¶
# pyenv インストール
curl https://pyenv.run | bash
# ~/.bashrc に追加
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
pyenv install 3.12.9
pyenv global 3.12.9
python3 --version
2-3. GitHub CLI¶
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
| sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
| sudo tee /etc/apt/sources.list.d/github-cli.list
sudo apt update && sudo apt install gh -y
Phase 3: 1Password CLI¶
# インストール
curl -sS https://downloads.1password.com/linux/keys/1password.asc \
| sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
echo 'deb [arch=arm64 signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/arm64 stable main' \
| sudo tee /etc/apt/sources.list.d/1password.list
sudo apt update && sudo apt install 1password-cli -y
# サービスアカウントトークンの設定
mkdir -p ~/.config/op
echo "(1Password サービスアカウントトークン)" > ~/.config/op/service_account_token
chmod 600 ~/.config/op/service_account_token
# 動作確認
export OP_SERVICE_ACCOUNT_TOKEN=$(cat ~/.config/op/service_account_token)
op whoami
[!NOTE] VPS 用のサービスアカウントトークンは Mac とは別のものを使用する。
1Password 管理コンソール(1password.com/integrations)で発行。
Phase 4: MyLab セットアップ¶
4-1. リポジトリのクローン¶
4-2. Python 仮想環境¶
4-3. 環境変数設定¶
# ~/.bashrc に追加
cat >> ~/.bashrc << 'EOF'
export OP_SERVICE_ACCOUNT_TOKEN=$(cat ~/.config/op/service_account_token)
export GH_TOKEN=$(op read "op://MyLab/MyLab - Github Pat/token")
EOF
source ~/.bashrc
Phase 5: サービス設定¶
5-1. systemd サービス(例: discord-notifier)¶
sudo tee /etc/systemd/system/discord-notifier.service << 'EOF'
[Unit]
Description=Discord Notifier Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/MyLab
Environment=PATH=/home/ubuntu/MyLab/.venv/bin
ExecStart=/home/ubuntu/MyLab/.venv/bin/python scripts/discord_notifier.py
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable discord-notifier
sudo systemctl start discord-notifier
sudo systemctl status discord-notifier
5-2. 現在稼働中のサービス¶
| サービス名 | スクリプト | 備考 |
|---|---|---|
| (未設定) | — | — |
[!TIP] 新しいサービスを追加したら上記の表を更新すること。
5-3. cron 設定確認¶
5-4. 現在の cron 一覧¶
| スケジュール | コマンド | 用途 |
|---|---|---|
0 7 * * * | cd ~/MyLab && .venv/bin/python scripts/sync_vps_inventory.py | VPS インベントリ同期 |
Phase 6: Cloudflare Named Tunnel¶
[!NOTE] ドメイン kzlab.com は Cloudflare で管理。Tunnel で VPS を外部公開。
# cloudflared インストール
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb \
-o cloudflared.deb
sudo dpkg -i cloudflared.deb
# Tunnel 認証(ブラウザ認証が必要なため Mac で実施してトークンを転送)
# cloudflared tunnel login
# 既存の Tunnel 設定を適用
cp ~/MyLab/configs/cloudflared/config.yml ~/.cloudflared/config.yml
# サービス化
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl status cloudflared
Phase 7: 監視・ログ¶
7-1. ログ確認¶
7-2. ディスク確認¶
🔧 トラブルシューティング¶
SSH 接続できない¶
# Oracle Cloud のセキュリティリスト(ファイアウォールルール)を確認
# コンソール → ネットワーキング → セキュリティリスト → イングレスルール
# ポート 22 (TCP) が許可されているか確認
サービスが起動しない¶
# ログ確認
journalctl -u <service-name> --no-pager -n 50
# 権限確認
ls -la ~/MyLab/scripts/
chmod +x ~/MyLab/scripts/target_script.py
1Password CLI が認証エラー¶
# トークンを再設定
cat ~/.config/op/service_account_token
export OP_SERVICE_ACCOUNT_TOKEN=$(cat ~/.config/op/service_account_token)
op whoami