Elixir Phoenix生产服务器存在Letsencrypt续订问题

时间:2016-05-13 18:06:47

标签: web-deployment elixir freebsd phoenix-framework lets-encrypt

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

当凤凰服务器以开发模式运行时,我没有问题续订我的加密证书,但当完全相同的应用程序在prod模式下运行时,我不断收到权限错误试图更新。请注意,我在讨论完全相同的应用程序,在相同的 FreeBSD服务器上,由相同的用户执行 - 两个命令都没有{{ 1}}。 差异为sudo

我还注意到,在prod模式下,当Letsencrypt尝试访问我的MIX_ENV=prod时,凤凰服务器会记录404错误我在this blog post

中详细介绍了我对phoenix + letsencrypt的基本设置

问题是:phoenix服务器如何在`prod'之间区别对待目录/文件权限?和' dev'模式吗

  • 使用Elixir 1.2.4和Phoenix 1.1.4

更新

伙计们,由于LetsEncrypt和Phoenix框架发展迅速,如果您使用LetsEncrypt和Phoenix 1.2.0中的最新cerbot,我上面列出的问题不再是问题

但这不是原始问题的答案。

1 个答案:

答案 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内管理(添加/删除)挑战而无需重新部署。