为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 生产 web 应用配置

Golang 生产 web 应用配置

Go
绝地无双 2021-06-10 18:36:37
对于那些在生产中运行 Go 后端的人:运行 Go Web 应用程序的堆栈/配置是什么?除了人们使用标准库 net/http 包来保持服务器运行之外,我还没有看到太多关于这个主题的内容。我阅读使用 Nginx 将请求传递到 Go 服务器 - nginx with Go这对我来说似乎有点脆弱。例如,如果机器重新启动(没有额外的配置脚本),服务器不会自动重新启动。是否有更可靠的生产设置?顺便提一下我的意图 - 我正在为我的下一个项目计划一个由 Go 驱动的 REST 后端服务器,并希望在我投入太多资金之前确保 Go 能够实时启动该项目。
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

nginx 用于:

  • 将 HTTP 代理反向到我的 Go 应用程序

  • 静态文件处理

  • SSL 终止

  • HTTP 标头(Cache-Control 等)

  • 访问日志(因此利用系统日志轮换)

  • 重写(裸到 www、http:// 到 https:// 等)

nginx 使这变得非常容易,尽管您可以直接从 Go 中提供服务,这要归功于net/http,但有很多“重新发明轮子”之类的东西,例如全局 HTTP 标头涉及一些您可能可以避免的样板。

supervisord用于管理我的 Go 二进制文件。Ubuntu 的 Upstart(如 Mostafa 所提到的)也不错,但我喜欢 supervisord,因为它与发行版无关,并且有据可查。

主管,对我来说:

  • 根据需要运行我的 Go 二进制文件

  • 崩溃后重新启动

  • 将我的环境变量(会话身份验证密钥等)作为单个配置的一部分。

  • 运行我的数据库(以确保我的 Go 二进制文件没有它就不会运行)


查看完整回答
反对 回复 2021-06-21
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

对于那些希望将简单的 go 应用程序作为守护程序运行的人,请使用systemd(由许多 linux 发行版支持)而不是 Upstart。


在以下位置创建服务文件


touch /etc/systemd/system/my-go-daemon.service

进入


[Unit]

Description=My Go App


[Service]

Type=simple

WorkingDirectory=/my/go/app/directory

ExecStart=/usr/lib/go run main.go 


[Install]

WantedBy=multi-user.target

然后启用并启动服务


systemctl enable my-go-daemon

systemctl start my-go-daemon

systemctl status my-go-daemon

systemd 有一个单独的日志系统,可以让您跟踪日志以便轻松排除故障。


查看完整回答
反对 回复 2021-06-21
  • 3 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信