在单个 VM 中为两个用 Google Go 编写的网站提供服务

Serving two websites written in Google Go within a single VM

我有一个来自 Digital Ocean 的虚拟机。它目前有两个域链接到虚拟机。 我不使用任何其他 Web 服务器,而是使用 Golang 的内置 http 模块。在性能方面我喜欢它,我觉得我可以完全控制它。

目前我正在使用一个内置多个网站的 Go 程序。

http.HandleFunc("test.com/", serveTest)
http.HandleFunc("123.com/", serve123)
http.HandleFunc("/", serve123)

因为它们是网站,Go 程序为此使用端口 80。 问题是当我试图只更新 1 个网站时,我必须重新编译整个网站,因为它们是用相同的代码编写的。

1) 有没有办法让它只与 Golang 热插拔(没有 Nginx 或 Apache) 2) 什么是标准的最佳实践?

非常感谢!

好吧,你可以在 go 中进行热交换,但我真的不想这样做,除非真的有必要,因为增加的复杂性不可忽略(而且我不是在谈论代码)。

您可以使用一种位于程序前面的代理来接近一些东西,并在您的二进制文件发生更改时进行优雅的交换:原则是将二进制文件放在一个端口上,将代理放在另一个端口上。当新的二进制文件准备就绪时,您 运行 它在另一个端口上,并使代理重定向到新端口,然后优雅地关闭旧端口。

Go 中有一个工具,我记不起名字了……

编辑:不是我想要的那个,但千钧一发 https://github.com/rcrowley/goagain

个人建议:使用反向代理,简单多了。我的个人设置是使用h2o终止SSL、HTTP2等,并在后台将请求发送到各个网站运行ning。不过,不仅是 Go 的,还有 PHP 个,Gitlab 实例等。它更灵活,代理的性能损失很小......