在 Ubuntu 上给 Go(Golang)程序打包,常见有几种方式,取决于你是:
下面我按最常见场景给你讲。
sudo apt update
sudo apt install golang-go
查看版本:
go version
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 .
GOOS=windows GOARCH=amd64 go build -o myapp.exe .
GOOS=darwin GOARCH=amd64 go build -o myapp .
dpkg-deb(简单)mkdir -p myapp/DEBIAN
mkdir -p myapp/usr/bin
mkdir -p myapp/usr/lib/systemd/system
cp myapp myapp/usr/bin/
nano myapp/DEBIAN/control
内容示例:
Package: myapp
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go Application
dpkg-deb --build myapp
生成:
myapp.deb
安装:
sudo dpkg -i myapp.deb
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
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
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 .
go: command not found确保:
export PATH=$PATH:/usr/local/go/bin
go build -ldflags="-s -w" -o myapp .
| 需求 | 推荐方式 |
|---|---|
| 只运行 | go build |
| Ubuntu 安装 | .deb |
| 服务器部署 | systemd + deb |
| 跨平台 | 交叉编译 |
| 云原生 | Docker |
如果你愿意,可以告诉我:
我可以直接帮你写完整打包脚本。