LoginSignup
7
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-03-31

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

前提

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

手順

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

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

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

image.png

デプロイ用の.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してワークフローが動作するか確認します。

image.png
image.png
image.png

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

image.png
image.png
image.png

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

不要になったら

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

> 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

7
5
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
7
5