Go项目部署及所遇问题

  • Post author:
  • Post category:其他



小聊

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

改回

GOOS=windows

后正常

go env -w GOOS=windows
# 再次启动项目成功
fresh

下次打包时只需要改回

go env -w GOOS=linux

即可,来回如此。



随笔


在这里插入图片描述



版权声明:本文为m0_48489737原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。