Dev Classmethod Jp Articles Ssh2 Bastion 2hop Deploy Automation
踏み台サーバー経由の2ホップデプロイをNode.js(ssh2)で完全自動化してみた
- URL: https://dev.classmethod.jp/articles/ssh2-bastion-2hop-deploy-automation
- 日付: 2026-06-21
- Tier: Tier 2
- 要旨: Node.js ssh2でローカル → 踏み台 → デプロイ先の2ホップデプロイを bash -s ストリームパイプで完全自動化。パック・SFTP進捗表示・SCP・リモートbash実行・ヘルスチェック・ログ自動保存を1コマンドで実行。
詳細
deploy.mjs: SSH認証自動解決(ssh-agent OR ~/.ssh キー探索)→ tarパック(.git・node_modules等除外、macOS._ファイル抑止)→ SFTP sftp.fastPut で進捗表示付きアップロード → 踏み台 scp でデプロイ先へ転送 → bash -s でリモートスクリプト実行。bash -s は stdin からスクリプト読込。deploy.sh: 初回「–init」で.env未設定時にガイド表示・停止。更新時は既存.env 退避・tar展開・復元で秘密情報保護。docker compose down → docker compose up -d –build → curl ヘルスチェック。docker-compose.override.yml で環境別ポートマップ。restart: unless-stopped でEC2起動時自動再開(朝の手動起動不要)。logs.mjs: リモート docker compose logs を –follow でリアルタイムストリーミング、–tail=N でN行表示。パック~デプロイ完了まで約3分。デプロイログを .ignore/deploy-logs/ に自動保存。