在 Linux 上部署 Golang 服务,通常分为 编译 → 传输 → 运行 → 守护 → 反向代理/运维 几个步骤。下面给你一套实战常用方案,从简单到生产级。
Golang 是静态编译,部署非常简单。
# 在开发机或服务器上
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go
如果是跨平台(Mac/Windows 编译 Linux):
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
scp myapp user@server:/opt/myapp/
chmod +x /opt/myapp/myapp
/opt/myapp/myapp
⚠️ 这样退出终端就会停。
nohup /opt/myapp/myapp > app.log 2>&1 &
查看:
ps aux | grep myapp
tail -f app.log
sudo vim /etc/systemd/system/myapp.service
内容:
[Unit]
Description=My Go App
After=network.target
[Service]
User=www
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
Environment=GIN_MODE=release
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
systemctl status myapp
journalctl -u myapp -f
✅ 优点:
sudo apt install supervisor
配置:
[program:myapp]
command=/opt/myapp/myapp
directory=/opt/myapp
autostart=true
autorestart=true
user=www
stdout_logfile=/var/log/myapp.log
sudo supervisorctl update
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo nginx -t
sudo systemctl reload nginx
FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine
WORKDIR /app
COPY --from=build /app/app .
CMD ["./app"]
docker build -t myapp .
docker run -d -p 8080:8080 myapp
lsof -i:8080
ufw allow 8080
Environment=APP_ENV=prod
systemd + Nginx + Go 二进制
最简单、最稳定、最像生产环境。
如果你愿意,可以告诉我:
我可以直接给你 完整可复制配置。