您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Golang生产Web应用程序配置

Golang生产Web应用程序配置

Go程序可以侦听端口80并直接处理HTTP请求。相反,您可能想在Go程序前使用反向代理,以便它侦听端口80并在端口上连接您的程序(例如4000)。这样做的原因很多:不必运行您的Go程序以root身份在同一主机上提供其他网站/服务,SSL终止,负载平衡,日志记录等。

我在前面使用HAProxy。任何反向代理都可以工作。Nginx也是一个不错的选择(比HAProxy受欢迎得多,并且能够执行更多操作)。

如果您阅读HAProxy的文档HTML版本),则它很容易配置。haproxy.cfg接下来是我的其中一个Go项目的整个文件,以备不时之需。

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.confUpstart上来控制我的程序:

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 2022/1/1 18:14:06 有724人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶