在本教程中,我们将学习如何使用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"
此工作流文件执行以下步骤:
- 它从存储库中查看代码。
- 它使用GO Build命令构建GO应用程序。
- 它使用SCP-Action操作将构建的二进制复制到服务器。
- 它使用SystemCtl命令在服务器上重新启动GO应用程序。
通过手动指定这些步骤,您可以在不使用PMGO.yml文件的情况下将GO应用程序部署到Digitalocean。但是,使用PMGO可以简化部署过程,并提供其他功能,例如滚动部署和服务管理。
结论
在本教程中,我们学会了如何使用PMGO实用程序和GitHub操作将GO应用程序部署到零停机时间的Digitalocean。我们使用pmgo.yml文件来指定我们部署的配置和github操作工作流程以自动化构建和部署过程。我们还看到了如何在不使用pmgo.yml文件的情况下手动部署GO应用程序到Digitalocean。
通过遵循以下步骤,您可以轻松自动将GO应用程序部署到Digitalocean,以确保您的用户在部署过程中没有停机时间。