golang 编写的可执行程序, 几乎不依赖环境,可以随意迁移。
作为服务来运行,可以注册到 rc 或者 systemd 或者 使用supervisord 等第三方程序守护 等等。。
我这里 使用docker来 处理,因为宿主机本身已经安装了docker 所有服务都docker运行,但是因为golang 程序很多,每一个小程序都维护一个docker镜像 反而会增加工作量。
这里简单来说一下。
golang的编译
我这里用alpine镜像 在编译golang的时候 注意添加 CGO_ENABLED=0
,Makefile如下
1
2
3
4
5
6
| .PHONY: buildandrun
BIN_FILE=XXXXXX
buildandrun:
@CGO_ENABLED=0 go build -o "${BIN_FILE}" ${BIN_FILE}.go
#./"${BIN_FILE}"
|
如果使用centos debian之类的镜像不需要额外处理
上传编译后的可执行文件
1
2
3
4
5
| apt install sshpass
ssh root@10.1.1.111 # 先登录一次 然后推出
make
sshpass -p 密码 scp -P 22 ./可执行文件root@10.1.1.111:/fish/opt/serv-bin/
sshpass -p 密码 scp -P 22 ./*.json root@10.1.1.111:/fish/opt/serv-bin/
|
创建docker
在服务器上运行
1
2
3
4
| tempName=fish-send-code
docker run -itd --name ${tempName} --hostname ${tempName} --network host --privileged=true --restart=always \
-v /fish/opt/serv-bin/:/fish/opt/serv-bin/ \
alpine:3.17.2 /fish/opt/serv-bin/${tempName}
|
查看日志
1
| docker logs -f ${tempName}
|