Debian 上优化 Golang 打包的实用方案
一 构建链与依赖优化
sudo apt-get install dh-golang golang-godebian/rules 仅需 %:: dh $@ --with golangdebian/control 中 Build-Depends 加入 dh-golang 与 golang-go(或 golang-any),Architecture 设为 anygo env -w GOPROXY=https://goproxy.cn,directexport GOCACHE=$HOME/.cache/go-buildCGO_ENABLED=0go build -trimpath -ldflags "-s -w" -o myapp .GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o myapp .dpkg-buildpackage -us -uc -b;若使用 debuild,可配合 lintian override 处理静态链接相关告警二 减小二进制体积与提升安装体验
go build -ldflags "-s -w"(生产环境推荐)go build -trimpath -ldflags "-s -w"sudo apt-get install upxupx --best --lzma myapp(体积显著下降,启动略慢;部分环境可能误报恶意)go install mvdan.cc/garble@latestgarble -seed=random build -o myapp(同时会去除调试信息,可与 UPX 组合)debian/install 精确安置可执行文件与配置:myapp /usr/bin/、config.toml /etc/myapp/、static/ /usr/share/myapp/static/三 构建性能与 CI 优化
export GOMAXPROCS=$(nproc)export GOCACHE=$HOME/.cache/go-buildgo env -w GOPROXY=https://goproxy.cn,directgo mod vendor(在封闭/离线环境更稳定)dpkg-buildpackage -us -uc -b(适合 CI 快速验证)四 最小化运行时镜像与容器化打包
golang:1.17 或更新版本,CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o myapp .debian:buster-slim 或 alpine:latest,仅拷贝二进制到 /usr/local/binRUN go mod tidy && CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o myapp .COPY --from=builder /app/myapp /usr/local/bin/myapp五 推荐的最小化 debian/rules 与 control 示例
debian/rules#!/usr/bin/make -f
%:: dh $@ --with golang
debian/controlSource: my-go-app
Section: utils
Priority: optional
Maintainer: Your Name <you@example.com>
Build-Depends: debhelper-compat=12, dh-golang, golang-go
Standards-Version: 4.5.0
Homepage: https://github.com/yourorg/my-go-app
Package: my-go-app
Architecture: any
Depends: ${misc:Depends}
Description: A tiny Go service
A minimal Go application packaged for Debian.
debuild -us -ucdpkg-buildpackage -us -uc -bsudo dpkg -i ../my-go-app_*.deb && my-go-app --version