GitHub ActionsでAmazon Lightsailに自動でデプロイする方法


press
GitHub ActionsでAmazon Lightsailに自動でデプロイする方法

GitHub ActionsでAmazon Lightsailに自動でデプロイする方法

本記事ではGitHub上のリポジトリのmainブランチに変更(コミットやマージなど)があった際に、サーバー側からgit pullを実行してmain変更を反映する方法です。この方法を用いることで自動でデプロイできる環境を構築します。

デプロイするコードはGitHubリポジトリにあげています。

サーバー側でgit cloneとpullの確認

git cloneの確認

https:/USERNAME:PASSWORD@github.com/nobnov/deplytest.gitのようにユーザー名とパスワードを指定してリポジトリをcloneします。

sudo git clone https:/XXXXX:XXXXX@github.com/nobnov/deplytest.git
リポジトリをクローン

リモートリポジトリの確認

git remote -v
リモートリポジトリの名前と場所の確認

git pullの確認

sudo git pull origin main
リポジトリをpullします

Deploy keysの設定

GitHubリポジトリのDeploy keysに公開鍵を登録します。サーバーにログインして以下のコマンドで公開鍵の中身を表示します。

cat .ssh/authorized_keys
公開鍵の中身をコピー
公開鍵の設定

鍵のタイトル(任意)と上記でコピーした内容をペーストしてAdd kyeで登録します。

Actions secretsの設定

DEPLOY_KEYの設定

以下のコマンドでLightsailからダウンロードしたSSHキーの中身をターミナルの画面上に表示します。

cat .ssh/XXXXX
秘密鍵の中身をコピー

※コピーする時は-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----も含んでください。内側の文字列だけをコピーをするとWorkflow実行中に以下のエラーが発生します。

ssh.ParsePrivateKey: ssh: no key found
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none], no supported methods remain

登録する機密情報の一覧は以下の通りです。

DEPLOY_DIR/var/www/deploytes/deploytes(プロジェクトのディレクトリ)
DEPLOY_HOSTIPアドレス
DEPLOY_KEY秘密鍵の中身
DEPLOY_PORT22(実際に使用しているPort)
DEPLOY_USERubuntu(実際に使用しているユーザー名)

全ての設定(5つ)が完了すると画像のように表示されます。

リポジトリの機密情報を保存

Workflowの設定

ymlファイルの作成

set up a workflow yourselfをクリックしてWorkflowをymlファイルに以下のように変更します。ローカル環境でも編集可能ですが、今回はGitHub上で行います。

Workflowの設定
name: CI

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
          - name: Deploy
            uses: appleboy/ssh-action@master
            with:
              host: ${{ secrets.DEPLOY_HOST }}
              username: ${{ secrets.DEPLOY_USER }}
              port: ${{ secrets.DEPLOY_PORT }}
              key: ${{ secrets.DEPLOY_KEY }}
              script: |
                cd ${{ secrets.DEPLOY_DIR }}
                sudo git pull origin main

mainブランチへcommitするかプルリクエストをトリガーにWorkflowが実行して自動デプロイされます。

{{ secrets.DEPLOY_HOST }}のDEPLOY_HOSTの部分はActions secretsで登録したtitleで、secrets.XXXXXとすることで登録した機密情報を取得できます。

ymファイルをGitHub上で更新

Workflowの実行

workflowの実行と確認

上手くいくと以下のようにログが表示されます。

======CMD======
cd ***
sudo git pull origin main            

======END======
err: From https://github.com/nobnov/deplytest
err:  * branch            main       -> FETCH_HEAD
out: Already up to date.
==============================================
✅ Successfully executed commands to all host.
==============================================

人気のタグ

Beautiful Soup calender Channels charset ChromeDriver datetime Docker gettext GitHub glob Google Colaboratory Gunicorn i18n Matplotlib Nginx OpenCV pandas Pillow Pipenv PostgreSQL psycopg2 PyCharm PyCon pyenv random Redis ReportLab requests Selenium timedelta Ubuntu uWSGI venv


株式会社ファントムへのお問い合わせ

当ブログは群馬県でPythonを使ったAIやシステムを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments