Go项目部署及所遇问题

2023-11-19

小聊:本次小白给大家带来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 即可,来回如此。


随笔

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go项目部署及所遇问题 的相关文章

随机推荐

  • 操作系统内存管理——分区、页式、段式、段页式管理

    1 内存管理方法 内存管理主要包括虚地址 地址变换 内存分配和回收 内存扩充 内存共享和保护等功能 2 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间 连续分配有单一连续存储管理和分区式储管理两种方式 2 1 单一连续存
  • 谈谈Qt信号与槽

    关于Qt信号与槽 Qt信号与槽本质类似观察者模式 观察者模式 Observer Pattern 定义对象间的一种一对多依赖关系 使得每当一个对象状态发生改变时 其相关依赖对象皆得到通知并被自动更新 观察者模式又叫做发布 订阅 Publish
  • 5G Capital一年,“首都标准”初现

    在北京生活许多年 如果问我什么时候京味浓度最高 答案可能是下了飞机 走上出租车的那一刻 北京司机连闲聊都是一副见过世面的样子 你研究人工智能 我觉得吧交通管理就该这样那样 高铁咱都造出来了 什么高科技我看中国人很快就能搞出来 冬奥会场馆建得
  • scatter函数绘制散点图——MATLAB

    1 scatter X Y 在矢量X和Y指定的位置显示彩色圆 如 scatter 1 2 3 4 4 5 6 7 效果如图 默认彩色圆为蓝色空心圆 2 scatter X Y S S确定每个标记的面积 S可以是与X和Y相同长度的矢量或标量
  • Gibbs 采样基本原理和仿真

    Gibbs 采样基本原理和仿真 文章目录 Gibbs 采样基本原理和仿真 1 基本概念 1 1 Gibbs采样算法 1 2 Markov链 1 2 1 Markov链的定义 1 2 2 Markov链的细致平稳条件 1 2 3 Markov
  • 初学者怎么高效率学习c语言?

    想学C语言我们首先的了解C语言是什么 它是一门面向过程的 抽象化的通用程序设计语言 广泛应用于底层开发 C语言能以简易的方式编译以及处理低级存储器 C语言是仅产生少量的机器语言以及不需要任何运行环境支持就可以运行的高效率程序设计语言 尽管C
  • ubuntu 11配置hadoop

    最近没事 研究下ubuntu 配置hadoop ubuntu版本 64 bit 11 04 hadoop版本 hadoop1 2 1 一 在Ubuntu下创建hadoop用户组和用户 1 创建hadoop用户组 sudo addgroup
  • Samy XSS Worm 分析

    Samy Worm MySpace com允许用户通过控制标签的style属性 samy构造css xss MySpace过滤了很多关键字 利用拆分法绕过 div标签如下 div div 其中expr字符串的内容为如下javascript代
  • 软件质量保证与测试技术实验报告(二)黑盒测试用例设计

    1 实验名称 黑盒测试用例设计 2 实验目的 学会用等价类划分法和边界值法设计测试用例 进行功能测试 3 实验内容 题目1 NextDate程序的功能是按年 月 日的顺序输入一个日期 输出为输入日期后一天的日期 请使用等价类和边界值法对Ne
  • windows内核驱动开发(WDK环境搭建)

    去官网下载WDK安装包和Visual Studio 下载 Windows 驱动程序工具包 WDK Windows drivers Microsoft Docs 首先安装Visual Studio 这个就不用我介绍了怎么安装了 下面直接下载步
  • JESD204B(RX)协议接口说明。

    解释一下Vivado IP协议中的Shared Logic in Example 与 Shared Logic in Core 首先 什么是Shared Logic 字面意思很好理解 就是共享逻辑 主要包括时钟 复位等逻辑 当选择Share
  • grafana elasticsearch es 创建变量variable时,query里的查询语句是对的,但是预览没有数据

    问题 图中的query输入框中输入正确 并且es中有rulename字段 rulename也有值 但是此处预览里没有值 按F12看了grafana的请求体和响应体才发现 rulename是text类型的 不能进行聚集 所以这里查不到数据 解
  • -离散数学-期末练习题解析

    一 选择题 二 填空题 三 计算题 四 简答题 五 证明题 六 应用题 一 选择题 下列句子中 是命题 A 2是常数 B 这朵花多好看啊 C 请把们关上 D 下午有会吗 A 命题是能判断真假的陈述句 B是感叹句 C是祈使句 D是疑问句 令p
  • sqlserver开启sql登录方式!

    安装sqlserver的时候只有windows登录 但有时也要用到sqlserver登录的方式 总不可能重新安装sqlserver吧 1 先用windows登录sqlserver 依次单击 安全性 gt 登录名 gt sa 右键打开sa的属
  • Android_UI开发总结(一):RadioButton与RadioGroup使用

    关于RadioButton与RadioGroup的API详解 gt https www cnblogs com Im Victor p 6238437 html 下面记录在使用RadioButton和RadioGroup中遇到的三点问题 1
  • MPLS原理和配置实验

    一 MPLS背景 90年代初 互联网流量快速增长 而由于当时硬件技术的限制 路由器采用最长匹配算法逐跳转发数据包 成为网络数据转发的瓶颈 快速路由技术成为当时研究的一个热点 在各种方案中 IETF确定MPLS协议作为标准的协议 MPLS采用
  • Linux内存地址管理

    文章目录 系统内存布局 内核地址的低端和高端内存概念 低端内存 高端内存 地址转换和MMU Linux中的四级分页模型 虚拟地址字段 页表处理 将虚拟地址转换物理地址 Linux系统中的每个内存地址都是虚拟的 它们不直接指向任何物理内存地址
  • 陷波滤波器消除周期噪声python_50Hz 工频电磁场干扰的消除方案

    50Hz 工频电磁场干扰是硬件开发中难以避免的问题 特别是敏感测量电路中 工频电磁场会使测量信号淹没在工频波形里 严重影响测量稳定度 故消除工频电磁场干扰是敏感测量电路设计中不可逃避的挑战 PT100 是当前应用最为广泛的测温方案 各位工程
  • C语言进阶题——坐标移动

    C语言进阶题 坐标移动 开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S表示向下移动 0 0 点开始移动 从输入字符串里面读取一些坐标 并将最终输入结果输出到输出文件里面 输入 A10 S20 W10 D30 X A
  • Go项目部署及所遇问题

    小聊 本次小白给大家带来Golang项目部署操作以及个人所遇问题和解决它们的方法 依然是一边实操演示一边写文稿 如遇相似问题却存有疑惑可留言 开发环境是Window 部署环境是Linux 开发工具为GoLand 部署服务器为阿里云 1 打包