12
8

More than 1 year has passed since last update.

GitHub Actionsを使ってさくらサーバーに自動でデプロイしてもらう

Posted at

やりたいこと

GitHubのmainブランチにマージしたら勝手にデプロイサーバーも更新。

やりたいことの流れ

  1. GitHubのmainブランチにpushしたら、
  2. GitHub Actionsを使ってさくらサーバーにsshで接続して、
  3. GitHub Actionsを使ってサーバーでgit pull origin mainを実行する

やりかた

さくらサーバーの設定

これしないと沼る。

さくらレンタルサーバーのサーバーコントロールパネルで
セキュリティ→国外IPアドレスフィルタリング→無効(制限しない)
にチェックして保存。
名称未設定.png

GitHub Actionsの設定

設定の流れ

  1. ssh設定して、
  2. サーバーに一旦デプロイして、
  3. GitHub Actionsで使う変数を登録
  4. GitHub ActionsのWorkflowを書く

sshの設定

sshの公開鍵は、登録の仕方が2つある。
①どのレポジトリでも使えるのと、②各リポジトリで使えるのと2つあるみたい。

①どのプロジェクトでも使えるのは、作業PCのsshを保存して、
②各リポジトリで使うのは、サーバーとかを登録する。

多分今回は②が良い。

①は右上の自分のアイコン→settings→SSH and GPG keys→New SSH key
②はリポジトリ→Settings→Deploy keys→Add deloy key
で公開鍵を登録する。
公開鍵はcat ~/.ssh/id_rsa.pubで表示できるのでそれをコピペする。

サーバーで一旦デプロイ

初回だけは環境整備とかする。
サーバーにsshで接続して、cloneして、環境整えて、一旦デプロイ。

さくらサーバーの場合は、
ssh [アカウント名]@[ホスト]でその後にサーバーパスワードを入力する。

こんな感じだと思う。
ssh hoge@hoge.sakura.ne.jp

GitHub Actionsで使う公開したくない変数を登録

GitHub ActionsはWorkflowというファイルに処理手順とかを書く。これはgitで管理されて、公開されるため、ここに直接sshのパスワードなどを書くわけにはいかない。なので、秘密の変数に入れておく。

レポジトリ→Settings→Secrets and variables→Actions→New repository secret

Nameが変数名、Secretが値。

こんな感じで登録しておく

Name Secret
SERVER_DEPLOY_DIR cdで移動するディレクトリ
SERVER_HOST ホスト
SERVER_USERNAME ユーザー名
SERVER_PASS 今回はパスワードを使ってssh接続する

Workflowを書く

リポジトリのActionsタブ
set up a workflow yourself
を選択

.github/workflows/ に***.ymlファイルができる。
上のパスのところにファイル名を入力する。

中身はこんな感じ。

name: sakura

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
     - name: Checkout Repository
       uses: actions/checkout@v3
     - name: Deploy
       uses: appleboy/ssh-action@master
       with:
         host: ${{ secrets.SERVER_HOST }}
         username: ${{ secrets.SERVER_USERNAME }}
         password: ${{ secrets.SERVER_PASS }}
         script: |
           cd ${{ secrets.SERVER_DEPLOY_DIR }}
           git pull origin main         

name:sakura:ワークフローの名前
on::なにをきっかけでActionを起こすか。今回はpushとpull_request
jobs::ワークフローの中に複数のjosを設定可能。複数のjosを行う1つのワークフロー。こんかいはjobは1つしかない。
build::jobの名前はbuild
runs-on: ubuntu-latest:このjobをどこで実行するか。ubuntuの最新で実行する。
steps::各jobの実行単位
name::そのstepの名前

uses:何を使うか。[リポジトリの場所]@[バージョン]となっていて、URLの、github.com/以降に[リポジトリの場所]を貼り付けるとそのリポジトリを見れる。

例えば、
uses: appleboy/ssh-action@masterappleboy/ssh-actionというリポジトリのmasterブランチを使う。
appleboy/ssh-action

with:など、uses以降はなにを使うかによって書き方が変わるので、リポジトリのRead.meを見て書き方を見るのが良さげ。
ここでは、script:を使って、ssh接続を行った後のコマンドを記述している。

記入が終わったら、下のStart commitボタンを押してコミットして終了。
Actionsタブで実行結果を確認できる。

以上!
GitHub Actionsを使ってさくらサーバーにsshしてコマンド叩くWorkflowの設定でした。
さくらサーバーの設定で沼らなければ簡単..!?

12
8
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
12
8