小聊:本次小白给大家带来Golang项目部署操作以及个人所遇问题和解决它们的方法。依然是一边实操演示一边写文稿,如遇相似问题却存有疑惑可留言。开发环境是Window,部署环境是Linux。开发工具为GoLand,部署服务器为阿里云。
1. 打包部署
1.1. 在开发环境打包
- 在项目main.go同级目录下,执行以下命令,局部设置打包环境
# 设置环境
set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
- 执行以下命令生成 main-app 打包文件
# 打包命令 main-linux 为打包文件名
go build -o main-app main.go
- 连接服务器,将 main-app 文件放入部署服务器的任意目录下
[root@iZwz9d9v06uh0jnrexcuk9Z sunnybook]# ll
-rw-r--r-- 1 root root 16535089 Nov 10 21:05 main-app
1.2. 在服务器启动运行命令
- 给项目二进制文件添加可执行权限
chmod +x main-app
// 或
chmod 773 main-app
[root@iZwz9d9v06uh0jnrexcuk9Z app]# chmod 773 main-app
[root@iZwz9d9v06uh0jnrexcuk9Z app]# ll
total 16148
-rwxrwx-wx 1 root root 16535089 Nov 10 20:07 main-app
- 启动执行(二进文件,可以直接运行)
./main-app
[root@iZwz9d9v06uh0jnrexcuk9Z app]# ./main-app
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
Ctrl + C停止运行
- 后台启动
nohup ./main-app &
回车
[root@iZwz9d9v06uh0jnrexcuk9Z app]# nohup ./main-app &
[1] 19400
[root@iZwz9d9v06uh0jnrexcuk9Z app]# nohup: ignoring input and appending output to ‘nohup.out’
查看进程
netstat -lntp
停止运行(PID ——> 进程号)
kill PID
2. go项目部署问题
2.1. 问题一:启动报错无法执行文件,打包类型错误
[root@iZwz9d9v06uh0jnrexcuk9Z app]# chmod +x main-app
[root@iZwz9d9v06uh0jnrexcuk9Z app]# ./main-app
-bash: ./main-app: cannot execute binary file: Exec format error
go env
go env
使用 全局 修改命令
# 设置环境
go env -w CGO_ENABLED=0
go env -w GOOS=linux
go env -w GOARCH=amd64
# 打包命令 main-linux 为打包文件名
go build -o main-app main.go
go env
go env
2.2. 问题二:启动报错访问不到相对路径的文件
2022/11/10 20:22:35 Fail to parse ‘conf/app.ini’: open conf/app.ini: no such file or directory
读取不到文件,因为以下代码:
Cfg, err = ini.Load("conf/app.ini")
if err != nil {
log.Fatalf("Fail to parse 'conf/app.ini': %v", err)
os.Exit(1)
}
读取文件是使用的是相对目录,在开发环境是没问题的,但是一旦打包成二进制文件正式部署时就会有问题。
一般来说有两种做法,拼接路径和新建文件夹。
拼接路径比较麻烦一点,它不是普通意义上的把父级路径拼接上当前路径,这样做是没有意义的。
新建文件夹就简单多了,它不是找不到相对路径么,我们直接把文件资源再复制一份到对应的服务器位置就能访问到了。
如下:
[root@iZwz9d9v06uh0jnrexcuk9Z app]# ll
drwxr-xr-x 2 root root 4096 Nov 1 20:25 conf
-rwxr-xr-x 1 root root 16612864 Nov 10 20:33 main-app
2.3. 问题三:使用 fresh 热部署继续开发报错
fork/exec tmp\runner-build.exe: This version of %1 is not compatible with the version of Windows you’re running. Check your computer’s system information and then contact the software publisher.
GOOS=linuxGOOS=windows
go env -w GOOS=windows
# 再次启动项目成功
fresh
go env -w GOOS=linux
随笔