VPSへの自動デプロイをGitHub Actionsで実現する完全ガイド

VPSへの自動デプロイをGitHub Actionsで構築する方法を解説。SSH接続、rsync、CI/CDパイプラインの設定手順を初心者向けに詳しく紹介。

VPS自動デプロイGitHub ActionsCI/CDrsyncSSH2026/5/25

はじめに

VPS(Virtual Private Server)を利用したWebアプリケーションの運用では、コードの変更を素早く本番環境に反映させることが重要です。手動でのデプロイはミスやダウンタイムの原因となりがちですが、GitHub Actionsを活用した自動デプロイを導入すれば、プッシュするだけで自動的にVPSに反映されます。本記事では、GitHub Actionsとrsync、SSHを組み合わせたCI/CDパイプラインの構築方法を、具体的な手順と共に解説します。

前提条件

  • GitHubアカウントとリポジトリがあること
  • VPSが用意されており、SSHでログインできること(Ubuntu 20.04/22.04を想定)
  • VPSにWebサーバー(Nginxなど)がインストール済みであること
  • ローカル環境にGitがインストールされていること
  • 手順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接続エラー

  • 秘密鍵の形式が正しいか確認(-----BEGIN OPENSSH PRIVATE KEY----- から始まること)
  • VPSのセキュリティグループでSSHポートが開放されているか確認
  • known_hostsに正しく追加されているか確認
  • 2. rsyncのパーミッションエラー

  • VPSのデプロイ先ディレクトリの所有者がSSHユーザーであるか確認
  • sudo rsync を使用する場合は、SSHユーザーにsudo権限が必要
  • 3. ワークフローが失敗する

  • GitHub Actionsのログを詳細に確認(各ステップの出力)
  • シークレットの値が正しいか再確認
  • まとめ

    GitHub Actionsを利用したVPSへの自動デプロイは、初期設定さえ済めば非常に強力なツールです。rsyncによる差分転送で高速な同期が可能であり、SSH経由で任意のコマンドを実行できるため、柔軟なデプロイ処理を実現できます。本ガイドを参考に、ぜひあなたのプロジェクトでも自動デプロイを導入してみてください。


    *この記事は実際のVPS環境での構築経験に基づいています。料金・スペックは執筆時点のものであり、最新情報は各事業者の公式サイトでご確認ください。*

    参考リンク

  • GitHub Actions ドキュメント
  • rsync マニュアル
  • webfactory/ssh-agent Action