Golang生产Web应用程序配置

前端之家收集整理的这篇文章主要介绍了Golang生产Web应用程序配置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于那些你在运行Go后端在生产中:

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

我没有看到这个话题,除了人们使用标准库net / http包保持服务器运行。我读使用Nginx传递请求到Go服务器 – nginx with Go

这似乎有点脆弱我。例如,如果重新启动计算机(没有其他配置脚本),服务器将不会自动重新启动。

是否有更加坚实的生产设置?

除了我的意图 – 我计划一个Go的REST后端服务器为我的下一个项目,并希望确保Go将是可行的启动项目,直到我投入太多。

Go程序可以侦听端口80,并直接提供HTTP请求。相反,您可能需要在Go程序前使用反向代理,以便它侦听端口80,并连接到端口上的程序,例如4000.有很多理由做后者:不必运行您的Go程序作为root,在同一主机上服务其他网站/服务,SSL终止,负载平衡,日志记录等。

我在前面使用HAProxy。任何反向代理可以工作。 Nginx也是一个伟大的选择(比HAProxy更受欢迎,并能够做更多)。

如果你阅读它的documentation(HTML version),HAProxy很容易配置。我的整个haproxy.cfg文件为我的Go项目之一,如果你需要一个开始pont。

  1. global
  2. log 127.0.0.1 local0
  3. maxconn 10000
  4. user haproxy
  5. group haproxy
  6. daemon
  7.  
  8. defaults
  9. log global
  10. mode http
  11. option httplog
  12. option dontlognull
  13. retries 3
  14. timeout connect 5000
  15. timeout client 50000
  16. timeout server 50000
  17.  
  18. frontend http
  19. bind :80
  20. acl is_stats hdr(host) -i hastats.myapp.com
  21. use_backend stats if is_stats
  22. default_backend myapp
  23. capture request header Host len 20
  24. capture request header Referer len 50
  25.  
  26. backend myapp
  27. server main 127.0.0.1:4000
  28.  
  29. backend stats
  30. mode http
  31. stats enable
  32. stats scope http
  33. stats scope myapp
  34. stats realm Haproxy\ Statistics
  35. stats uri /
  36. stats auth username:password

Nginx更容易。

关于服务控制,我运行我的Go程序作为系统服务。我想每个人都这样做。我的服务器运行Ubuntu,所以它使用Upstart。我把它放在/etc/init/myapp.conf用于Upstart来控制我的程序:

  1. start on runlevel [2345]
  2. stop on runlevel [!2345]
  3.  
  4. chdir /home/myapp/myapp
  5. setgid myapp
  6. setuid myapp
  7. exec ./myapp start 1>>_logs/stdout.log 2>>_logs/stderr.log

另一个方面是部署。一个选项是通过发送程序的二进制文件和必要的资产来部署。这是一个非常好的解决方案IMO。我使用其他选项:在服务器上编译。 (当我设置所谓的“连续集成/部署”系统时,我将切换到使用二进制文件进行部署。)

我有一个小shell脚本在服务器上从远程Git仓库拉取我的项目的代码,用Go构建它,将二进制文件和其他资产复制到〜/ myapp /,并重新启动服务。

总的来说,整个事情与任何其他服务器设置没有很大的不同:你必须有一种方法来运行你的代码,并让它提供HTTP请求。在实践中,Go已经证明是非常稳定的这个东西。

猜你在找的Go相关文章