实用指南站
霓虹主题四 · 更硬核的阅读氛围

Go语言部署项目的实用操作指南

发布时间:2025-12-10 23:00:41 阅读:380 次

本地构建与交叉编译

在把Go项目扔到服务器之前,先在本地打好包。Go的一大优势是静态编译,直接生成可执行文件,不依赖外部库。比如你在Mac上写完代码,想部署到Linux服务器,用一行命令就能搞定:

GOOS=linux GOARCH=amd64 go build -o myapp main.go

这条命令会生成一个叫myapp的二进制文件,专为Linux系统准备。以后换架构或系统也一样,改GOOS和GOARCH就行,不用重新装环境。

上传与运行脚本

文件编译好了,接下来传到服务器。可以用scp命令:

scp myapp user@your-server:/home/user/app/

登录服务器,进到目录,直接运行:

./myapp

如果提示没权限,加个chmod:

chmod +x myapp

这时候服务就跑起来了,默认可能占着终端。想让它后台运行,可以加&,或者用nohup:

nohup ./myapp &

使用systemd管理服务

公司里没人愿意手动重启挂掉的服务。Linux系统一般都用systemd来管进程。在/etc/systemd/system下建个文件,比如myapp.service:

[Unit]
Description=My Go Application
After=network.target

[Service]
User=appuser
ExecStart=/home/appuser/app/myapp
Restart=always

[Install]
WantedBy=multi-user.target

保存后启用服务:

sudo systemctl enable myapp.service
sudo systemctl start myapp

之后启停查状态都方便了,出问题也会自动重启。

配合Nginx做反向代理

Go服务通常监听本地端口,比如:8080。但用户访问不该带端口号。这时候让Nginx挡前面,把80请求转给后端。

在Nginx配置里加一段:

server {
listen 80;
server_name api.yoursite.com;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

重载配置后,用户访问api.yoursite.com,实际请求就被转到Go程序了。还能顺便处理HTTPS、静态资源这些事。

自动化部署小技巧

每次改完代码都手动编译上传太累。可以写个简单的部署脚本deploy.sh:

#!/bin/bash
GOOS=linux GOARCH=amd64 go build -o myapp main.go
scp myapp user@your-server:/home/user/app/
ssh user@your-server 'systemctl restart myapp'

本地运行./deploy.sh,一键完成构建、上传、重启。等项目大了再上CI/CD也不迟。

日志别直接扔终端

上线后不能靠打印看问题。把日志写文件更靠谱。比如用标准库log搭配rotatelogs:

import (
"log"
"os"
)

func init() {
logFile, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
log.SetOutput(logFile)
}

systemd其实也会捕获输出,用journalctl就能查:

journalctl -u myapp.service -f

开发时方便,上线后也能追问题。