Astroで作ったWebサイトをエックスサーバーに自動アップロードする

前回の記事で、AstroでWebサイトを作成しました。

今回はこのWebサイトを、Githubへのコミットをトリガーにしてビルドし、自動的にエックスサーバーにFTP転送されるように設定していきます。

FTP情報の確認

エックスサーバーでFTP情報を確認するには、サーバーパネル⇒サブFTPアカウント設定⇒すべてのドメインの「選択する」⇒FTPソフト設定タブを開きます。

初期FTPアカウントの設定内容を使います。(画像はセキュリティのため白く塗りつぶしてあります)

Github Actionsの定義ファイルを作成

プロジェクトのルートに.githubフォルダを作成します。その中に更にworkflowsフォルダを作成します。そしてそこにdeploy.ymlという名前のファイルを作成します。(ファイル名は任意です)

ファイルに以下のように記述します。

name: Deploy website on push
on:
  push:
    branches: [master]


jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
      - name: Get latest code
        uses: actions/checkout@v2
        
      - name: Use Node.js 14
        uses: actions/setup-node@v2
        with:
          node-version: '14'
          
      - name: Build Project
        run: |
          npm install
          npm run build
          
      - name: Sync files
        uses: SamKirkland/FTP-Deploy-Action@4.3.1
        with:
          server: ${{ secrets.FTP_SERVER }}
          username: ${{ secrets.FTP_USERNAME }}
          password: ${{ secrets.FTP_PASSWORD }}
          local-dir: ./dist/
          server-dir: ${{ secrets.FTP_SERVER_DIR }}

内容としては、

  • masterブランチへのpushをトリガーにして発動
  • まずAstroのプロジェクトをビルドする
  • ビルドの結果生成されたファイルをエックスサーバーにFTP転送する

という流れになっています。

Github Actions Secretsの設定

上記の定義ファイルはFTPサーバのホスト名、ユーザ名、パスワード、アップロード先をSecretsから取得するようになっています。

そのためGithubのリポジトリでこれらの値を設定します。

Githubのリポジトリを開き、Settings⇒Secrets⇒Actionsを選択します。「New repository secret」というボタンがあるので、上記4つの変数名と値を登録します。

server、username、passwordはエックスサーバーのページで確認したFTP情報を使います。

local-dirは、アップロードしたいフォルダです。Astroのプロジェクトをビルドすると、デフォルトでdistフォルダに必要なファイルが生成されるので、distフォルダをアップロードするようにしています。これは、特に秘密情報ではないため定義ファイルにそのまま書いています。

server-dirはアップロードする先です。エックスサーバーでは、ルートディレクトリは「/ドメイン名/public_html/」となります。そのためルートディレクトリにアップしたい場合はこのように値を設定します。サブドメインを使う場合は、「/ドメイン名/public_html/サブドメイン名/」となります。

pushする

ここまで設定できたら、masterブランチにpushしてみます。

pushしたと同時にActionsが動き出し、ビルド⇒デプロイが実行されます。

Actionsが完了したら、URLにアクセスしてみて、ちゃんとWebサイトが表示されればOKです!

まとめ

これで、今後Webサイトを更新しようと思ったときも、Githubにコミットをするだけで自動でデプロイしてくれるので、とても楽ですね!

コメントする

メールアドレスが公開されることはありません。