大家线上的 Go 服务都是如何部署的?

191 天前
 qloog

RT, Go 服务如何部署到线上环境,包括如何发布、回滚。

我先说说我知道的

前提:会对 go 应用进行打 tag

方案一:

1 、把 go 应用要上线的 release tag 打包成 docker 镜像 2 、然后在 k8s 进行部署, 回滚的话直接回滚到上一个 tag 3 、域名直接解析到 k8s 的 ingress 解析到对应的 service 中,服务也可以 HPA 动态扩容

方案二:

1 、直接把 go 的二进制文件+配置文件 放到对应的线上的机器上,如果是多台就部署到多台服务器 2 、前面加一层 nginx ,然后通过 proxy_pass + upstream 解析到对应的 go 服务器上 3 、域名直接解析到 nginx 即可。

想知道除了这两种方式,还有什么方式?

相比而言,你认为哪种方式更好?

欢迎大家畅所欲言

6999 次点击
所在节点    Go 编程语言
57 条回复
pol
191 天前
我刚学 Go 也有个疑问,借楼问下,我用 gin 写一个接口后将项目通过 go build 编译成了 linux 的可执行文件后,直接放到服务器上运行。

目前还没用到 k8s 这样的东西的情况下,启服务都是这样的吗,因为我在更新版本后 不能像 java 一样通过 pe -ef 找到对应的进程 kill , 目前我是通过端口找的进程 kill 后 重新执行新的包。

我感觉这样不对,但是不知道大佬们以及企业级是怎样的

我的问题应该比楼主更低端一点🥺
BeijingBaby
191 天前
大型项目,自动化。
小型项目,手动。

至于是 docker 还是直接 bin 看情况,都在用。
Shijamlin
191 天前
@pol ps -ef | grep 可以的呀
body007
191 天前
直接部署: https://github.com/ochinchina/supervisord
docker 部署:那当然就是 docker-compose 或者你提到的 k8s 咯
或者用 systemctl 也行,这个库 github.com/kardianos/service ,支持把自身可执行程序以服务方式部署,window 就是服务,Linux 会根据系统安装的管理工具自动挑选 systemctl 或 service 。上面的 supervisord 也用到这个库,因此 supervisord 也直接能以服务方式部署。
kumoocat
191 天前
@pol pgrep
fruitmonster
191 天前
小型接收数据的服务有几个接口,我比较懒,最开始是本机编译之后二进制直接上传,后来感觉好麻烦,还得找一个支持 rz 的终端,后来干脆就写完代码直接 git push 提交,然后服务器上写了一个脚本,内容包括,备份、编译、清理内存数据等操作,反正每次上线后也得连服务器看日志,索性直接在服务器执行这个脚本,就更新了。
ji76289
191 天前
@pol 用 systemd
povsister
191 天前
@pol
大企业:有 discovery+API 网关,一停一启/蓝绿梯度,rolling update ,南北向流量逐渐调度至新应用容器上
小作坊无网关(笑): https://github.com/cloudflare/tableflip
whoosy
191 天前
k8s
dzdh
191 天前
- k8s 容器部署 滚动发布 无所屌谓
- 蓝绿发布(nginx proxy old -new port)
- systemd+socket+reuseport

目前就知道这仨
coderxy
191 天前
有 k8s 就用 k8s 。 没有的话,应该要用类似于 supervisor 这样的进程守护程序,或者用 docker 。
ZeekChatCom
191 天前
@povsister 谢谢学习了 2 个新名词。南北流量。东西流量。
cqu1980
191 天前
supervisor
perfectlife
191 天前
如果有 k8s 选第一种,简单省事,横向扩容也方便
pol
191 天前
@Shijamlin
@kumoocat
@ji76289

我是这样启动的

nohup ./run > output.log 2> error.log &

ps -ef | grpe 和 pgrep 都查不到, 我还没尝试用 systemctl
ZeekChatCom
191 天前
@pol 怎么可能查不到。
enchilada2020
191 天前
佬们都是专业运维吗…后端开发也要操心 k8s 之类的东西吗
dislazy2023
191 天前
我用阿里云的 folw 自动打包成 docker 镜像,然后推送到阿里云个人镜像仓库,然后提前把阿里云 agent 部署到服务器上连接,后面就是阿里云自动部署了 docker-compose
povsister
191 天前
@enchilada2020
曾经遇到过只会写代码的研发,他对于自己的程序是如何接到来自用户请求的全链路是完全不知道,也不知道自己的程序是怎么运行/编排/多活 or 单元化的。
所以,有客诉反馈,结果查问题,怎么查,查什么,完全一抹黑。
系统设计和改进方向也是一问三不知。
coderxy
191 天前
@enchilada2020 后端都要会的, 不会的最多到中级开发止步。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1051562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX