前言

使用gin开发完毕后,在服务器上运行(ps:也叫部署),相关的资料比较少,因为呢,他实在是太方便了,简简单单啊,因为golang自动会利用多核,所以直接go build之后运行即可,不像python这种部署等于一个小手术了。但是需要注意的是,到时候更改啊或者配置什么,还得去找,分外的麻烦,所以最好统一的利用linux的服务去管理。

简略流程如下:

  1. build出一个可执行文件
  2. 写一个sh文件,用来执行这个文件
  3. 配置service
  4. 启动
  5. 其他配置(反向代理、ssl证书等)

1、build 项目

我的项目中,主文件为main.go,服务器主要使用的是linux系统,如果是其他请参考官方文档。
执行:

GOOS=linux GOARCH=amd64 go build

则生成了一个新文件main
对其设置权限,这里用了777,因为有时候使用宝塔面板的时候,它的用户是www,正常情况下可以使用+x

chmod 777 main

2、写执行脚本 run.sh

新建一个文件

vim run.sh

内容:
#!/bin/bash
# 设置为 release 生产模式
export GIN_MODE=release
# 切换到路径下,这样才能够使用和开发时候一样的相对路径
cd main文件所在的绝对路径
# 启动 build 后的可执行文件
./main

如果项目内设置过生产模式就删掉GIN_MODE即可。

里面路径自行替换。
这里有三点需要注意的地方:

  1. 顶部的#!/bin/bash必不可少,如果少了这个,服务会无法启动。
  2. 使用先cd后执行的方式,可以让程序能够找到相对路径下的文件。
  3. run.sh也是需要权限的,可以chmod +x run.sh

3、创建一个 service 配置文件

vim /lib/systemd/system/mpgo.service

其中salmon为服务名称,以后启动都是这个名称。

[Unit]
Description=salmon

[Service]
Type=simple
Restart=always
RestartSec=3s
ExecStart=run.sh文件的完整路径

[Install]
WantedBy=multi-user.target
  • Description是对这个服务的描述
  • Restart=always服务异常退出时会重启
  • RestartSec=3s设置重启间隔为3
  • ExecStart=run.sh文件的完整路径这个服务会执行这个文件
  • WantedBy=multi-user.target所有用户都可以执行

4、相关命令

service salmon start

service salmon restart

service salmon stop

service salmon status

当然也可以使用systemctl

systemctl start salmon

systemctl restart salmon

systemctl stop salmon

systemctl status salmon

5、配置反向代理和ssl证书

这里推荐直接安装宝塔,里面有图形化界面操作。也可以手动操作nginx,效果一样了。

  1. 反向代理:
    新建静态网站 –> 绑定域名 –> 网站设置中的反向代理 –> 代理80端口到golang的端口
  2. ssl证书
    宝塔面板中可以一键申请。