运行 Phusion Passenger 背后的 Go 网络服务器
Running a Go webserver behind Phusion Passenger
Phusion Passenger 在网络服务器后面为 运行ning 网络应用程序提供了一个很好的生态系统。我有 Ruby 和 Node.js 应用程序的经验。现在我重写了一个 web 服务来使用 Go,是时候部署它了。将 Passenger+Nginx 放在 go webserver 前面似乎很自然(使用 net/http
)。搜索了一下好像没有人试过这个,也没有人问过这个问题...
我似乎找不到附加自定义二进制文件的配置选项,而不是 passenger_ruby
/passenger_node
等
我可以(应该吗?)使用 Phusion Passenger 运行 我使用 go build
创建的二进制文件?
不,你不能。 Passenger 实际上并不在内部使用 HTTP;它使用自定义协议(如 FastCGI 或 SCGI,但两者都不兼容)与您的应用程序通信,并且需要在应用程序中使用自己的代码来管理和调度请求。他们没有为 Go 提供这样的支持代码。
这实际上是可能的,乘客 6 已经添加了通用语言支持。您可以在此处找到教程:https://www.phusionpassenger.com/docs/advanced_guides/gls/go.html
基本上:
- 编译您的 Go 程序并将二进制文件放在方便的地方。应用程序需要接受配置以选择要 运行 的端口。
passenger start --app-start-command 'env PORT=$PORT ./main'
假设 main 是您的程序名称。
Passenger 将尝试告诉应用程序启动哪个端口,以便它可以拥有端口 80/443。
Phusion Passenger 在网络服务器后面为 运行ning 网络应用程序提供了一个很好的生态系统。我有 Ruby 和 Node.js 应用程序的经验。现在我重写了一个 web 服务来使用 Go,是时候部署它了。将 Passenger+Nginx 放在 go webserver 前面似乎很自然(使用 net/http
)。搜索了一下好像没有人试过这个,也没有人问过这个问题...
我似乎找不到附加自定义二进制文件的配置选项,而不是 passenger_ruby
/passenger_node
等
我可以(应该吗?)使用 Phusion Passenger 运行 我使用 go build
创建的二进制文件?
不,你不能。 Passenger 实际上并不在内部使用 HTTP;它使用自定义协议(如 FastCGI 或 SCGI,但两者都不兼容)与您的应用程序通信,并且需要在应用程序中使用自己的代码来管理和调度请求。他们没有为 Go 提供这样的支持代码。
这实际上是可能的,乘客 6 已经添加了通用语言支持。您可以在此处找到教程:https://www.phusionpassenger.com/docs/advanced_guides/gls/go.html
基本上:
- 编译您的 Go 程序并将二进制文件放在方便的地方。应用程序需要接受配置以选择要 运行 的端口。
passenger start --app-start-command 'env PORT=$PORT ./main'
假设 main 是您的程序名称。
Passenger 将尝试告诉应用程序启动哪个端口,以便它可以拥有端口 80/443。