这篇文章讲述如何将在 Windows 或具有开发环境的 Linux 系统开发的 Go 语言应用程序,部署到无开发环境的 Linux 系统中。

前言

在开始编译程序之前,我们首先需要了解 Go 语音的两个环境变量 GOOSGOARCH

GOOSGOARCH 用于设置目标操作系统和编译架构的名称,如果不指定,它们默认值分别为 GOHOSTOSGOHOSTARCH 。这里也就说 GOOS 变量要指定目标操作系统的类型,GOARCH 变量指定目标操作系统的架构类型。

GOOS 的可选值有:androiddarwindragonflyfreebsdlinuxnaclnetbsdopenbsdplan9solariswindowszos等。

GOARCH 的可选值有:386amd64amd64p32armarmbearm64arm64beppc64ppc64lemipsmipslemips64mips64lemips64p32mips64p32leppcs390 等。

也可以执行 go tool dist list 命令,查询所有支持平台的列表。

关于这点可以参见 Go 语言官方文档 Optional environment variables

编译

首先要查看目标 Linux 服务器系统架构。在终端下执行 uname -aarch 命令,

# uname -a
#1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

我的服务器系统是 CentOS 7, 这里输出的系统架构为 x86_64,所以这里的两个环境变量分别为 GOOS=linux GOARCH=amd64

下面讲述如何在 Windows 和 Linux 开发系统环境上编译 Go 程序(唯一不同的就是设置环境变量的命令不同),使之运行在我的 CentOS 7 服务器上。

Windows 系统编译

在终端中依次执行下列命令即可:

cd <youcode dir>
set GOOS=linux
set GOARCH=amd64
go build

Linux 系统编译

在终端中执行下列命令即可:

env GOOS=linux GOARCH=amd64 go build

注意:这里 GOARCH=amd64 需要根据你的服务器架构决定。

编译完成后会生成一个没有后缀的可执行文件。

运行程序

运行程序

将编译出来的可执行文件和所需要的配置文件、和和其它依赖的文件拷贝到服务器中,执行 ./main 命令即可运行程序(这里的 ./main 根据你的应用实际名称修改)。

如果运行时发生 “Permission denied” 错误,说明应用程序权限不足,如果没有管理员权限需要执行 su root 命令获取管理员权限,如果有管理员权限则需要执行 chmod 777 main 命令,设定应用程序权限。

后台运行程序

上面说的直接运行程序的方法在控制台(或终端)退出时程序会停止,我们可以用 nohup ./main & 命令让程序在后台运行。

程序执行后,可以使用 ps aux|grep main 命令查看程序是否正常运行,及程序的 pid。

使用 kill -9 <pid>kill <pid> 命令终止后台运行的进程。

标签: Linux, 部署, GO, Golang

添加新评论