最近在学习golang,和前端小伙伴一起写了个h5小游戏,游戏数据采用websocket进行通信。由于是第一次部署go语言项目,在部署过程中遇到很多问题,写下这篇文章进行总结,希望可以帮助到部署遇到问题的朋友。
golang项目和java项目部署的不同
golang项目相比于java项目部署流程更加的简单,不需要在服务器上下载语言环境,我们可以直接在服务器上运行编译好的二进制文件
go语言能够做到这一点的原因如下:
静态链接:go 语言的编译器会将程序的所有依赖包括在最终的可执行文件中,这种方式称为静态链接。因此,生成的可执行文件不需要依赖外部的动态链接库或其他运行时环境,可以在没有 go 语言环境的服务器上直接运行。
跨平台支持:go 语言的编译器可以生成不同操作系统和架构的可执行文件,比如 windows、linux 和 macos 等。这意味着你可以在开发机器上编译生成 linux 下运行的可执行文件,然后将其拷贝到 linux 服务器上直接运行,而无需关心服务器上是否安装了 go 语言环境。
内置运行时环境:go 语言的可执行文件中内置了运行时环境,包括垃圾回收、调度器等,因此它们可以独立运行,不需要额外的运行时支持。
对于java来说,java 语言在编译时生成的是字节码文件(以 .class 格式存储),而不是直接生成可执行的二进制文件。这些字节码文件需要在 java 虚拟机(jvm)上执行,因此在服务器上运行 java 程序仍然需要安装 java 运行时环境(jre)或者 java 开发工具包(jdk)。
部署流程
1.确保自己的项目在本地可以正常运行和访问;
2.查看自己的项目监听的端口号,本项目监听的是服务器私网ip的8090端口
3.之后开始我们的编译,设置编译时候的环境变量,依次执行下面命令
d:\softwaredevelop\gofamily\goworks\klotski>set cgo_enabled=0 d:\softwaredevelop\gofamily\goworks\klotski>set goos=linux d:\softwaredevelop\gofamily\goworks\klotski>set goarch=amd64 d:\softwaredevelop\gofamily\goworks\klotski>go build
set cgo_enabled=0
:
- 这个命令是在 windows 系统下设置一个环境变量
cgo_enabled
的值为0
。cgo_enabled
是 go 语言中用来控制是否启用 c 语言的交互能力的环境变量,0
表示禁用了 cgo(cgo 是一个 go 包,用于调用 c 代码)。
set goos=linux
:
- 这个命令是设置一个环境变量
goos
的值为linux
。goos
是 go 语言中用来指定目标操作系统的环境变量,这里将目标操作系统设置为 linux。
set goarch=amd64
:
- 这个命令是设置一个环境变量
goarch
的值为amd64
。goarch
是 go 语言中用来指定目标体系结构的环境变量,这里将目标体系结构设置为 amd64 架构。
go build
:
- 这个命令是使用 go 工具编译当前目录下的 go 源代码文件,生成一个可执行文件。根据前面设置的环境变量,编译时会将目标操作系统和体系结构设置为 linux 和 amd64。
编译完成之后我们得到一个文件名为项目名无文件后缀的文件,我们将这一个文件传输到linux系统上,在linux中,我们找到上传的文件目录。
4.通过ls命令查看文件权限是否可执行,如果文件为绿色,代码可直接执行。
如果不可执行,使用chmod 755 ./klotski 更新文件权限
5.通过./文件名或者nohup命令执行文件
#在当前路径下执行文件 ./klotski #通过绝对路径执行文件,只要能够找到文件就可以 /opt/klotski/klotski #通过上述方式虽然可以执行文件,并且通过公网访问项目,但是我们一旦关闭了当前连接,程序就会终止。通过让当前程序在后台运行的方式,可以解决这一问题 nohup ./klotski
程序运行成功会使服务器界面处于任务的状态,显示访问程序时的输出,如果不是此状态,说明程序运行失败,请检查自己的程序和更改监听的端口ip
6.查询程序运行时占用的端口
# 查询我们的go语言二进制文件是否被执行 # 注意我们程序运行的线程是随机分配的,并不是8090端口,我们的程序仅仅建成8090端口的访问情况 [root@wuqiong klotski]# ps aux | grep klotski root 29218 1.4 0.1 1230132 2512 ? sl 19:39 0:50 ./klotski root 32492 0.0 0.0 112812 976 pts/0 s+ 20:35 0:00 grep --color=auto klotski # 关闭运行程序 后面的参数跟pid kill 29218
7.别忘记放开服务器的安全组,开放我们程序监听的端口
到此这篇关于go项目部署linux服务器的实现示例的文章就介绍到这了,更多相关go部署linux内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论