WEB/システム/IT技術ブログ

GitHub Actionsを使ってレンタルサーバに自動デプロイ

GitHub Actionsを使ってレンタルサーバに自動でデプロイします。
これまで、GitHubで管理しているソースをコミット、プッシュした後、その差分を手動FTPでサーバにアップしてましたが、その部分を自動化したいと思います。

GitHub Actionsのドキュメント – GitHub Docs

ここでは、デプロイ対象のGitHubリポジトリとデプロイ先のレンタルサーバは、既存のものを利用します。

ワークフローファイル作成

GitHub Actionsの動作を設定するワークフローファイルを作成します。
今回は単純に、masterブランチにpushがあったら、ファイルをレンタルサーバにFTPアップロードします。

name: deploy
on:
  push:
    branches: [master]
jobs:
  web-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: get lastest code
        uses: actions/checkout@v3
      - name: sync files
        uses: SamKirkland/FTP-Deploy-Action@4.3.0
        with:
          server: ${{ secrets.FTP_SERVER }}
          username: ${{ secrets.FTP_USERNAME }}
          password: ${{ secrets.FTP_PASSWORD }}

「name」は任意です。「runs-on」にはデプロイ環境を指定します。
FTPにはGitHub – SamKirkland/FTP-Deploy-Actionを使用します。
FTPのユーザ名やパスワードなどをコードに書くことはセキュリティ的にリスクがあるので、環境変数を使用します。

環境変数を登録

先ほどymlに設定した「FTP_SERVER」などの環境変数を、GitHubに登録します。
ブラウザからGitHubにログインし、対象のプロジェクトを開きます。メニュー「Settings」⇒「Secrets」⇒「Actions」から「New repository secret」をクリックします。環境変数「FTP_SERVER」「FTP_USERNAME」「FTP_PASSWORD」の値を設定します。

ワークフローファイル登録

続いてGitHub管理画面から「Actions」⇒「New workflow」から「set up a workflow yourself」をクリックして、先ほど作成したワークファイルを登録します。
ワークフローファイルは、gitプロジェクトにディレクトリ「.github/workflows/」に拡張子「yml」で設置されます。
ファイル名は任意ですが、今回は「deploy.yml」とします。

動作確認

一通り環境が用意できたので、実際に任意のファイルをコミットプッシュしてみます。すると、対象ファイルが自動でデプロイされてることを確認できました。

GitHub Actionsの動作状態は、ワークフローを登録した画面から確認することができます。

1回目のデプロイは全ファイルが対象となるため、ファイル数が多いと時間がかかりますが、2回目以降は差分デプロイなので時間が短縮されます。

FTP-Deploy-Actionの設定

FTP-Deploy-Actionでは、ワークフローファイルの「with」のエリアで様々な設定が可能です。

例えば、「local-dir」でローカルのディレクトリ、「server-dir」でデプロイ先のディレクトリを指定する事ができます。

        with:
          local-dir: /dist/
          server-dir: /public_html/

FTPSを使用したり、ポートを変更する事もできます。

        with:
          protocol: ftps
          port: 10022

「exclude」でフォルダやファイルをデプロイ対象外に設定することができます。「docker」フォルダを対象外としたい場合、デフォルトで設定されているフォルダ「.git」「node_modules」に加えて設定します。

        with:
          exclude: |
                    **/.git*
                    **/.git*/**
                    **/node_modules/**
                    ./docker
B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives