ZBLOG

golang 发布到Linux

将 Go 程序发布到 Linux 环境通常需要以下步骤,涵盖本地交叉编译依赖管理部署运行容器化(可选)


1. 交叉编译(本地开发机 → Linux)

(1) 基础命令

# 编译为 Linux 可执行文件(静态链接,无外部依赖)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp-linux main.go
  • 参数说明
    • CGO_ENABLED=0:禁用 CGo,避免动态链接库依赖。
    • GOOS=linux:目标系统为 Linux。
    • GOARCH=amd64:目标 CPU 架构(根据服务器选择 arm64/386)。
    • -o myapp-linux:指定输出文件名。

(2) 检查文件类型

file myapp-linux  
# 应显示:ELF 64-bit LSB executable, x86-64, statically linked

2. 传输到 Linux 服务器

(1) SCP/FTP/RSYNC

scp myapp-linux user@server_ip:/path/to/deploy/

(2) Git/SFTP

如果代码托管在 Git,可直接在服务器拉取后编译:

git clone https://github.com/your/repo.git
cd repo && CGO_ENABLED=0 GOOS=linux go build -o app .

3. Linux 服务器运行

(1) 直接运行

chmod +x myapp-linux   # 添加可执行权限
./myapp-linux          # 前台运行

(2) Systemd/Nohup (后台服务)

# /etc/systemd/system/myapp.service (示例配置)
[Unit]
Description=My Go App

[Service]
ExecStart=/path/to/myapp-linux
WorkingDirectory=/path/to/
Restart=always

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl enable --now myapp.service

4. Docker容器化(推荐)

(1) Dockerfile示例

# Stage1: Build (使用多阶段构建减小镜像体积)
FROM golang:alpine AS builder 
WORKDIR /app 
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o app .

# Stage2: Run (仅保留运行时)
FROM alpine:latest  
COPY --from=builder /app/app .
CMD ["./app"]

(2) Build & Run

docker build -t my-go-app .
docker run -d --name myapp -p 8080:8080 my-go-app 

5.注意事项

  • 动态库依赖问题
    若必须启用 CGo,需在目标系统安装相同版本的 .so 文件(如 libc.so.6)。
  • 配置文件路径
    代码中硬编码的路径需改为 Linux 风格(如 /etc/config.yaml)。
  • 性能调优
    生产环境建议设置 GOMAXPROCS(默认使用所有 CPU核心)。

如果需要更具体的场景指导(如 Kubernetes部署),可以进一步说明需求!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23882

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?