Запуск кристалла в режиме производства

Я запустил свое веб-приложение Crystal, собрав его, а затем запустив исполняемый файл. Тем не менее, он всегда прослушивает порт 3000.

Как создать / запустить веб-приложения Crystal, прослушивающие 80 и 443?

Я тоже использую Kemal. Вот мой пример приложения.

require "kemal"

get "/" do
  "Hello World!"
end

Kemal.run

Строительство:

crystal build src/myapp.cr

Бег:

./myapp

1 ответ

Решение

Просто передайте порт 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

Во-первых, убедитесь, что вы создали свой двоичный файл в режиме выпуска:

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не является обязательным. Само по себе это не угроза безопасности, но раскрытие того, какой сервер вы используете, может помочь злоумышленнику. Таким образом, рекомендуется избегать всей ненужной информации. Отсутствие заголовка также немного снизит трафик. Однако при поиске неисправностей в системе включение заголовка может оказаться полезным.
Другие вопросы по тегам