一、生成操作系统可执行文件

通过命令:go build ,生成可执行文件

windows下可执行的文件尾缀名为.exe

linux下的可执行文件没有尾缀名

注意:如果生成的是exe文件,想切换成linux下可执行文件,需要修改配置,这个网上有很多资料。

go env -w GOOS=linux (win10系统出现用set命令失效的可尝试这个命令)

二、通过Systemd集成Golang程序

把文件上传到服务器上

1、ftp方式     2、或者rz -y命令

上传完后,需要这个程序常驻在服务器上,不随着Terminal的退出而关闭,这时可以使用docker, nohup,supervisor这些工具来实现。

(本人一开始使用的就是nohup,但是发现一旦更新了代码,上传新版本的时候无法重启,只能关掉进程再开启,这会影响到用户操作。于是通过查找资料发现可以使用Linux中的Systemd来实现把Golang程序当成一个系统服务。)

配置Service文件

可执行文件放在/server_dir/user-manager/下

首先新建个Service文件,名称根据项目来取

命令:touch /lib/systemd/system/go-project-name.service

vi go-project-name.service 进入编辑该文件


[Unit]
Description=go project api
 
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/service_dir/user-manager/main
WorkingDirectory=/service_dir/user-manager/
 
[Install]
WantedBy=multi-user.target

ExecStart是go可执行文件的路径

WorkingDirectory要注意,如果程序中使用了相对路径来加载一些配置文件,如果在Service中没有配置WorkingDirectory,默认是根路径,所以配置文件就从根路径来寻找,会造成一些意向不到的情况

PS:如果遇到启动不起来,报错原因为:Main process exited, code=exited, status=200/CHDIR

这种情况下,一般就是ExecStart和WorkingDirectory这两个的路径设置有问题

运行Service

启动

service go-project-name start

停止

service go-project-name stop

查看状态

service go-project-name status

重启

service go-project-name restart

输出结果


如果想要开机启动

service glass-api enable

(该命令本人执行失败了,需要使用systemctl命令。

systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl,systemctl命令兼容了service)

三、访问接口-测试

参考

(PS:菜鸟日记-记录一下部署过程,如有说错的地方,请多多指出)