VPSへの自動デプロイをGitHub Actionsで実現する完全ガイド
VPSへの自動デプロイをGitHub Actionsで構築する方法を解説。SSH接続、rsync、CI/CDパイプラインの設定手順を初心者向けに詳しく紹介。
はじめに
VPS(Virtual Private Server)を利用したWebアプリケーションの運用では、コードの変更を素早く本番環境に反映させることが重要です。手動でのデプロイはミスやダウンタイムの原因となりがちですが、GitHub Actionsを活用した自動デプロイを導入すれば、プッシュするだけで自動的にVPSに反映されます。本記事では、GitHub Actionsとrsync、SSHを組み合わせたCI/CDパイプラインの構築方法を、具体的な手順と共に解説します。
前提条件
手順1: VPS側の準備
SSHキーの生成と設定
まず、GitHub ActionsからVPSにSSH接続するためのキーペアを生成します。
ssh-keygen -t rsa -b 4096 -C "your-email@example.com" -f ~/.ssh/github-actions
公開鍵をVPSの~/.ssh/authorized_keysに追加します。
cat ~/.ssh/github-actions.pub >> ~/.ssh/authorized_keys
秘密鍵はGitHub Secretsに登録するため、内容をコピーしておきます。
cat ~/.ssh/github-actions
デプロイ先ディレクトリの作成
VPS上で、アプリケーションを配置するディレクトリを作成し、適切なパーミッションを設定します。
sudo mkdir -p /var/www/myapp
sudo chown -R $USER:$USER /var/www/myapp
手順2: GitHub Secretsの設定
リポジトリのSettings > Secrets and variables > Actions に移動し、以下のシークレットを追加します。
SSH_PRIVATE_KEY: 先ほど生成した秘密鍵の内容を貼り付けSSH_HOST: VPSのIPアドレスまたはドメインSSH_USER: VPSのユーザー名(例: ubuntu)SSH_PORT: SSHポート(デフォルトは22)手順3: GitHub Actionsワークフローの作成
リポジトリの.github/workflows/deploy.ymlを作成します。
name: Deploy to VPS
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install SSH key
uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Add SSH host to known_hosts
run: |
ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
- name: Deploy via rsync
run: |
rsync -avz --delete --exclude='.git*' --exclude='node_modules' \
-e "ssh -p ${{ secrets.SSH_PORT }}" \
./ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/myapp/
- name: Execute remote commands
run: |
ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
cd /var/www/myapp
# 例: npm install && pm2 restart app
# 必要に応じてコマンドを追加
echo "Deployment completed"
EOF
ワークフローの説明
on.push.branches: mainブランチにプッシュされた時に実行actions/checkout: リポジトリのコードをチェックアウトwebfactory/ssh-agent: SSHキーをエージェントに追加ssh-keyscan: ホストキーをknown_hostsに追加(初回接続時の確認を回避)rsync: ファイルをVPSに同期(--deleteで不要ファイルを削除)Execute remote commands: デプロイ後のコマンド実行(例: 依存関係インストール、プロセス再起動)手順4: 実際のデプロイ動作確認
mainブランチに変更をプッシュし、GitHub Actionsの実行状況を確認します。
git add .
git commit -m "Add GitHub Actions workflow"
git push origin main
リポジトリのActionsタブでワークフローが実行され、成功(緑色)になることを確認します。VPSにSSHでログインし、ファイルが正しく同期されているか確認します。
発展: テストやビルドの追加
より本格的なCI/CDパイプラインでは、デプロイ前にテストやビルドを実行します。以下はNode.jsアプリケーションの例です。
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
# 前述のデプロイ手順
トラブルシューティング
1. SSH接続エラー
2. rsyncのパーミッションエラー
sudo rsync を使用する場合は、SSHユーザーにsudo権限が必要3. ワークフローが失敗する
まとめ
GitHub Actionsを利用したVPSへの自動デプロイは、初期設定さえ済めば非常に強力なツールです。rsyncによる差分転送で高速な同期が可能であり、SSH経由で任意のコマンドを実行できるため、柔軟なデプロイ処理を実現できます。本ガイドを参考に、ぜひあなたのプロジェクトでも自動デプロイを導入してみてください。
*この記事は実際のVPS環境での構築経験に基づいています。料金・スペックは執筆時点のものであり、最新情報は各事業者の公式サイトでご確認ください。*