使用 GitHub Actions 在共享主机上进行持续部署

2025-06-09

使用 GitHub Actions 在共享主机上进行持续部署

介绍

在这个快节奏的世界里,一切似乎都在快速发生,为了跟上竞争的步伐,尽早并频繁地部署网站/应用程序至关重要。将 Web 应用程序部署到服务器的方法有很多种,但我们将研究如何通过 GitHub Actions 帮助我们以最小的努力持续部署 Web 应用程序。

什么是持续部署

首先,你会问什么是持续部署?根据搜索 IT 运营

持续部署是一种软件发布策略,其中任何通过自动化测试阶段的代码提交都会自动发布到生产环境中,从而使软件用户可以看到更改。

这篇文章不会讨论测试(以后会讨论)。正如定义所示,只需提交,所有更改都会在生产服务器上生效。

什么是共享主机

有不同的托管选择,现在流行的是共享托管和云托管。

共享虚拟主机服务是指将多个网站托管在一台连接到互联网的虚拟服务器上。
这是最经济的网站托管方式,因为不同的用户分摊了服务器的费用。但它也有缺点,因为资源也会被分摊给多个用户。

我使用共享主机很久了,每次修改文件后都通过 FTP 传输,感觉很烦。后来我尝试使用GitHub,先把代码推送到仓库,然后再从共享主机拉取。但我仍然不满意。我之前用过GitFtp,感觉还不错。直到我在Azubi Africa 的课程上学到 CI/CD。

GitHub Actions 来帮忙

经过进一步研究,我偶然发现了 GitHub Actions。根据他们的网站介绍:

使用 GitHub Actions,直接在仓库中自动化、自定义和执行软件开发工作流程。您可以发现、创建和共享操作来执行任何您想要的工作(包括 CI/CD),并将这些操作组合成完全自定义的工作流程。

工作流程

让我们通过一些实际工作来获得最有趣的部分。

设置 GitHub 操作

(假设您的 GitHub 帐户中已经有一个想要链接到共享主机的存储库。如果没有,请单击此处)。

  • 在 GitHub 上打开您的存储库并转到Actions选项卡。
    “操作”选项卡

  • 点击set up a workflow yourself →如下图所示。
    自行设置工作流程

  • 删除页面上main.yml的所有内容,如下所示:
    删除内容

  • 用下面的内容替换文件(注意,这是针对 Laravel 中带有 Vue 前端的项目)



name: Deploy Site on push
on:
  push:
    branches:
      - master
jobs:
  web-deploy:
    name: Deploy
    runs-on: ubuntu-latest
    steps:
    - name: Get the latest code
      uses: actions/checkout@v2.3.2
    - uses: actions/setup-node@master
    - name: Installing project dependencies
      run: npm install
    - name: Building the project
      run: npm run production
    - name: Copy .env
      run: php -r "file_exists('.env') || copy('.env.example', '.env');"
    - name: Install Dependencies
      run: composer update --ignore-platform-reqs
    - name: Generate key
      run: php artisan key:generate
    - name: Directory Permissions
      run: chmod -R 777 storage bootstrap/cache
    - name: 📂 Sync files
      uses: SamKirkland/FTP-Deploy-Action@4.0.0
      with:
        server: ${{ secrets.LARAVEL_SITE_SERVER}}
        username: ${{ secrets.LARAVEL_SITE_USER}}
        password: ${{ secrets.LARAVEL_SITE_PASS}}


Enter fullscreen mode Exit fullscreen mode

现在让我逐块解释一下发生了什么



name: Deploy Site on push


Enter fullscreen mode Exit fullscreen mode

这是工作流程的名称。编写工作流程后,GitHub 会在仓库的操作页面上显示工作流程的名称。



on:
  push:
    branches:
      - master


Enter fullscreen mode Exit fullscreen mode

这里告诉 GitHub 操作系统何时运行工作流程。上面的代码片段会在有人推送到 时触发工作流程master branch。有关 On 键的更多信息,请点击此处



jobs:
  web-deploy:
    name: Deploy
    runs-on: ubuntu-latest


Enter fullscreen mode Exit fullscreen mode

jobs - 将工作流文件中运行的所有作业组合在一起。

web-deploy - 定义存储在作业部分中的 web-deploy 作业的名称。

运行于:ubuntu-latest - 将作业配置为在 Ubuntu Linux 运行器上运行。这意味着该作业将在 GitHub 托管的新虚拟机上执行。



steps:
    - name: Get the latest code
      uses: actions/checkout@v2.3.2
    - uses: actions/setup-node@master
    - name: Installing project dependencies
      run: npm install
    - name: Building the project
      run: npm run production


Enter fullscreen mode Exit fullscreen mode

请记住,这些步骤位于作业块内。

步骤- 将 web-deploy 作业中运行的所有步骤分组在一起。嵌套在此部分下的每个项目都是单独的操作或 Shell 命令。

名称——用于识别单独的动作。

uses: actions/ checkout@v2.3.2 - uses 关键字指示作业检索名为 actions/ checkout@v2.3.2的社区操作的 v2 版本。此操作会检出您的仓库并将其下载到运行器,以便您针对代码运行操作(例如测试工具)。每当您的工作流程针对仓库代码运行或您正在使用仓库中定义的操作时,都必须使用 checkout 操作。

用途:actions/setup-node@master - 此操作在运行器上安装节点软件包,使您可以访问 npm 命令。

run: npm install - run 关键字告诉作业在运行器上执行一个命令。在本例中,你使用 npm 安装包节点依赖项。

运行:npm run production - 这将构建 Vue 前端项目。




- name: Copy .env
      run: php -r "file_exists('.env') || copy('.env.example', '.env');"
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.0'
    - name: Install Dependencies
      run: composer update --ignore-platform-reqs
    - name: Generate key
      run: php artisan key:generate
    - name: Directory Permissions
      run: chmod -R 777 storage bootstrap/cache


Enter fullscreen mode Exit fullscreen mode

运行:php -r“file_exists('.env') || copy('.env.example', '.env'); - 如果尚不存在,则会创建一个 .env 文件(这很重要,因为它会自动添加到 .gitignore 文件中)。

运行:composer update --ignore-platform-reqs - 用于安装和更新 Composer 包。

运行:php artisan key:generate - 这会为 Laravel 项目生成一个密钥。

运行:chmod -R 777 storage bootstrap/cache - 这会更改指定文件夹的权限。



- name: 📂 Sync files
      uses: SamKirkland/FTP-Deploy-Action@4.0.0
      with:
        server: ${{ secrets.LARAVEL_SITE_SERVER}}
        username: ${{ secrets.LARAVEL_SITE_USER}}
        password: ${{ secrets.LARAVEL_SITE_PASS}}


Enter fullscreen mode Exit fullscreen mode

现在文件已传输到共享主机服务器。从共享主机获取 FTP 详细信息。然后添加your repo>settings>secrets三个密钥:服务器、用户名和密码。此操作由SamKirkland提供。

有关 GitHub 操作的更多信息,请单击此处

享受😎

鏂囩珷鏉ユ簮锛�https://dev.to/madalitsonyemba/continuous-deployment-on-shared-hosting-with-github-actions-5agi
PREV
帮助我在周末推出 MVP 的 5 种方法 定义成功是什么样子 保持简单 不要重新发明轮子 可重复使用的代码 重新利用您知道的工具 最后的想法
NEXT
变异没问题