在 Debian 上启动一个 Golang 服务,常见有几种方式,从最简单到生产推荐依次说明。
如果你的程序已经编译好:
# 编译
go build -o myapp main.go
# 运行
./myapp
⚠️ 这种方式:
nohup ./myapp > app.log 2>&1 &
查看进程:
ps aux | grep myapp
sudo cp myapp /usr/local/bin/myapp
sudo chmod +x /usr/local/bin/myapp
sudo nano /etc/systemd/system/myapp.service
示例内容:
[Unit]
Description=My Golang Service
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
WorkingDirectory=/usr/local/bin
User=www-data
Restart=always
Environment=GO_ENV=production
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
systemctl status myapp
journalctl -u myapp -f
systemctl restart myapp
systemctl stop myapp
✅ 优点:
适合不想用 systemd 的情况。
sudo apt install supervisor
配置 /etc/supervisor/conf.d/myapp.conf:
[program:myapp]
command=/usr/local/bin/myapp
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp
FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN go build -o app
FROM debian:bookworm-slim
COPY --from=build /app/app /app
CMD ["/app"]
docker build -t myapp .
docker run -d -p 8080:8080 myapp
| 场景 | 方式 |
|---|---|
| 本地测试 | 直接运行 |
| 生产服务 | ✅ systemd |
| 多服务管理 | supervisor |
| 容器化 | Docker |
如果你愿意,可以告诉我:
我可以给你一份完整可直接用的配置。