使用PMGO和GITHUB操作将GO应用程序部署到Digitalocean,以零停机时间
#github #go #cicd #deploymen

在本教程中,我们将学习如何使用pmgo实用程序和GitHub操作将GO应用程序部署到零停机时间的Digitalocean。我们将使用称为“滚动部署”的功能,该功能使我们能够部署应用程序的新版本,同时保持旧版本运行,直到新版本完全启动并运行。这样可以确保在部署过程中我们的用户没有停机时间。

先决条件

在我们开始之前,您将需要以下内容:

  • Digitalocean帐户和API密钥
  • 您要部署的GO应用程序
  • 您的Go App的GitHub存储库
  • 安装在本地计算机上的PMGO实用程序

设置Digitalocean

首先,我们需要在Digitalocean上创建一个液滴来托管我们的GO应用程序。您可以通过Digitalocean Control面板或使用Digitalocean API来执行此操作。

创建了液滴后,您将需要设置PostgreSQL数据库并配置GO应用程序以使用它。您可以通过Digitalocean控制面板或通过SSH连接到液滴并手动安装和配置PostgreSQL。

设置PMGO

pmgo 实用程序是一种命令行工具,可帮助您将GO应用程序部署到服务器。它处理构建和部署您的代码以及设置必要的服务和配置。

要安装PMGO,只需使用GO CLI获取:

$ go get github.com/struCoder/pmgo
$ mv $GOPATH/bin/pmgo /usr/local/bin


git clone https://github.com/struCoder/pmgo.git
cd path/to/struCoder/pmgo
go build -v pmgo.go
mv pmgo /usr/local/bin

要使用pmgo,您首先需要在GO App存储库的根部创建一个PMGO.yml文件。此文件将包含用于部署的配置。

这是GO应用程序的示例pmgo.yml文件:

name: my-go-app

servers:
  - address: my-go-app.example.com
    user: root

build:
  - go build

deploy:
  - pmgo deploy

services:
  - name: my-go-app
    command: ./my-go-app

此文件指定您的应用程序的名称,服务器地址和用户,构建命令,部署命令和服务命令。

设置github动作

github操作是自动化任务,您的github存储库中的某些事件可以触发。每当我们将代码推向存储库时,我们将使用GitHub操作自动构建和部署我们的GO应用程序。

要设置GitHub操作,您需要在存储库中创建一个.github/Workflows目录,并在其中添加一个指定工作流程步骤的YAML文件。

这是一个示例工作流文件,使用PMGO将GO应用程序部署到零停机时间的Digitalocean:

name: Deploy Go App

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Build and Deploy Go App
        run: pmgo deploy --rolling

此工作流文件指定应在推送到主分支上触发它,并且它具有一个在Ubuntu最新版本上运行的作业,并包含两个步骤。第一步从存储库中查看代码,第二步使用--rolling flag运行pmgo deploy命令。

还需要注意的一件好事是,可以在不使用pmgo.yml文件的情况下将GO应用程序部署到Digitalocean。您可以在GitHub Actions WorkFlow文件中手动指定部署的步骤,而不是使用pmgo deploy命令。

这是一个示例工作流文件,演示了如何执行此操作:

name: Deploy Go App

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Build Go App
        run: go build
      - name: Copy Go App to Server
        uses: appleboy/scp-action@master
        with:
          host: my-go-app.example.com
          username: root
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          source: my-go-app
          target: /root/my-go-app
      - name: Restart Go App Service
        run: ssh root@my-go-app.example.com "systemctl restart my-go-app"

此工作流文件执行以下步骤:

  1. 它从存储库中查看代码。
  2. 它使用GO Build命令构建GO应用程序。
  3. 它使用SCP-Action操作将构建的二进制复制到服务器。
  4. 它使用SystemCtl命令在服务器上重新启动GO应用程序。

通过手动指定这些步骤,您可以在不使用PMGO.yml文件的情况下将GO应用程序部署到Digitalocean。但是,使用PMGO可以简化部署过程,并提供其他功能,例如滚动部署和服务管理。

结论

在本教程中,我们学会了如何使用PMGO实用程序和GitHub操作将GO应用程序部署到零停机时间的Digitalocean。我们使用pmgo.yml文件来指定我们部署的配置和github操作工作流程以自动化构建和部署过程。我们还看到了如何在不使用pmgo.yml文件的情况下手动部署GO应用程序到Digitalocean。

通过遵循以下步骤,您可以轻松自动将GO应用程序部署到Digitalocean,以确保您的用户在部署过程中没有停机时间。