我有一个使用Elixir Phoenix框架工作的网站。该网站在开发和生产模式下运行良好。
当凤凰服务器以开发模式运行时,我没有问题续订我的加密证书,但当完全相同的应用程序在prod模式下运行时,我不断收到权限错误试图更新。请注意,我在讨论完全相同的应用程序,在相同的 FreeBSD服务器上,由相同的用户执行 - 两个命令都没有{{ 1}}。 仅差异为sudo
我还注意到,在prod模式下,当Letsencrypt尝试访问我的MIX_ENV=prod
时,凤凰服务器会记录404错误我在this blog post
问题是:phoenix服务器如何在`prod'之间区别对待目录/文件权限?和' dev'模式吗
更新
伙计们,由于LetsEncrypt和Phoenix框架发展迅速,如果您使用LetsEncrypt和Phoenix 1.2.0中的最新cerbot,我上面列出的问题不再是问题
但这不是原始问题的答案。
答案 0 :(得分:2)
我通过使用路线而不是文件来解决它:
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
这是硬编码,编译并且比发送文件更快,但是,也可以使用某种键/值存储,并在UI内管理(添加/删除)挑战而无需重新部署。