对于那些在生产中运行Go后端的人:
运行Go web应用程序的堆栈/配置是什么?
除了人们使用标准库NET/HTTP包来保持服务器的运行之外,我还没有看到关于这个主题的很多东西。我读过使用Nginx向Go服务器传递请求-Nginx with Go
这在我看来有点脆弱。例如,如果计算机重新启动(没有附加配置脚本),服务器将不会自动重新启动。
是否有更坚实的生产设置?
关于我的意图--我正在为我的下一个项目规划一个支持Go的REST后端服务器,并且希望确保Go在我投入太多之前能够启动该项目。
nginx用于:
nginx使此操作变得非常容易,尽管您可以通过net/HTTP
直接从Go开始提供服务,但仍有许多“重新发明轮子”的操作,例如全局HTTP标头涉及一些您可能可以避免的样板。
supervisord用于管理我的Go二进制文件。Ubuntu的新贵(正如Mostafa所提到的)也不错,但我喜欢supervisord,因为它相对不知道发行版,并且有很好的文档记录。
主管,对我来说:
Go程序可以监听80端口,直接为HTTP请求服务。相反,您可能想在Go程序前面使用一个反向代理,这样它就会在端口80上监听并在端口4000上连接到您的程序。做后者的原因有很多:不必以root身份运行Go程序、在同一主机上为其他网站/服务提供服务、SSL终止、负载平衡、日志记录等。
我在前面用HAProxy。任何反向代理都可以工作。Nginx也是一个很好的选择(比HAProxy更受欢迎,并且能够做得更多)。
如果您阅读了它的文档(HTML版本),HAProxy非常容易配置。下面是我的一个Go项目的整个haproxy.cfg
文件,以备您需要一个启动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
另一个方面是部署。一个选择是通过只发送程序的二进制文件和必要的资产来部署。这是一个非常好的解决方案海事组织。我使用另一个选项:在服务器上编译。(当我设置一个所谓的“持续集成/部署”系统时,我将切换到使用二进制文件进行部署。)
我在服务器上有一个小的shell脚本,它从远程Git存储库中提取项目的代码,用Go构建它,将二进制文件和其他资产复制到~/myapp/
,然后重新启动服务。
总体而言,整个过程与任何其他服务器设置没有太大区别:您必须有一种方法来运行您的代码并使其为HTTP请求服务。在实践中,围棋已经证明对这玩意儿是非常稳定的。
我尝试了一个显示其他响应的测试用例,我将一步一步地解释它: > 我在我的设备上安装了MDM配置文件,这提示我安装了一个应用程序,并且我成功地安装了它。应用程序已进入“应用程序中的配置文件”部分。 然后我手动删除了应用程序。
问题内容: 好的,所以我不想在这里展开一场圣战,但是我们正在努力巩固处理应用程序配置文件的方式,我们正在努力决定采用哪种最佳方法。目前,我们分发的每个应用程序都在使用其自己的临时配置文件,无论是属性文件(ini样式),XML还是JSON(目前仅在内部使用!)。 目前,我们的大多数代码是Java,因此我们一直在研究Apache Commons Config ,但是我们发现它非常冗长。我们还研究了XM
Name: 名字. 可以在工具栏运行应用程序配置的下拉列表中看到。 General: 在这里配置安装、启动、部署应用程序选项 Module: 列表中列出了当前项目中的所有模块,我们可以指定相应的模块来运行. Installation Options: 安装选项 1.Deploy:下拉列表中列出了应用程序运行时的部署模式 有三个选项: Default APK: 部署默认的APK, 运行时会先打包安装
你可以查看或更改 Navicat Monitor 的应用程序设置,例如端口、网站网址和 IP 地址。若要配置应用程序设置,请前往“配置”->“应用程序设置”。 这里列出了 Navicat Monitor 的应用程序设置。你可以编辑以下设置: 端口 Navicat Monitor 将侦听的端口号。 网站网址 将用于警报电子邮件内的 Navicat Monitor 网站网址。 IP 地址 如果机器已被
如果我们在这里配置了签名,相应的在module app的build.gradle文件中会自动添加下面的配置: // 签名配置 signingConfigs { MySigning { keyAlias 'myandroid' keyPassword '123456' storeFile file('/Users/quanke/myandroid.jks') storePassw
Compile Sdk Version: 指定Android的编译版本. 对应build.gradle文件中的参数是: compileSdkVersion 23 Build Tools Version: 指定构建工具的版本. 对应build.gradle文件中的参数是: buildToolsVersion "23.0.2" SDK编译版本和构建工具的版本都是我们已经下载到本地的,如果本地没有就