怎麼用GitHub Actions自動部署Laravel專案?在本文中,我將逐步介紹如何在 VPS 上免費自動部署您的 Laravel 應用程式。
#我是部署在 VPS 上的 Laravel 專案的小團隊的一員。我們的每個團隊成員都將從事一項特定的任務,當它準備好投入生產時,總是需要有人訪問伺服器來部署正在推送到我們的 GitHub Repo 的每個變更。
這對我們所有人來說都是一項非常重複和令人不快的任務,需要在我們的規模和預算範圍內找到解決方案,這就是我們求助於強大的 Github Actions 來自動化我們的工作流程的時候。
讓我們深入了解我們的工作流程設定指南的簡化版本。
#在本指南中,我假設您檢查了以下幾點。
你有一個配置好的 Linux 伺服器,它能夠運行 Laravel 應用程序,並且上面安裝了 Git。
你有一個 Laravel 應用程式 Github 儲存庫。你可以按照我上一篇文章的前 2 部分在這裡 free-serverless-laravel-deployment。
##在典型的工作流程中,開發人員將為給定任務建立一個新分支,並向 main/master
分支發出拉取請求,或自行在 main/master
分支上進行更改(不可取) 並推送。
pull request
和 push
都是我們可以透過 Github Actions 訂閱的給定分支上的事件。因此,我們可以定義一組指令,當給定事件在我們的倉庫上發生時應該執行這些指令。這些指令可能正在執行我們的 Tests
,Builds
, 和 Deployments
。
我們要做的第一件事是建立部署腳本,其中包含部署和執行我們的應用程式所需的所有命令。
在應用程式的根目錄中建立一個名為 .scripts
的資料夾。
在 .scripts
目錄中建立一個名為 deploy.sh
的文件,內容如下。
#!/bin/bash set -e echo "Deployment started ..." # Enter maintenance mode or return true # if already is in maintenance mode (php artisan down) || true # Pull the latest version of the app git pull origin production # Install composer dependencies composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader # Clear the old cache php artisan clear-compiled # Recreate cache php artisan optimize # Compile npm assets npm run prod # Run database migrations php artisan migrate --force # Exit maintenance mode php artisan up echo "Deployment finished!"
請參閱腳本的註解以了解我們在每一行上所做的事情。
Github 操作工作流程是一組指令,其中包含可以在我們上面提到的事件上觸發的不同任務作業和步驟。
倉庫的工作流程儲存在應用程式根目錄的 .github/workflows
中。
在 .github/workflows
資料夾中建立一個名為 deploy.yml
的文件,其中包含以下內容。
name: Deploy # Trigger the workflow on push and # pull request events on the production branch on: push: branches: - production pull_request: branches: - production # Authenticate to the the server via ssh # and run our deployment script jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Deploy to server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} port: ${{ secrets.PORT }} key: ${{ secrets.SSHKEY }} script: "cd /var/www/html && ./.scripts/deploy.sh"
#現在我們已經為我們的自動化創建了所有必要的文件,讓我們使用以下命令提交它們。
$ git add deploy.sh deploy.yml $ git commit -m "Deployment automation"
如果您注意到我們的 deploy.sh
和 deploy.yml
文件,我們提到了一個名為 production
的分支。我們將使用此分支新增透過 push
或 pull request
可用於生產的提交。
使用以下 git 命令為您的儲存庫建立此分支並將它們推送到 GitHub。
$ git checkout -b production $ git push -u origin production
是時候在我們的伺服器和 Github 之間建立連線了。
為此,我們首先需要在我們的伺服器上產生一個新的 ssh 金鑰對。
在您的伺服器上執行此命令以產生 ssh 金鑰。
$ ssh-keygen -t rsa -b 4096 -C "email@example.com"
當提示輸入檔案名稱和密碼時,只需按 Enter 並接受預設值。
這將在您的根目錄 .ssh/
資料夾中建立 2 個 ssh 金鑰,公鑰和私鑰。
現在使用以下命令將新產生的 ssh 私鑰新增至 ssh-agent。
$ eval "$(ssh-agent -s)"$ ssh-add ~/.ssh/id_rsa
让我们使用以下命令将我们的公钥添加到我们服务器上的 authorized_keys
文件中。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
我们的上述设置将允许:-
1\。 Github Actions 向我们的服务器验证自己并运行我们的 deploy.sh
脚本。
为此,我们必须让 Github 知道如何对我们的服务器进行身份验证。
当我们准备好上面的 ssh 密钥时,它将与服务器的 HOST
, ssh PORT
, ssh 私钥的 KEY
, 以及服务器的 USERNAME
一起提供给 GitHub。
为此,请在浏览器上访问您的 Github 帐户并打开您的仓库。
点击 settings,如下图
在侧边栏菜单上单击secrets
在 Action Secret 页面上,单击 new repository secret。
在new secret页面上,逐个添加以下密钥。
HOST
HOST
是您的服务器 IP 地址,在名称字段中输入 HOST
关键字,在值中输入您的服务器 IP 地址。
PORT
PORT
是您的 ssh 端口。在名称中使用 PORT
关键字并在值中使用 22
以使用默认 ssh 端口。
SSHKEY
SSHKEY
是我们在服务器上生成的私有 ssh 密钥。通常您不会与任何人共享您的私人 ssh 密钥,但由于我们正在进行自动化,因此这是必需的。
使用 SSHKEY
关键字作为名称字段。
要复制您的私钥值,请转到您的服务器并运行以下命令。
$ cat ~/.ssh/id_rsa
这将在您的终端上打印您的私人 ssh 密钥,将其复制并粘贴到值字段中。
USERNAME
最后一个是您要进行身份验证的 USERNAME
。
为此,您可以在服务器上运行 whoami
并获取值。然后在名称字段中使用 USERNAME
关键字并在值中添加过去。
完成后,您的秘密应该看起来像这样
2\。我们的服务器向 Github 进行身份验证并获取我们存储库中的最新提交。
为了让 Github 允许访问我们的服务器,我们必须提供我们之前生成的 ssh 公钥。
如果我们有多个仓库,我们可以在帐户级别提供公钥,但如果它只是一个仓库,我们可以在仓库中提供它,并且只允许访问我们帐户上的那个仓库。
为此,请再次转到您的仓库设置并单击部署密。
添加部署密钥..
给它起一个有助于记住服务器的标题,例如 PROD_SERVER
。
对于关键字段值,转到您的服务器并使用以下命令打印您的公钥并复制它。
$ cat ~/.ssh/id_rsa.pub
不要检查允许写访问,只需单击添加密钥按钮。
最后一件事是更改我们服务器上的远程源以使用 SSH 而不是 HTTPS 并执行获取以获取服务器上的新提交。
为此,请转到您的 Github 存储库并单击 code
按钮并复制 ssh 选项卡上的链接。
然后在您的服务器上转到您部署的应用程序目录,最常见的是 /var/html/www
并运行以下命令。
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git git fetch
将 URL 替换为您复制的 URL。
好了,我的朋友们,你现在有了 Laravel 应用程序部署自动化。 创建一个测试提交并将其推送到您的 production
分支,以见证奇迹发生。
您可以通过为您的测试构建、暂存环境等添加更多工作流来为它疯狂……
原文地址:https://dev.to/kenean50/automate-your-laravel-app-deployment-with-github-actions-2g7j
译文地址:https://learnku.com/laravel/t/69131
[Related recommendations: laravel video tutorial]
以上是聊聊怎麼用GitHub Actions自動部署Laravel項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!