You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ubuntu开发的Go Web应用部署到CentOS7服务器

Go Web程序从Ubuntu部署到CentOS7的编译方案说明

你完全可以直接在Ubuntu环境完成程序编译,将生成的可执行文件上传到CentOS7服务器直接运行,不需要在服务器安装Golang环境、上传源码后编译运行——静态编译、开箱即用的交叉编译能力是Go的核心特性,也是当前Go Web服务生产部署的主流方案。

本地交叉编译操作方法

你只需要在Ubuntu开发环境执行编译命令时,指定目标系统、架构参数即可。CentOS7属于Linux发行版,绝大多数物理机、云服务器为amd64(x86_64)架构,对应编译命令如下:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o 你的web程序名 程序入口路径

参数说明:

  • GOOS=linux:指定编译产物的目标运行系统为Linux,不受当前开发环境是Ubuntu发行版的影响
  • GOARCH=amd64:指定目标运行架构为x86_64,适配绝大多数CentOS7服务器;如果你的服务器是ARM架构,将该参数替换为arm64即可
  • CGO_ENABLED=0:关闭CGO,编译生成纯静态链接的二进制文件,不依赖目标系统的动态链接库,完全规避CentOS7自带glibc版本较低带来的兼容性问题,上传后即可直接运行
    编译完成后将二进制文件传到CentOS7服务器,执行chmod +x 你的web程序名赋予执行权限就能启动服务,全程不需要在服务器安装任何Go相关的运行时或编译依赖。

特殊场景处理

如果你的Web程序依赖必须调用C代码的库(比如部分带C绑定的SQLite驱动、硬件相关的系统调用库),关闭CGO会导致编译失败,这种场景可以按优先级选方案:

  • 优先替换为纯Go实现的同功能依赖,依然可以沿用上述交叉编译方式部署
  • 如果必须保留CGO依赖,可以在本地用Docker启动一个CentOS7基础镜像的容器,在容器内完成编译,再把编译好的二进制传出部署;这种场景下才需要考虑在服务器安装Go环境、上传源码编译的方式,普通Go Web业务开发很少碰到这类情况。

两种部署方式的差异

  • 本地交叉编译传二进制:部署流程简单,服务器不需要额外安装编译环境,系统环境干净无冗余,不会泄露业务源码,也不会出现开发机和服务器Go版本不一致导致的编译异常,是生产环境首选方案
  • 服务器端源码编译:不需要处理CGO交叉编译的兼容问题,但需要在服务器安装对应版本的Go环境,编译过程会占用服务器CPU、内存资源,部署流程更长,还存在源码泄露风险,一般仅用于特殊兼容场景。

内容的提问来源于stack exchange,提问作者januw a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:51:44