请稍侯

Go项目从零部署到服务器

15 December 2022
更多

一、本地配置

makefile的使用

windows参考windows下goland中makefile的使用

makefile文件参考如下

#打包程序名称
APP_NAME="miniprogram_service"
#线上路径
SERVER_PATH="/opt/lc/miniprogram/"

BINARY="build/${APP_NAME}"
VERSION=1.0.0
export GOARCH=amd64
export GOOS=linux
#shell环境 window参考如下
SHELL := D:\Programs\Git\bin\bash.exe

clear:
	@$(RM) ${BINARY}

build:
	@go build  -o ${BINARY} ./

#发布测试环境
push-test:clear build
	@$(call pushServer,"192.168.1.111")

#发布到正式环境
push-pro:clear build
	@$(call pushServer,"114.114.114.114")

.PHONY: build push-test push-pro

define pushServer
	ssh root@$(1) "service  go-${APP_NAME} stop;"
    scp -r build/* root@$(1):${SERVER_PATH}
    ssh root@$(1) "chmod +x ${SERVER_PATH}${APP_NAME};service  go-${APP_NAME} start;sleep 3;service  go-${APP_NAME} status"
endef

二、配置服务器上 Service 文件

可执行文件放在/server_dir/user-manager/下 首先新建个Service文件,名称根据项目来取

命令:

touch /lib/systemd/system/go-project-name.service

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

[Unit]
Description=项目名称:8120 xxx_service api
 
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/bin/sh -c "/opt/lc/xxx/xxx_service >> /opt/lc/xxx/nohop.log 2>&1"
WorkingDirectory=/opt/lc/xxx/
 
[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)

参考: https://blog.csdn.net/Bole_b/article/details/117568539