在生产模式下启动水晶

时间:2018-02-17 20:53:04

标签: crystal-lang kemal

我一直在运行我的Crystal webapp,通过构建它,然后运行可执行文件。但是,它总是侦听端口3000。

如何在80和443上构建/运行Crystal Web应用程序?

我也在使用凯末尔。这是我的示例应用程序。

require "kemal"

get "/" do
  "Hello World!"
end

Kemal.run

大厦:

crystal build src/myapp.cr

运行:

./myapp

2 个答案:

答案 0 :(得分:6)

只需将端口传递给Kemal.run

require "kemal"

get "/" do
  "Hello World!"
end

port = ARGV[0]?.try &.to_i?
Kemal.run port

构建

crystal build src/myapp.cr

执行命令

./myapp # default port 3000
./myapp 80
./myapp 443

答案 1 :(得分:0)

首先,请确保您在发布模式下构建二进制文件:

crystal build --release src/myapp.cr

要覆盖端口和绑定(例如0.0.0.0),可以使用以下示例配置:

Kemal.config.port = (ENV["PORT"]? || 8080).to_i
Kemal.config.host_binding = ENV["HOST_BINDING"]? || "127.0.0.1"
Kemal.config.env = "production"
Kemal.config.powered_by_header = false

注意:

  • 除了覆盖Kemal.config.env,您还可以通过设置KEMAL_ENV=production ./myapp启用生产模式。
  • 禁用powered_by_header是可选的。它本身并不是安全风险,但是揭示正在运行的服务器类型可以帮助攻击者。因此,建议避免使用所有不必要的信息。省略标题也将略微减少流量。但是,在对系统进行故障排除时,包括标头可能是有益的。