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