Appearance
服务器部署
- 手动打包,然后发布到服务器上
打包环境
| 参数 | 含义 | 示例 |
|---|---|---|
| CGO_ENABLED | 是否Cgo标志 | CGO_ENABLED=0 |
| GOOS | 打包平台linux/windows/darwin... | GOOS=linux |
| GOARCH | 打包架构 amd64/arm64 | GOARCH=amd64 |
打包命令
go build [参数] [包路径/文件列表]
-o
- 指定输出文件路径
bash
# 打包backend.go文件, 输出到backend文件
go build -o backend backend.go-v
- 显示详细的编译信息
bash
# 编译当前项目并显示详细包名
go build -v ./...-x
- 显示详细的编译过程
bash
# 编译当前项目并显示详细编译过程
go build -x -o backend backend.go-race
- 编译后的程序运行时会自动检测并发数据竞争问题(适合调试,性能会降低)。
bash
# 编译并启用竞争检测,运行时若有并发问题会报错
go build -race -o backend && ./backend-ldflags
- 用于设置编译时的链接参数,如设置版本信息、编译时间等。
- 通过 -X 向包变量注入值,常用于设置程序版本、编译时间等元信息。
bash
# 编译时设置版本信息为1.0.0
go build -ldflags "-X main.Version=1.0.0" -o backend backend.go
# 编译时去除符号表和调试信息(减小二进制体积)
# -s 去除符号表,-w 去除调试信息
go build -ldflags "-s -w" -o backend backend.go-tags
- 编译时指定标签,用于条件编译(如不同环境下的代码)。
- 可以在代码中使用
// +build注释指定标签,也可以在编译时使用-tags参数。
go
// 下面的代码只有在dev标签下才会编译
// +build dev
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, World!")
}bash
# 编译包含 "debug" 标签的代码(如调试日志、额外检查)
go build -tags debug -o backend_debug backend.go
# 同时指定多个标签(用逗号分隔)
go build -tags "prod,mysql" -o backend_prod backend.go-trimpath
- 编译时去除二进制文件中嵌入的绝对路径(避免暴露本地开发路径,增强安全性)。
bash
# 生成的二进制文件中不含本地路径信息
go build -trimpath -o backend backend.go-gcflags
- 向 Go 编译器传递参数,如禁用优化和内联(方便断点调试)。
bash
# 禁用优化和内联,适合调试(否则调试时可能跳行)
go build -gcflags "-N -l" -o backend backend.go-work
- 打印临时工作目录路径,并在编译后不删除(可查看中间产物,如 .o 文件)。
bash
go build -work完整示例
bash
# 指定环境打包
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -trimpath -ldflags="-s -w" -o backend backend.go部署
守护进程
- 安装nohup守护进程工具,让go能持续后台运行
bash
# 一般系统默认自带nohup工具
nohup --version上传代码
- 把打好的包上传到linux服务器
bash
# scp [账号]@[目标服务器]:/[本地包的地址] [服务器地址]
scp root@192.168.1.100:/Users/project/bao /www/wwwroot/test配置文件
- 更新正式环境配置文件
bash
# 把开发环境的配置文件上传到[包]的同级目录
# 更改配置文件的配置后台运行包
bash
# & 是指后台运行
# 2>&1 是吧bao运行产生的日志 记在bao.log中
nohup ./test > test.log 2>&1 &配置代理
ini
server{
listen 80
access_log /var/log/nginx/base_access.log;
error_log /var/log/nginx/base_error.log;
location ~ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 配置文件的端口
proxy_pass http://127.0.0.1:8080;
}
}关闭进程
bash
# 查找test包的进程id
ps -aux | grep test
# 杀死进程
kill 26081