部署(上)优雅的把Go项目部署到Linux服务器

763 阅读3分钟

Go语言具备跨平台编译的能力,允许开发者利用Go语言自带的交叉编译工具链,轻松地将Go项目部署至Linux操作系统的服务器上。这一特性极大地简化了多平台部署的复杂性,确保了开发流程的高效性。

部署项目(在Linux环境)

在Linux环境下,编译Go项目通常只需使用简单的命令:

go build

这条命令会根据当前操作系统环境编译执行Go程序。如果需要为Linux环境进行交叉编译,可以使用GOOSGOARCH环境变量指定目标操作系统和架构,例如:

GOOS=linux GOARCH=amd64 go build

这样就会生成一个适用于Linux 64位系统的可执行文件。

重新部署项目(在Mac环境)

在Mac开发环境中,若需重新构建并打包Go项目以适配Linux操作系统,可以使用以下命令:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

此命令组合确保了以下事项。

  • CGO_ENABLED=0:禁用CGO,即不使用C语言编写的Go语言绑定,确保生成的可执行文件不依赖于Linux环境中的C库。
  • GOOS=linux:设置目标操作系统为Linux。
  • GOARCH=amd64:设置目标架构为64位(amd64),适用于大多数现代Linux系统。

使用此命令,可以生成一个在Linux环境下运行的Go项目可执行文件,而不必在Linux系统上实际编译。这为跨平台开发提供了极大的便利。

查找指定端口的进程

查找与端口 9001 相关的网络连接和监听信息:

netstat -tunlp|grep 9001

开发环境强制结束进程

在开发环境中,可以使用以下kill -9命令强制终止进程并重新启动服务:

kill -9 4543 && nohup ./singo > nohup.log 2>&1 &
  • 4543是要结束的进程pid
  • singo是二进制文件名
  • 使用&&同时执行2条命令,避免服务中断

注意:生产环境 ‘kill -9’ 太暴力,可能导致问题,进程在运行时突然终止,进程在结束后不能自我清理。

所以生产环境建议使用:

kill 4543 && nohup ./singo > nohup.log 2>&1 &

注意一些问题

  1. go项目运行之后,修改.env文件不会立即生效,需要重启go服务才会生效;
  2. go项目运行之后,修改config.ini配置文件会立即生效,无需重启go服务。

附录Windows平台的打包语法

windows

set CGO_ENABLED=0 //禁用CGO
set GOOS=linux //目标平台为linux
set GOARCH=amd64 //目标处理器架构是amd64
go build -o name //编译可执行文件到当前目录 (-o:自定义文件名)

总结

本篇介绍了使用Go的交叉编译在Linux上部署Go项目的步骤,其中包括对项目的进程管理,以及配置文件的更新策略。通过遵循这些步骤,你可以确保Go项目在Linux服务器上稳定运行,并能够优雅地处理进程和配置更新。

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:掘金面试群。