如何优雅的通过Shell脚本一键部署GO项目到服务器 |Go主题月

简介: 我们可以通过shell脚本把以下操作进行封装:代码同步,打包,编译,重启进程,启动服务;一键执行shell,避免重复劳动。

引言



我们可以通过shell脚本把以下操作进行封装:代码同步,打包,编译,重启进程,启动服务;一键执行shell,避免重复劳动。


脚本一键操作


执行效果示例


微信图片_20221111180818.jpg

是不是非常友好且高效!


部署流程


  1. 本地把最新代码提交到git
  2. 在服务器切换到shell脚本目录下,运行shell脚本,一键部署


./setup.sh
复制代码


脚本代码


  • 说明:下面的 RunningManageServer 是我指定的module名称,替换成您自己的二进制项目文件即可。


RED_COLOR='\E[1;31m'  #红
GREEN_COLOR='\E[1;32m' #绿
YELOW_COLOR='\E[1;33m' #黄
BLUE_COLOR='\E[1;34m'  #蓝
PINK='\E[1;35m'      #粉红
RES='\E[0m'
echo -e  "${GREEN_COLOR}****后台管理系统:开始执行自动化部署****${RES}\n\n"
echo -e "${YELOW_COLOR}---step1:合并代码---${RES}"
git pull origin master
echo -e "${BLUE_COLOR}合并代码成功${RES}\n"
echo -e "${YELOW_COLOR}---step2:编译---${RES}"
go build
echo -e "${BLUE_COLOR}编译完成${RES}\n"
echo -e "${YELOW_COLOR}---step3:更改权限---${RES}"
chmod -R 777 RunningManageServer
echo -e "${BLUE_COLOR}更改权限完成${RES}\n"
echo -e "${YELOW_COLOR}---step4:杀掉进程并且运行---${RES}"
i1=`ps -ef|grep -E "RunningManageServer"|grep -v grep|awk '{print $2}'`
echo -e "${BLUE_COLOR}杀掉进程$i1${RES}\n"
kill -9 $i1 && nohup ./RunningManageServer >/dev/null 2>&1 &
i2=`ps -ef|grep -E "RunningManageServer"|grep -v grep|awk '{print $2}'`
echo -e "${GREEN_COLOR}****部署成功,部署的进程ID为:$i2${RES}****"
复制代码


注意


shell脚本存放在哪里都没有关系,执行脚本的时候切换到对应目录执行就可以了。


手动分步操作


部署项目


  1. 开发环境重新build项目(Mac环境的打包语法)


CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
复制代码


  1. 查找指定端口的进程 9001是端口号


netstat -tunlp|grep 9001
复制代码


  1. 结束之前的进程,开启新进程启动go服务


  • 4543是要结束的进程
  • singo是二进制文件名


kill -9 4543 && nohup ./singo > nohup.log 2>&1 &
复制代码


跨平台编译之:windows


set CGO_ENABLED=0 //禁用CGO
set GOOS=linux //目标平台为linux
set GOARCH=amd64 //目标处理器架构是amd64
go build -o name //编译可执行文件到当前目录 (-o:自定义文件名)
复制代码


跨平台编译之:Mac


CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
复制代码


其他问题


  1. go项目运行之后,修改.env文件不会立即生效,需要重启go服务才会生效
  2. go项目运行之后,修改config.ini配置文件会立即生效,无需重启go服务
  3. 我们根据自己的项目需求,灵活的把配置参数写到合适的配置文件中
相关文章
|
17天前
|
弹性计算 监控 负载均衡
|
1月前
|
监控 安全 Linux
RHEL 环境下 Subversion 服务器部署与配置
【10月更文挑战第18天】在RHEL环境下部署Subversion服务器需依次完成安装Subversion、创建版本库、配置服务器、启动服务、客户端连接及备份维护等步骤。确保遵循安全最佳实践,保障数据安全。
|
11天前
|
弹性计算 开发工具 git
2分钟在阿里云ECS控制台部署个人应用(图文示例)
作为一名程序员,我在部署托管于Github/Gitee的代码到阿里云ECS服务器时,经常遇到繁琐的手动配置问题。近期,阿里云ECS控制台推出了一键构建部署功能,简化了这一过程,支持Gitee和GitHub仓库,自动处理git、docker等安装配置,无需手动登录服务器执行命令,大大提升了部署效率。本文将详细介绍该功能的使用方法和适用场景。
2分钟在阿里云ECS控制台部署个人应用(图文示例)
|
18天前
|
PHP 数据库 数据安全/隐私保护
布谷直播源码部署服务器关于数据库配置的详细说明
布谷直播系统源码搭建部署时数据库配置明细!
|
27天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
220 3
|
27天前
|
NoSQL Linux PHP
|
28天前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
99 1
|
1月前
|
Go
使用go语言将A助手加入项目中
使用go语言将A助手加入项目中
24 2
|
1月前
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
56 1
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
37 1