首頁 > php框架 > Laravel > 主體

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

青灯夜游
發布: 2022-10-19 20:11:09
轉載
1144 人瀏覽過

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

怎麼用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 訂閱的給定分支上的事件。因此,我們可以定義一組指令,當給定事件在我們的倉庫上發生時應該執行這些指令。這些指令可能正在執行我們的 TestsBuilds, 和 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"
登入後複製

建立部署分支並推送到Github

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

使用以下 git 命令為您的儲存庫建立此分支並將它們推送到 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/ 資料夾中建立 2 個 ssh 金鑰,公鑰和私鑰。

現在使用以下命令將新產生的 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 setting

在侧边栏菜单上单击secrets

github add button

在 Action Secret 页面上,单击 new repository secret。

add button

在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 secrets

2\。我们的服务器向 Github 进行身份验证并获取我们存储库中的最新提交。

为了让 Github 允许访问我们的服务器,我们必须提供我们之前生成的 ssh 公钥。

如果我们有多个仓库,我们可以在帐户级别提供公钥,但如果它只是一个仓库,我们可以在仓库中提供它,并且只允许访问我们帐户上的那个仓库。

为此,请再次转到您的仓库设置并单击部署密。

deploy keys

添加部署密钥..

add deploy keys

给它起一个有助于记住服务器的标题,例如 PROD_SERVER

Image description

对于关键字段值,转到您的服务器并使用以下命令打印您的公钥并复制它。

$ cat ~/.ssh/id_rsa.pub
登入後複製

不要检查允许写访问,只需单击添加密钥按钮。

最后一件事是更改我们服务器上的远程源以使用 SSH 而不是 HTTPS 并执行获取以获取服务器上的新提交。

为此,请转到您的 Github 存储库并单击 code 按钮并复制 ssh 选项卡上的链接。

Image description

然后在您的服务器上转到您部署的应用程序目录,最常见的是 /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中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!