通过命令: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:菜鸟日记-记录一下部署过程,如有说错的地方,请多多指出)