聊聊怎么用GitHub Actions自動部署Laravel項目

聊聊怎么用GitHub Actions自動部署Laravel項目

怎么用gitHub Actions自動部署laravel項目?在本文中,我將逐步介紹如何在 VPS 上免費自動部署您的 Laravel 應用程序。

場景設置…#

我是一個部署在 VPS 上的 Laravel 項目的小團隊的一員。我們的每個團隊成員都將從事一項特定的任務,當它準備好投入生產時,總是需要有人訪問服務器來部署正在推送到我們的 github Repo 的每個更改。

這對我們所有人來說都是一項非常重復和令人不快的任務,需要在我們的規(guī)模和預算范圍內找到解決方案,這就是我們求助于強大的?#?來自動化我們的工作流程的時候。

讓我們深入了解我們的工作流程設置指南的簡化版本。

假設#

在本指南中,我假設您檢查了以下幾點。

  • 你有一個配置好的 linux 服務器,它能夠運行 Laravel 應用程序,并且上面安裝了 Git。

  • 你有一個 Laravel 應用程序 Github 存儲庫。你可以按照我上一篇文章的前 2 部分在這里?#

這個怎么運作#

在典型的工作流程中,開發(fā)人員將為給定任務創(chuàng)建一個新分支,并向?main/master?分支發(fā)出拉取請求,或自行在?main/master?分支上進行更改 (不可取) 并推送。

pull request?和?push 都是我們可以通過 Github Actions 訂閱的給定分支上的事件。因此,我們可以定義一組指令,當給定事件在我們的倉庫上發(fā)生時應該執(zhí)行這些指令。這些指令可能正在運行我們的?Tests,Builds, 和?Deployments。

創(chuàng)建部署腳本

我們要做的第一件事是創(chuàng)建一個部署腳本,其中包含部署和運行我們的應用程序所需的所有命令。

在應用程序的根目錄中創(chuàng)建一個名為?.scripts 的文件夾。

在?.scripts 目錄中創(chuàng)建一個名為?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!"

請參閱腳本的注釋以了解我們在每一行上所做的事情。

創(chuàng)建工作流

Github 操作工作流是一組指令,其中包含可以在我們上面提到的事件上觸發(fā)的不同任務作業(yè)和步驟。

倉庫的工作流存儲在應用程序根目錄的?.github/workflows?中。

在?.github/workflows?文件夾中創(chuàng)建一個名為 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"

提交新創(chuàng)建的文件

現(xiàn)在我們已經為我們的自動化創(chuàng)建了所有必要的文件,讓我們使用以下命令提交它們。

$?git?add?deploy.sh?deploy.yml? $?git?commit?-m?"Deployment?automation"

創(chuàng)建部署分支并推送到 Github

如果您注意到我們的?deploy.sh?和?deploy.yml?文件,我們提到了一個名為?production 的分支。我們將使用此分支添加通過?push?或?pull request 可用于生產的提交。

使用以下 git 命令為您的存儲庫創(chuàng)建此分支并將它們推送到 GitHub。

$?git?checkout?-b?production? $?git?push?-u?origin?production

設置 ssh 密鑰

是時候在我們的服務器和 Github 之間建立連接了。

為此,我們首先需要在我們的服務器上生成一個新的 ssh 密鑰對。

在您的服務器上運行此命令以生成 ssh 密鑰。

$?ssh-keygen?-t?rsa?-b?4096?-C?"email@example.com"

當提示輸入文件名和密碼時,只需按 Enter 并接受默認值。

這將在您的根目錄?.ssh/?文件夾中創(chuàng)建 2 個 ssh 密鑰,公鑰和私鑰。

現(xiàn)在使用以下命令將新生成的 ssh 私鑰添加到 ssh-agent。

$?eval?"$(ssh-agent?-s)"$?ssh-add?~/.ssh/id_rsa

讓我們使用以下命令將我們的公鑰添加到我們服務器上的 authorized_keys?文件中。

$?cat?~/.ssh/id_rsa.pub?>>?~/.ssh/authorized_keys

復制 ssh 密鑰到 Github

我們的上述設置將允許:-

1。 Github Actions 向我們的服務器驗證自己并運行我們的?deploy.sh?腳本。

為此,我們必須讓 Github 知道如何對我們的服務器進行身份驗證。

當我們準備好上面的 ssh 密鑰時,它將與服務器的?HOST, ssh?PORT, ssh 私鑰的?KEY, 以及服務器的 USERNAME?一起提供給 GitHub。

為此,請在瀏覽器上訪問您的 Github 帳戶并打開您的倉庫。

點擊 settings,如下圖

聊聊怎么用GitHub Actions自動部署Laravel項目

在側邊欄菜單上單擊secrets

聊聊怎么用GitHub Actions自動部署Laravel項目

在 Action Secret 頁面上,單擊 new repository secret。

聊聊怎么用GitHub Actions自動部署Laravel項目

在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?關鍵字并在值中添加過去。

完成后,您的秘密應該看起來像這樣

聊聊怎么用GitHub Actions自動部署Laravel項目

2。我們的服務器向 Github 進行身份驗證并獲取我們存儲庫中的最新提交。

為了讓 Github 允許訪問我們的服務器,我們必須提供我們之前生成的 ssh 公鑰。

如果我們有多個倉庫,我們可以在帳戶級別提供公鑰,但如果它只是一個倉庫,我們可以在倉庫中提供它,并且只允許訪問我們帳戶上的那個倉庫。

為此,請再次轉到您的倉庫設置并單擊部署密。

聊聊怎么用GitHub Actions自動部署Laravel項目

添加部署密鑰..

聊聊怎么用GitHub Actions自動部署Laravel項目

給它起一個有助于記住服務器的標題,例如?PROD_SERVER。

聊聊怎么用GitHub Actions自動部署Laravel項目

對于關鍵字段值,轉到您的服務器并使用以下命令打印您的公鑰并復制它。

$ cat ~/.ssh/id_rsa.pub

不要檢查允許寫訪問,只需單擊添加密鑰按鈕。

最后一件事是更改我們服務器上的遠程源以使用 SSH 而不是 https 并執(zhí)行獲取以獲取服務器上的新提交。

為此,請轉到您的 Github 存儲庫并單擊 code 按鈕并復制 ssh 選項卡上的鏈接。

聊聊怎么用GitHub Actions自動部署Laravel項目

然后在您的服務器上轉到您部署的應用程序目錄,最常見的是?/var/html/www?并運行以下命令。

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git git fetch

將 URL 替換為您復制的 URL。

好了,我的朋友們,你現(xiàn)在有了 Laravel 應用程序部署自動化。 創(chuàng)建一個測試提交并將其推送到您的 production 分支,以見證奇跡發(fā)生。

您可以通過為您的測試構建、暫存環(huán)境等添加更多工作流來為它瘋狂……

原文地址:https://dev.to/kenean50/automate-your-laravel-app-deployment-with-github-actions-2g7j譯文地址:https://learnku.com/laravel/t/69131

【相關推薦:#

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享