Golang编译生成的是静态链接的二进制文件,最简单的部署方式就是:
# 编译 (在开发机器上)
GOOS=linux GOARCH=amd64 go build -o myapp
# 上传到服务器
scp myapp user@server:/path/to/app
# 在服务器上运行
chmod +x /path/to/app/myapp
/path/to/app/myapp
nohup /path/to/app/myapp > /var/log/myapp.log 2>&1 &
创建服务文件 /etc/systemd/system/myapp.service
:
[Unit]
Description=My Golang Application
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/path/to/app
ExecStart=/path/to/app/myapp
Restart=always
RestartSec=5
Environment="ENV_VAR=value"
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
安装Supervisor:
sudo apt-get install supervisor # Ubuntu/Debian
sudo yum install supervisor # CentOS/RHEL
创建配置文件 /etc/supervisor/conf.d/myapp.conf
:
[program:myapp]
command=/path/to/app/myapp
directory=/path/to/app
user=appuser
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
environment=ENV_VAR="value"
然后更新并启动:
sudo supervisorctl update
sudo supervisorctl start myapp
创建Dockerfile:
FROM golang:alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
构建并运行:
docker build -t myapp .
docker run -d -p 8080:8080 --name myapp myapp
交叉编译:在开发机上交叉编译Linux版本
GOOS=linux GOARCH=amd64 go build -o myapp-linux
静态资源嵌入:使用go:embed或packr将静态资源编译进二进制
配置管理:使用环境变量或配置文件管理应用配置
日志处理:配置日志轮转(logrotate)或使用集中式日志系统
监控:集成Prometheus或其它监控工具
您需要哪种具体的部署方式?或者您有特定的部署环境需求吗?