您好,登錄后才能下訂單哦!
本篇內容介紹了“如何用GitHub Actions自動部署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。
“如何用GitHub Actions自動部署Laravel項目”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。