GitHub Actions를 사용하여 공유 서버에 Laravel 애플리케이션 배포

소개



저는 최근에 스테이징 서버가 매우 제한된 권한을 가진 사용자와 공유 호스팅 계획에 있는 프로젝트에서 작업했습니다. 그 당시에는 git을 사용하여 FTP 서버에 변경 사항만 업로드하는 도구인 git-FTP 을 사용하여 업데이트를 푸시했습니다. 자동화가 없으면 git-FTP 초기 푸시 프로세스에 몇 시간이 걸립니다. 내 컴퓨터에서 워크로드를 오프로드하기 위해 GitHub Actions를 사용하기로 결정했습니다.

이 게시물은 스테이징 배포 작업에 SSH와 git-FTP의 조합을 사용하는 워크플로 파일을 다룹니다. GitHub Actions 에 대한 지식이 있다고 가정합니다.

워크플로를 시작하기 전에



워크플로는 SSH를 통해 서버에 연결하여 명령을 실행하고 파일은 FTP를 통해 전송됩니다. GitHub 계정에 다음 자격 증명에 대한 비밀이 저장되어 있어야 합니다.
  • FTP 사용자 자격 증명.
  • SSH 개인 키.

  • 스테이징 서버에 작곡가를 설치하는 데 몇 가지 문제가 있었고 git에 대한 종속성을 추적하고 싶지 않았기 때문에 배포하기 전에 종속성을 다운로드하고 아카이브를 만듭니다.

    또한 이 게시물은 스테이징 서버에 로그 파일을 생성하는 git-FTP의 초기 설정 후 배포 작업을 다룹니다.

    스테이징 워크플로



    워크플로 파일의 3가지 작업:

  • setup — 서버의 공급업체 디렉토리를 정리합니다.

    setup:
        runs-on: ubuntu-latest
        steps:
          - name: Remove vendor directory
            uses: fifsky/ssh-action@master
            with:
              command: |
                cd www/site_directory/
                [ -d ./vendor ] && rm -rf ./vendor
              host: https://staging-server.com
              user: system_user
              key: ${{ secrets.SSH_PRIVATE_KEY }}
    


  • 배포 — 종속성을 다운로드하고 사이트를 배포합니다.

    deploy:
        name: Deploy to the staging server
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - uses: actions/[email protected]
            with:
              fetch-depth: 2
    
          - name: Install Composer Dependencies
            run: composer install --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
    
          - name: Create zipped vendor directory
            uses: montudor/[email protected]
            with:
              args: zip -qq -r ./vendor.zip ./vendor
    
          - name: FTP-Deploy-Action
            uses: SamKirkland/[email protected]
            with:
              ftp-server: ftp://ADDRESS_HERE
              ftp-username: FTP_USER
              ftp-password: ${{ secrets.FTP_PASSWORD }}
    
    [vendor.zip](http://vendor.zip)는 git을 사용하여 추적되지 않으므로 .git-ftp-include 파일에 추가되어 항상 푸시됩니다. 아카이브를 생성하면 단일 파일로 전송할 수 있습니다. 이것은 실제로 내 워크플로 실행을 몇 분에서 몇 초로 줄였습니다. 이것은 꽤 멋진 트릭이라고 생각했습니다.

  • 배포 후 — 정리[vendor.zip](http://vendor.zip)하고 여러 장인 명령을 실행합니다.

    post-deploy:
        runs-on: ubuntu-latest
        needs: deploy
        steps:
          - name: Run migrations and seeders, clear cache for views, config and routes
            uses: fifsky/ssh-action@master
            with:
              command: |
                cd www/site_dir/
                unzip -qq ./vendor.zip
                rm -f vendor.zip
                php artisan migrate:fresh --seed
                php artisan config:clear
                php artisan view:clear
                php artisan route:cache
              host: https://SERVER_ADDRESS
              user: USER
              key: ${{ secrets.USER_PRIVATE_KEY }}
    


  • 워크플로 실행



    프로젝트에서 마스터 풀 요청에서만 업데이트를 가져오는 스테이징 분기로 푸시 시 실행되도록 워크플로를 설정했습니다. 다음은 전체 워크플로 파일입니다.

    name: Pushing to the staging server
    
    on:
      push:
        branches:
          - staging
    jobs:
      setup:
        runs-on: ubuntu-latest
        steps:
          - name: Remove vendor directory
            uses: fifsky/ssh-action@master
            with:
              command: |
                cd www/site_dir/
                [ -d ./vendor ] && rm -rf ./vendor
              host: https://ADDRESS_HERE
              user: USER
              key: ${{ secrets.USER_PRIVATE_KEY }}
    
      deploy:
        name: Deploy
        runs-on: ubuntu-latest
        needs: setup
        steps:
          - uses: actions/[email protected]
            with:
              fetch-depth: 2
    
          - name: Install Composer Dependencies
            run: composer install --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
    
          - name: Create zipped vendor directory
            uses: montudor/[email protected]
            with:
              args: zip -qq -r ./vendor.zip ./vendor
    
          - name: FTP-Deploy-Action
            uses: SamKirkland/[email protected]
            with:
              ftp-server: ftp://ADDRESS_HERE/
              ftp-username: FTP_USER
              ftp-password: ${{ secrets.FTP_PASSWORD }}
    
      post-deploy:
        runs-on: ubuntu-latest
        needs: deploy
        steps:
          - name: Run migrations and seeders, clear cache for views, config and routes
            uses: fifsky/ssh-action@master
            with:
              command: |
                cd www/site_dir/
                unzip -qq ./vendor.zip
                rm -f vendor.zip
                php artisan migrate:fresh --seed
                php artisan config:clear
                php artisan view:clear
                php artisan route:cache
              host: https://SERVER_ADDRESS
              user: USER
              key: ${{ secrets.USER_PRIVATE_KEY }}
    


    결론



    설정 작업에서 공급업체 디렉터리를 삭제할 때 사용자가 의도하지 않은 중단을 받을 수 있으므로 프로덕션 서버에 배포하기 위해 현재 상태에서 이 워크플로를 사용하지 않는 것이 좋습니다. 서버에 작곡가를 설치한 시나리오에서는 배포 작업에서 설정 작업과 종속성 설치 단계를 제거합니다. 또한 작성기 종속성을 업데이트하거나 배포 업데이트를 수행할 때 애플리케이션을 유지 관리 모드로 설정하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기