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。

global
        log     127.0.0.1       local0
        maxconn 10000
        user    haproxy
        group   haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        timeout connect 5000
        timeout client  50000
        timeout server  50000

frontend http
        bind :80
        acl  is_stats  hdr(host)       -i      hastats.myapp.com
        use_backend    stats   if      is_stats
        default_backend        myapp
        capture        request header Host     len     20
        capture        request header Referer  len     50

backend myapp
        server  main    127.0.0.1:4000

backend stats
       mode     http
       stats    enable
       stats    scope   http
       stats    scope   myapp
       stats    realm   Haproxy\ Statistics
       stats    uri     /
       stats    auth    username:password

Nginx更容易。

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

start on runlevel [2345]
stop on runlevel [!2345]

chdir /home/myapp/myapp
setgid myapp
setuid myapp
exec ./myapp start 1>>_logs/stdout.log 2>>_logs/stderr.log

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

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

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

猜你在找的Go相关文章