在Linux系统中部署Golang应用程序可以分为以下几个步骤,我会提供详细说明和注意事项:
如果目标服务器没有Golang环境,需要先安装:
# 下载最新版Go(替换为官网最新版本号)
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
# 解压到/usr/local
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
# 设置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
# 验证安装
go version
在开发机编译Linux可执行文件:
# 静态链接(推荐,避免依赖问题)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp -ldflags="-w -s" main.go
# 生成的文件可通过scp上传到服务器
scp myapp user@server:/path/to/deploy/
cd /path/to/project
go build -o myapp
./myapp
nohup ./myapp > app.log 2>&1 &
创建服务文件 /etc/systemd/system/myapp.service
:
[Unit]
Description=My Golang Application
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
RestartSec=10
Environment="PORT=8080"
Environment="DATABASE_URL=postgres://user:pass@localhost/db"
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
# 查看状态
systemctl status myapp
如果需要HTTP服务,建议用Nginx/Apache做反向代理:
# Nginx示例配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
bash
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable
logrotate
systemctl status myapp
或 supervisor
pprof
端口冲突:
netstat -tulnp | grep <port>
依赖缺失:
静态编译时确保CGO_ENABLED=0
权限问题:
chmod +x myapp
chown www-data:www-data myapp
通过以上步骤,你的Golang应用应该能稳定运行在Linux生产环境中。根据实际需求调整配置参数(如端口、环境变量等)。