温馨提示×

如何给ubuntu golang打包

小樊
40
2026-09-19 11:56:50
栏目: 编程语言

在 Ubuntu 上给 Go(Golang)程序打包,常见有几种方式,取决于你是:

  • 只生成 Linux 可执行文件
  • 做成 .deb 安装包
  • 做成 Docker 镜像
  • 交叉编译给其他系统

下面我按最常见场景给你讲。


一、基础:编译 Go 程序(Ubuntu 本地)

1. 安装 Go

sudo apt update
sudo apt install golang-go

查看版本:

go version

2. 编译可执行文件

go build -o myapp main.go

或使用模块:

go mod init myapp
go build -o myapp .

生成的 myapp 就是 Linux 可执行文件。


二、静态编译(推荐)

避免依赖系统 glibc 动态库:

CGO_ENABLED=0 GOOS=linux go build -a -o myapp .

三、交叉编译(在 Ubuntu 编其他平台)

Windows

GOOS=windows GOARCH=amd64 go build -o myapp.exe .

macOS

GOOS=darwin GOARCH=amd64 go build -o myapp .

四、打包成 .deb(Ubuntu 安装包)✅ 常用

方法 1:使用 dpkg-deb(简单)

1. 创建目录结构

mkdir -p myapp/DEBIAN
mkdir -p myapp/usr/bin
mkdir -p myapp/usr/lib/systemd/system

2. 放入程序

cp myapp myapp/usr/bin/

3. 编写控制文件

nano myapp/DEBIAN/control

内容示例:

Package: myapp
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go Application

4. 打包

dpkg-deb --build myapp

生成:

myapp.deb

安装:

sudo dpkg -i myapp.deb

方法 2:使用 nfpm(现代方式,推荐)

sudo apt install nfpm

nfpm.yaml 示例:

name: myapp
arch: amd64
version: 1.0.0
maintainer: you@example.com
description: My Go app
vendor: MyCompany
license: MIT
contents:
  - src: ./myapp
    dst: /usr/bin/myapp

打包:

nfpm pkg --target myapp.deb

五、做成 systemd 服务(服务器常用)

sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Go App

[Service]
ExecStart=/usr/bin/myapp
Restart=always
User=root

[Install]
WantedBy=multi-user.target
sudo systemctl enable myapp
sudo systemctl start myapp

六、Docker 打包(最干净)

FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN go build -o app .

FROM ubuntu
COPY --from=build /app/app /usr/bin/app
CMD ["app"]

构建:

docker build -t myapp .

七、常见问题

1. go: command not found

确保:

export PATH=$PATH:/usr/local/go/bin

2. 想减小体积

go build -ldflags="-s -w" -o myapp .

总结

需求 推荐方式
只运行 go build
Ubuntu 安装 .deb
服务器部署 systemd + deb
跨平台 交叉编译
云原生 Docker

如果你愿意,可以告诉我:

  • 命令行工具 还是 Web 服务
  • 是否要 自动重启 / 开机启动
  • 是否要 发布到 Ubuntu 软件源

我可以直接帮你写完整打包脚本。

0