share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.04.20 TUE

GitHub ActionsでLaravelプロジェクトをデプロイする

甲斐 甲

WRITTEN BY 甲斐 甲

Laravel Sailで作成したプロジェクトをServerless FrameworkでAWS LambdaとAurora Serverlessへデプロイできるようにしましたが、GitHub Actionsを利用してデプロイできるか試してみました。

前提

こちらのリポジトリにGitHub Actionsのワークフローを追加する手順となります。

手順

リポジトリにSecretを追加する

AWS環境へデプロイするのにAWSのクレデンシャル情報が必要となるため、対象となるリポジトリに以下のSecretを追加します。

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

デプロイ用の.envファイルを用意する

GitHub Actions環境でLaravelプロジェクトを展開する必要があるので、デプロイ用の.envファイルを用意します。

> cp .env.example .env-deploy

# 環境に合わせて編集

GitHub Actionsのワークフロー定義

以下がワークフローの定義となります。

name: deploy

on:
  push:
    branches:
    - main

jobs:
  deploy:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: cache vendor
      id: cache
      uses: actions/cache@v1
      with:
        path: ./vendor
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-

    - name: Composer install
      if: steps.cache.outputs.cache-hit != 'true'
      run: composer install -n --prefer-dist

    - name: Copy .env
      run: cp .env.deploy .env
    - name: generate key
      run: php artisan key:generate

    - name: Setup Node.js
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'

    - name: Install Dependencies
      run: |
        npm install serverless -g
        npm install

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ap-northeast-1

    - name: Deploy to Lambda
      run: sls deploy

    - name: Migrate
      run: vendor/bin/bref cli --region=ap-northeast-1 laravel-dev-artisan -- migrate

    - name: S3 sync
      run: aws s3 sync public s3://kai-laravel-test/public --delete

検討事項として、S3 syncにバケット名をベタ書きしている点、AWSクレデンシャルをステージ(prod、dev)ごとに切り替える方法などです。

動作確認

実際にGitHubリポジトリへpushしてワークフローが動作するか確認します。

うまく動作しました。デプロイ環境へアクセスしてみます。

うまく動作しました。
やったぜ

不要になったら

手元にリポジトリをクローンして開発・デプロイ環境があれば、コマンドで削除できます。

> aws s3 rm --recursive s3://kai-laravel-test/
> serverless remove

参考

kai-kou/laravel-sail-sample-projects at feature/deploy-aws-lambda
https://github.com/kai-kou/laravel-sail-sample-projects/tree/feature/deploy-aws-lambda

GitHub Actionsを使ってAWS Lambdaへ自動デプロイ (詳説+デモ手順付きver) – Qiita
https://qiita.com/homines22/items/412d4e81b24804d75205

GitHub ActionsでAWS S3に自動でデプロイする(静的ファイルのディレクトリを丸ごとアップロードする) – Qiita
https://qiita.com/tippy/items/488e52411a9a5765330f

元記事はこちら

GitHub ActionsでLaravelプロジェクトをデプロイする

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。