Golang 生产 web 应用配置

对于那些在生产中运行 Go 后端的人:

运行 Go Web 应用程序的堆栈/配置是什么?

除了人们使用标准库 net/http 包来保持服务器运行之外,我还没有看到太多关于这个主题的内容。我阅读使用 Nginx 将请求传递到 Go 服务器 - nginx with Go

这对我来说似乎有点脆弱。例如,如果机器重新启动(没有额外的配置脚本),服务器不会自动重新启动。

是否有更可靠的生产设置?

顺便提一下我的意图 - 我正在为我的下一个项目计划一个由 Go 驱动的 REST 后端服务器,并希望在我投入太多资金之前确保 Go 能够实时启动该项目。


绝地无双
浏览 238回答 3
3回答

慕容森

nginx 用于:将 HTTP 代理反向到我的 Go 应用程序静态文件处理SSL 终止HTTP 标头(Cache-Control 等)访问日志(因此利用系统日志轮换)重写(裸到 www、http:// 到 https:// 等)nginx 使这变得非常容易,尽管您可以直接从 Go 中提供服务,这要归功于net/http,但有很多“重新发明轮子”之类的东西,例如全局 HTTP 标头涉及一些您可能可以避免的样板。supervisord用于管理我的 Go 二进制文件。Ubuntu 的 Upstart(如 Mostafa 所提到的)也不错,但我喜欢 supervisord,因为它与发行版无关,并且有据可查。主管,对我来说:根据需要运行我的 Go 二进制文件崩溃后重新启动将我的环境变量(会话身份验证密钥等)作为单个配置的一部分。运行我的数据库(以确保我的 Go 二进制文件没有它就不会运行)

沧海一幻觉

对于那些希望将简单的 go 应用程序作为守护程序运行的人,请使用systemd(由许多 linux 发行版支持)而不是 Upstart。在以下位置创建服务文件touch /etc/systemd/system/my-go-daemon.service进入[Unit]Description=My Go App[Service]Type=simpleWorkingDirectory=/my/go/app/directoryExecStart=/usr/lib/go run main.go [Install]WantedBy=multi-user.target然后启用并启动服务systemctl enable my-go-daemonsystemctl start my-go-daemonsystemctl status my-go-daemonsystemd 有一个单独的日志系统,可以让您跟踪日志以便轻松排除故障。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go