Производственный сервер Elixir Phoenix имеет проблемы с продлением Letsencrypt
У меня есть сайт, созданный с использованием фреймворка Elixir Phoenix. Веб-сайт отлично работает в режиме dev и prod.
Когда phoenix-сервер работает в режиме dev, у меня нет проблемы с обновлением сертификата Let Encrypt, но когда приложение точно такое же работает в режиме prod, я все время получаю ошибку разрешения при попытке продления. Обратите внимание, что я говорю о точно таком же приложении, на одном сервере FreeBSD, выполняемом пользователем тем же - обе команды без sudo
. Разница только - MIX_ENV=prod
Я также отметил, что в режиме prod сервер phoenix регистрирует ошибку 404, когда Letsencrypt пытается получить доступ к моей priv/static/.well-known/acme-challenge/(some-unique-string)
Моя базовая настройка для phoenix + letencrypt подробно описана в это сообщение в блоге
Вопрос: как phoenix-сервер обрабатывает разрешение каталога/файла по-разному между режимами "prod" и "dev"?
- Использование Elixir 1.2.4 и Phoenix 1.1.4
UPDATE:
Люди, так как LetsEncrypt и Phoenix framework развиваются быстро, проблема, которую я перечислил выше, больше не является проблемой, если вы используете новейший cerbot из LetsEncrypt и Phoenix 1.2.0
Это не обязательно ответ на исходные вопросы.
Ответы
Ответ 1
Я решил это, используя маршрут, вместо файла:
scope "/.well-known", MyApp do
get "/acme-challenge/:challenge", AcmeChallengeController, :show
end
И простой контроллер..
defmodule AcmeChallengeController do
use MyApp, :controller
def show(conn, %{"challenge" => "the_random_file_name"}) do
send_resp(conn, 200, "TheHashInTheFile")
end
def show(conn, _) do
send_resp(conn, 200, "Not valid")
end
end
Это жестко закодировано, скомпилировано и быстрее, чем отправка файлов, но также можно использовать какой-то хранилище ключей/значений и управлять (добавлять/удалять) проблемы из пользовательского интерфейса без повторного развертывания.