小聊:本次小白给大家带来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

随笔

在这里插入图片描述