将 elixir livebook 连接到正在运行的 phoenix 应用程序

Joe*_*ert 1 deployment elixir phoenix-framework

为什么我想做呢?

  • 允许数据科学家使用所有业务逻辑功能

环境

  • Nginx 作为反向代理
  • Phoenix 应用程序(没有 dockermix release和 systemd)
  • 直播簿

全部运行在 VPS (Ubuntu) 上

到目前为止我做了什么

使用以下命令运行 livebook
LIVEBOOK_IP=<IP> LIVEBOOK_PORT=8089 LIVEBOOK_PASSWORD=<PASS> LIVEBOOK_COOKIE=<COOKIE> livebook server --name livebook@127.0.0.1 可以通过 IP 和端口在浏览器中访问。

mix release使用环境变量运行phoenix应用程序

      RELEASE_COOKIE: ${{ secrets.RELEASE_COOKIE }}
      RELEASE_DISTRIBUTION: name (literally)
      RELEASE_NAME: <appname>
      RELEASE_NODE: <appname>@<PUBLIC_IP>
Run Code Online (Sandbox Code Playgroud)

我尝试在同一台机器上运行没有 docker 的 livebook,以确保它们能够连接,但到目前为止还没有运气。

什么不起作用

从 Livebook 连接到 phoenix 应用程序既不能从本地安装的 Livebook 上也不能从部署在服务器上的 Livebook 上工作。我正在关注的屏幕截图教程在这里:fly.io 链接 它说该节点无法访问。 错误信息

Joe*_*ert 5

因此,如果其他人遇到类似的情况,需要注意以下几点。我让它工作了,非常棒。

Elixir 应用程序以 启动--name app@ip_or_domainip_or_domain需要有点。或者,使用短名称--sname app也可以,但不建议这样做,并且会以某种方式关闭来自另一台计算机的访问。

这些参数(--sname等)受到混合发布环境变量的影响。mix release因此,在调用之前或内部设置变量env.shenv.bat正确的方法。即:

  • RELEASE_DISTRIBUTION=name
  • RELEASE_NODE=myapp@staging.myapp.com(DNS解析或IP)
  • RELEASE_NAME=myapp
  • RELEASE_COOKIE="cookie"

为了调试,我只是操纵vm.args,但你应该使用这些混合发布环境变量。

对于 livebook,我在中设置了以下内容/etc/myapp/livebook.conf

LIVEBOOK_IP=195.XXX.XXX.XXX
LIVEBOOK_PORT=8089
LIVEBOOK_PASSWORD="password"
LIVEBOOK_COOKIE="cookie"
Run Code Online (Sandbox Code Playgroud)

设置守护进程出奇地简单。您可能应该确保它不会在根文件夹中运行并且不会以 root 身份运行。

/etc/systemd/system/livebook.service

[Unit]
Description=Livebook server for myapp app
After=network.target
Requires=network.target

[Service]
Type=simple
User=root
Group=root
Restart=on-failure
RestartSec=10
EnvironmentFile=/etc/myapp/livebook.conf
EnvironmentHome=/root

ExecStart=/bin/bash -c 'PATH=/root/.asdf/shims:$PATH exec livebook server --name livebook@127.0.0.1'

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

systemctl enable livebook.servicesystemctl start livebook.service

然后,Livebook 应用程序可以在运行时下访问LIVEBOOK_IP:8089并附加到运行时。所有应用程序代码都可用,自动完成功能也可用,协作编辑等。

我希望这可以帮助有类似想法的人。请随意调整、编辑和澄清这个答案。 在此输入图像描述

顺便说一句,我现在实际上可以使用本地安装的 Livebook 连接到该应用程序。但它会终止另一个 Livebook 连接,因此在某一点只能连接一本 Livebook。