小学生でもわかる!GitHub ActionsでEC2自動デプロイの仕組み
むずかしい話の前に、全体の仕組みをかんたんに説明します。
あなたは作家です。原稿を書いたら、出版社(GitHub)に送ります。出版社にはロボット社員(GitHub Actions)がいて、原稿が届いた瞬間に自動で本屋さん(EC2サーバー)に並べてくれます。
あなたがやることは「原稿を送るだけ」。あとは全部ロボットがやってくれます。
自分のPC → push → GitHub → GitHub Actions起動 → EC2に自動デプロイ
↓
ユーザーがサイトを見られる!
この記事でやること
- GitHub Actionsのワークフローファイルを作成する
- GitHubにEC2接続用のシークレットを登録する
- pushしたらEC2に自動デプロイされる仕組みを完成させる
前提条件
- GitHubとEC2がSSH接続済みであること(前回の記事参照)
- EC2の `/var/www/html/` 以下にデプロイ用ディレクトリを作成済み

STEP1|EC2のデプロイ先ディレクトリを作成する
EC2にSSHで接続して、デプロイ先のディレクトリを作成します。
sudo mkdir /var/www/html/charakatsu-deploy
sudo chown ec2-user:ec2-user /var/www/html/charakatsu-deploy
確認します。
ls -la /var/www/html
ec2-user 権限でディレクトリが作成されていればOKです。
STEP2|GitHubにシークレットを登録する
GitHub ActionsからEC2に接続するために必要な情報を、GitHubのシークレットに登録します。
シークレットとは暗号化された環境変数のことです。パスワードや秘密鍵など、コードに直接書きたくない情報を安全に保管できます。
GitHubのリポジトリ → Settings → Secrets and variables → Actions → 「New repository secret」から以下の3つを登録します。
- EC2_SSH_KEY:EC2の秘密鍵(
~/.ssh/id_ed25519の中身) - EC2_HOST:EC2のパブリックIPアドレス
- EC2_USER:EC2のユーザー名(Amazon Linux 2023の場合は
ec2-user)
EC2の秘密鍵は以下のコマンドで表示できます。
cat ~/.ssh/id_ed25519
-----BEGIN OPENSSH PRIVATE KEY----- から -----END OPENSSH PRIVATE KEY----- まで全部コピーして登録してください。
EC2のパブリックIPはAWSコンソール → EC2 → インスタンスの詳細から確認できます。
STEP3|EC2のauthorized_keysに公開鍵を登録する
GitHub ActionsからSSH接続を受け入れるために、EC2の authorized_keys に公開鍵を追加します。
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
STEP4|EC2のセキュリティグループにSSHルールを追加する
GitHubのサーバーからEC2にSSH接続できるように、セキュリティグループのインバウンドルールにSSH(ポート22)を追加します。
AWSコンソール → EC2 → セキュリティグループ → インバウンドルールを編集 → 「ルールを追加」
- タイプ:SSH
- ソース:0.0.0.0/0
- 説明:GitHub Actions
STEP5|GitHub Actionsのワークフローファイルを作成する
EC2上でワークフローファイルを作成します。
cd ~/charakatsu-deploy
mkdir -p .github/workflows
nano .github/workflows/deploy.yml
以下の内容を貼り付けます。
name: Deploy to EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
- name: Deploy
run: |
ssh ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "cd /var/www/html/charakatsu-deploy && git pull origin main"
Ctrl + O → Enter → Ctrl + X で保存します。
STEP6|デプロイ先にgitリポジトリを初期化する
デプロイ先ディレクトリにGitHubのリポジトリをクローンします。
cd /var/www/html/charakatsu-deploy
git clone git@github.com:あなたのユーザー名/リポジトリ名.git .
STEP7|GitHubにpushして動作確認する
cd ~/charakatsu-deploy
git add .
git commit -m "Add GitHub Actions deploy workflow"
git push origin main
GitHubのActionsタブを開いて、緑のチェックマーク(Success)が表示されれば自動デプロイ完成です!
よくあるエラーと解決方法
実際にやってみると、いくつかハマりやすいポイントがあります。同じエラーが出たときの参考にしてください。
① sudo git clone するとPermission deniedになる
fatal: could not create work tree dir: Permission denied
sudo をつけてgit cloneするとrootユーザーのSSH鍵を使おうとするため、認証が通りません。sudo なしで実行してください。
# NG
sudo git clone git@github.com:...
# OK
git clone git@github.com:...
② dial tcp ***:22: i/o timeout
GitHub ActionsからEC2へのSSH接続がタイムアウトするエラーです。原因は2つ考えられます。
- EC2_HOSTにプライベートIPを設定している:AWSコンソールでパブリックIPを確認して登録し直してください
- セキュリティグループのSSHルールがない:インバウンドルールにSSH(ポート22)を追加してください
③ ssh: unable to authenticate
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]
SSH鍵の認証が通らないエラーです。以下を確認してください。
- EC2_SSH_KEYに秘密鍵を
-----BEGIN OPENSSH PRIVATE KEY-----から-----END OPENSSH PRIVATE KEY-----まで丸ごとコピーして登録しているか - EC2の
~/.ssh/authorized_keysに公開鍵を追加しているか(以下のコマンドで追加できます)
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
④ fatal: not a git repository
fatal: not a git repository (or any of the parent directories): .git
デプロイ先ディレクトリにgitリポジトリが存在しないエラーです。事前にgit cloneが必要です。
cd /var/www/html/your-deploy-dir
git clone git@github.com:あなたのユーザー名/リポジトリ名.git .
まとめ
- EC2のデプロイ先ディレクトリを作成
- GitHubにシークレット(SSH鍵・IP・ユーザー名)を登録
- authorized_keysに公開鍵を追加
- セキュリティグループにSSHルールを追加
- GitHub Actionsワークフローファイルを作成
- pushしたら自動でEC2にデプロイされる仕組みが完成!
次回はこの仕組みを使って、実際のファイルを自動デプロイする応用編を解説します。
STEP8|テストpushで動作確認する
最後に、実際にpushして自動デプロイが動くか確認しましょう。
EC2のターミナルでテスト用ファイルを作ってpushします。
cd ~/charakatsu-deploy
echo "test" > test.txt
git add .
git commit -m "Test auto deploy"
git push origin main
pushが完了したらGitHubのリポジトリ → 「Actions」タブを開いてください。
一番上のワークフローが緑のチェックマーク(Success)になっていれば自動デプロイ完成です!
これで次回からはpushするだけでEC2に自動反映される環境が整いました。

