Go 语言开发的程序部署到 Linux 服务器
这篇文章讲述如何将在 Windows 或具有开发环境的 Linux 系统开发的 Go 语言应用程序,部署到无开发环境的 Linux 系统中。
前言
在开始编译程序之前,我们首先需要了解 Go 语音的两个环境变量 GOOS
和 GOARCH
。
GOOS
和 GOARCH
用于设置目标操作系统和编译架构的名称,如果不指定,它们默认值分别为 GOHOSTOS
和 GOHOSTARCH
。这里也就说 GOOS
变量要指定目标操作系统的类型,GOARCH
变量指定目标操作系统的架构类型。
GOOS
的可选值有:android
、darwin
、dragonfly
、freebsd
、linux
、nacl
、netbsd
、openbsd
、plan9
、solaris
、windows
、zos
等。
GOARCH
的可选值有:386
、amd64
、amd64p32
、arm
、armbe
、arm64
、arm64be
、ppc64
、ppc64le
、mips
、mipsle
、mips64
、mips64le
、mips64p32
、mips64p32le
、ppc
、s390
等。
也可以执行 go tool dist list
命令,查询所有支持平台的列表。
关于这点可以参见 Go 语言官方文档 Optional environment variables 。
编译
首先要查看目标 Linux 服务器系统架构。在终端下执行 uname -a
或 arch
命令,
# 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>
命令终止后台运行的进程。