0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ubuntuサーバーにgithubのmasterブランチの変更を反映させる

Last updated at Posted at 2025-07-09

きっかけ

本職でもSESとして働いている私は親の顔よりもGitHubを見ている自信があります。

そんな私は自宅にサーバーPCを置いてDiscord BOTやマイクラサーバーを立てたりしているのですが,基本的にdevブランチで開発をして一通りデバッグ等が終わったらmasterブランチにマージしています。

その後に自宅サーバーからpullし本番環境を更新しています。

しかし昔はherokuを使っていた際にmasterブランチを更新しただけでコードが更新されてとても楽だった覚えがあります。

なので今回はそれを再現してみたいと思います。

え?無料サービスはあるんだからそれ使えば?

まだまだだな...これはねただのロマンなのだよ...

前提

  • Ubuntu 20.04.6 LTS(Linuxならこの記事参考にできると思う)
  • SSH 8.2p1
  • この記事を参考にするには
    • あくまで自動デプロイ方法を記載する記事なのでコードを反映する方法などについてはご自身でお調べください

手順

① 秘密鍵と公開鍵を生成

ubuntuサーバーでsshの秘密鍵と公開鍵を生成します。
以下コマンドを実行してください。

shell command
ssh-keygen -t ed25519 -C "github-deploy" -f ~/.ssh/github_deploy_key

すると以下のようなファイルが生成されます。

公開鍵(github_deploy_key.pub)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDuMyk3vF4XkQe3L5ZbKnf0nV8Z8vDummYKEYy+8T3N1 dummy-actions-deploy
秘密鍵(github_deploy_key)
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACD7jMyk3vF4XkQe3L5ZbKnf0nV8Z8vDummYKEYy+8T3N1AAAAIwAAAAtzc2
gtZWQyNTUxOQAAACD7jMyk3vF4XkQe3L5ZbKnf0nV8Z8vDummYKEYy+8T3N1AAAAQA0DnU
k8kuyKeZfzvmLzphzBQ+cNVM/er7i+wGjvTAD/AD+4zMpN7xeF5EHty+WWyp39J1fGfLw7
p2JBGMPvE9zdQAAAARmdWNrLWR1bW15
-----END OPENSSH PRIVATE KEY-----

※このキーはchatgptに生成させたものなのでご安心ください

② GitHub上に秘密鍵を登録する

GitHub リポジトリのページSettingsSecrets and variablesActionsNew repository secret

Name: SSH_PRIVATE_KEY
Value: github_deploy_key の中身(秘密鍵)

③ GitHub Actions ワークフローを書く

deploy.yml
name: Deploy to Server via SSH

on:
  push:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up SSH key
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/github_deploy_key
          chmod 600 ~/.ssh/github_deploy_key
          ssh-keyscan -H %サーバーのグローバルIP% >> ~/.ssh/known_hosts

      - name: Deploy via SSH
        run: |
          ssh -i ~/.ssh/github_deploy_key %ubuntuのユーザー名%@%サーバーのグローバルIP% "sh /home/%ubuntuのユーザー名%/python/project/bot.sh pull"
  • %サーバーのグローバルIP%: サーバーのIPアドレスを記載してください。
    基本的にグローバルIPを記載しポート22番を開放しておいてください。
  • %ubuntuのユーザー名%: そのコマンドをどのユーザーが使うかで書く内容が変わる
  • "sh /home/%ubuntuのユーザー名%/python/project/bot.sh pull"部は適宜システムを更新するロジックのコマンドをお書きください。

完成

これにて完成です。

masterブランチにpushしたりmaster merge from devなどを実行し確認してみてください。

改善案

  • セキュリティ面を気にするとIPアドレスやユーザー名も変数にした方がいいかもですね!
  • デプロイ専用の非特権ユーザーを作っておくのが一番良い
  • .ssh/authorized_keysではcommand="..."制限やno-pty, no-agent-forwardingも使うと強固
  • ファイアウォールでGitHub ActionsのIPを絞るのも効果的
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?