目录
创建部署脚本
创建工作流
提交新创建的文件
创建部署分支并推送到 Github
设置 ssh 密钥
复制 ssh 密钥到 Github
HOST
PORT
SSHKEY
USERNAME
首页 php框架 Laravel 聊聊怎么用GitHub Actions自动部署Laravel项目

聊聊怎么用GitHub Actions自动部署Laravel项目

Oct 19, 2022 pm 08:11 PM
php laravel

聊聊怎么用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.shdeploy.yml 文件,我们提到了一个名为 production 的分支。我们将使用此分支添加通过 pushpull 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

【相关推荐:laravel视频教程

以上是聊聊怎么用GitHub Actions自动部署Laravel项目的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
如果session_start()被多次调用会发生什么? 如果session_start()被多次调用会发生什么? Apr 25, 2025 am 12:06 AM

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

作曲家:通过AI的帮助开发PHP 作曲家:通过AI的帮助开发PHP Apr 29, 2025 am 12:27 AM

AI可以帮助优化Composer的使用,具体方法包括:1.依赖管理优化:AI分析依赖关系,建议最佳版本组合,减少冲突。2.自动化代码生成:AI生成符合最佳实践的composer.json文件。3.代码质量提升:AI检测潜在问题,提供优化建议,提高代码质量。这些方法通过机器学习和自然语言处理技术实现,帮助开发者提高效率和代码质量。

session_start()函数的意义是什么? session_start()函数的意义是什么? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

哪些数据库版本与最新的Laravel兼容? 哪些数据库版本与最新的Laravel兼容? Apr 25, 2025 am 12:25 AM

最新版本的Laravel10与MySQL5.7及以上、PostgreSQL9.6及以上、SQLite3.8.8及以上、SQLServer2017及以上兼容。这些版本选择是因为它们支持Laravel的ORM功能,如MySQL5.7的JSON数据类型,提升了查询和存储效率。

php框架laravel和yii区别是什么 php框架laravel和yii区别是什么 Apr 30, 2025 pm 02:24 PM

Laravel和Yii的主要区别在于设计理念、功能特性和使用场景。1.Laravel注重开发的简洁和愉悦,提供丰富的功能如EloquentORM和Artisan工具,适合快速开发和初学者。2.Yii强调性能和效率,适用于高负载应用,提供高效的ActiveRecord和缓存系统,但学习曲线较陡。

H5:HTML5的关键改进 H5:HTML5的关键改进 Apr 28, 2025 am 12:26 AM

HTML5带来了五个关键改进:1.语义化标签提升了代码清晰度和SEO效果;2.多媒体支持简化了视频和音频嵌入;3.表单增强简化了验证;4.离线与本地存储提高了用户体验;5.画布与图形功能增强了网页的可视化效果。

如何使用MySQL的函数进行数据处理和计算 如何使用MySQL的函数进行数据处理和计算 Apr 29, 2025 pm 04:21 PM

MySQL函数可用于数据处理和计算。1.基本用法包括字符串处理、日期计算和数学运算。2.高级用法涉及结合多个函数实现复杂操作。3.性能优化需避免在WHERE子句中使用函数,并使用GROUPBY和临时表。

Laravel 最佳扩展包推荐:2024 年必备工具 Laravel 最佳扩展包推荐:2024 年必备工具 Apr 30, 2025 pm 02:18 PM

2024年必备的Laravel扩展包包括:1.LaravelDebugbar,用于监控和调试代码;2.LaravelTelescope,提供详细的应用监控;3.LaravelHorizon,管理Redis队列任务。这些扩展包能提升开发效率和应用性能。

See all articles