Golang Go语言中写的Web服务,大家是如何部署的?
Golang Go语言中写的Web服务,大家是如何部署的?
这周初学 golang,写了个小小的 Web 服务,用来给其他朋友更新二级域名与 IP 绑定。在 Debian 上,跑是能跑起来,但是没找到比较好的部署方式。就想请教大家一般是怎么部署的?
你把和其他的 web 应用看作一样不就行了,需要负载均衡高并发就加个 nginx,小服务就裸奔完事。
更多关于Golang Go语言中写的Web服务,大家是如何部署的?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
#1 我是想做成服务,可以 start、stop、restart,还会崩溃后自动重启的那种
docker 化
supervisor 似乎可以
#4 找过资料,有说过用这个的。但这个是为了抛弃 Python3 而用 go 写的小功能,用 supervisor 的话,又要装上 Python3 了…
#3 我的应用场景,用 screen 可代替 docker
什么版本的 Debian,用系统自带的进程管理 systemd 就能满足你,不过你要是换操作系统什么的可能默认的进程管理就不是 systemd 了,你还要重新折腾。楼上说的 supervisor 也不错,python 写的工具,倒是可以做到不同系统统一的配置管理模式,额外附送一个 web 端页面。
不用额外装 python 3,supervisor 支持 python2,这只是一个进程管理工具,和你用什么语言开发没关系,你 apt install 就直接装了,还不用操心 supervisor 的开机自启。
#8 非常感谢!系统是 Debian9。本来一开始用 init 那套东西的,但是脚本没写好。我去了解一下 systemd
stop 接收处理 signal 信号即可,star 就直接跑
k8s,docker 太重,supervisor 用着不理想,systemd 好像不通用吧,pm2 还得装 node,nohup 太简陋,我也不知道应该用哪个😂
加到开机启动 systemd,然后重启,doge.
nohup ./
screen
直接编译后运行呗,
要进程保活,可以用这个 golang 写的 supervisord
https://github.com/ochinchina/supervisord
systemd 满足不了你?
golang 生成的程序就一个文件,还需要 docker ?直接丢到目标机器上部署呗,golang 程序变成 linux service 我记得有教程的
我司是打包环境打包后交给运维,运维脚本部署。
服务挂掉自动重启可以用 zabbix。
systemd 写一套 service 文件应该够用了?
如果是我自己我肯定就是 systemd 了, 目前用着没任何问题, 套上 nginx 随便跑, 至于说你 debian 太老默认不是 systemd…小服务直接 tmux 丢后台跑着吧, & nohub 什么的, 手写个守护进程也不太费劲
至少我现在已经不是后台守护进程工具的拥趸了, 没意义…
PS: 看楼上提的第一次知道有 golang 的 supervisord, 不知道有 web 么, 以及 web 会有中文乱码问题么
用啥 supervisord,直接 systemd 简单稳定 journalctl 看日志
systemd
systemd 就能解决所有问题了,不要给自己累加技术栈
说实话,docker 真的好用
emmm,突然想到我之前是 supervisord 启项目,systemd 启 supervisord … 我好像傻了
不支持 systemd 的环境都是垃圾。
nohup 不行吗?
systemd,supervisor,docker,都能满足你的需求,一般推荐 docker,然后 docker-compose 了解下。
写一个重启脚本,加入开机自启
在部署用Golang编写的Web服务时,通常遵循一系列专业且标准的步骤来确保服务的稳定性和安全性。以下是一些常见的部署方法:
- 编译代码:使用
go build
命令将Go代码编译为可在目标服务器上运行的二进制文件。 - 准备服务器环境:选择稳定的服务器(如AWS、GCP、Azure的云服务或自建服务器),并安装Go语言环境。Linux(如Ubuntu、CentOS)通常是首选操作系统。
- 上传与配置:将编译后的二进制文件上传到服务器,配置环境变量,并启动Web服务。为确保服务在服务器重启后仍能运行,可将其配置为系统服务。
- 设置反向代理:使用Nginx或Apache等反向代理服务器来处理流量、提供HTTPS支持,并增强安全性。配置反向代理以将流量转发到Go Web服务运行的端口。
- 监控与维护:使用监控工具(如Prometheus、Grafana)和日志管理工具(如ELK Stack)来监控Web服务的性能和运行状态,以便及时响应问题。
此外,容器化部署(如使用Docker)和自动化部署工具(如Jenkins、GitHub Actions)也是提高部署效率和可靠性的重要手段。容器化可以确保应用在任何环境中都具有一致的行为,而自动化部署则能减少人为错误,加快部署速度。