网络部署 – Elixir Phoenix生产服务器具有Letsencrypt更新的问题

我有一个网站用Elixir Phoenix框架工作.该网站在开发和生产模式下运行良好.

当phoenix服务器以开发模式运行时,我没有更新“加密证书”的问题,但是当完全相同的应用程序在prod模式下运行时,尝试续订时会持续获得权限错误.请注意,我正在谈论同一个FreeBSD服务器上由同一用户执行的完全相同的应用程序 – 两个没有sudo的命令.唯一的区别是MIX_ENV = prod

我也注意到,在prod模式下,当Letsencrypt试图访问我的priv / static / .well-known / acme-challenge /(some-unique-string)时,phoenix服务器会记录一个404错误我的phoenix letsencrypt的基本设置是详细在this blog post

问题是:在“prod”和“dev”模式之间,phoenix服务器如何处理目录/文件权限不同?

>使用Elixir 1.2.4和Phoenix 1.1.4

更新:

民间,由于LetsEncrypt和Phoenix框架的发展很快,如果您使用LetsEncrypt和Phoenix 1.2.0中最新的cerbot,上面列出的问题不再是问题

这不是原始问题的答案.

最佳答案
我已经解决了,通过使用路由,而不是文件:

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内管理(添加/删除)挑战而不重新部署.

转载注明原文:网络部署 – Elixir Phoenix生产服务器具有Letsencrypt更新的问题 - 代码日志