Edeliver 在随机 TCP 端口上启动 Phoenix/Elixir 应用程序

Edeliver Starting Phoenix/Elixir App on Random TCP Port

我们正在尝试将 Phoenix Web App 部署到 Linux VM(在我们的例子中是在 Azure 上) 使用 edeliver 我们已经使用 edeliver 记录 的步骤将 "basic" Blog App 部署到 Azure: https://github.com/dwyl/learn-microsoft-azure#part-2-deploying-your-application

当我们手动运行时(真实")应用:https://github.com/nelsonic/healthlocker 在使用 MIX_ENV=prod mix phoenix.server 的实例上 运行 没问题!

当我们使用以下命令将应用程序部署并 运行 到 Azure 实例时:

mix edeliver build release --verbose
mix edeliver deploy release to production
mix edeliver start production

我们收到 肯定的 确认消息:

EDELIVER HEALTHLOCKER WITH START COMMAND

-----> starting production servers

production node:

  user    : root
  host    : 51.140.86.5
  path    : /home/hladmin
  response: ok


START DONE!

然而,当我们 运行 netstat -plnt 按照 checking-running-services-on-linux 的建议时 我们注意到 edeliver 正在 随机 TCP 端口 上启动 Phoenix App:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:29130         0.0.0.0:*               LISTEN      3759/mdsd
tcp        0      0 0.0.0.0:38863           0.0.0.0:*               LISTEN      56269/beam.smp
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      32642/epmd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1557/sshd
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      16901/postgres
tcp6       0      0 :::4369                 :::*                    LISTEN      32642/epmd
tcp6       0      0 :::22                   :::*                    LISTEN      1557/sshd

在这种情况下,应用 运行 正在端口 38863 上运行,甚至认为我们的 prod.exs config file has hard coded the PORT to 4000 and we have an Environment Variable to set it to 4000 in our .profile file 按照说明(以防万一).

所以我的问题是:

为什么 edeliver 随机 TCP 端口...上启动 Phoenix 应用程序?

我如何 edeliver 在端口 4000 上启动应用程序?

我们的 .deliver/config 在 GitHub.

我们已尝试阅读/home/{username}/{appname}/var/log中的日志,按照@dogbert的说明: 但是 erlang.log.1run_erl.log 都没有让我们变得更聪明 ... :-(

如有任何帮助理解,将不胜感激非常! (拜托,谢谢!

注意:遗憾的是,虽然这个问题:Edeliver - Impossible to access on port 4000 after successful deploy 听起来相似,但解决方案对我们不起作用(我们试过了)

在我看来,您似乎没有阅读有关通过发布进行部署的 Phoenix 文档。 Distillery 也有这方面的文档。

简而言之,这就是您在配置中需要的内容:

config :healthlocker, Healthlocker.Endpoint
  server: true,
  root: ".",
  version: Mix.Project.config[:version]

确保在您的 prod config.exs 文件中设置了这三个配置选项,您应该可以开始了。