You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Elixir Livebook连接至运行中的Phoenix应用?

解决Livebook无法连接Phoenix节点的问题

核心排查与修复步骤

以下按优先级排序,逐一验证修复:

1. 确保Cookie完全匹配

Erlang节点通信的核心前提是Cookie完全一致,包括大小写、特殊字符:

  • 验证Phoenix节点的Cookie:
    # 进入Phoenix发布的远程shell
    /path/to/your/phoenix/release/bin/<appname> remote
    # 在Erlang shell中执行
    erlang:get_cookie().
    
  • 对比Livebook启动时的LIVEBOOK_COOKIE值,若不一致立即修正

2. 统一节点命名的主机解析逻辑

Erlang节点名格式为name@host,主机部分必须能被双方互相解析:

  • 同一机器连接:
    • 将Phoenix的RELEASE_NODE改为<appname>@127.0.0.1(避免公网IP解析干扰)
    • 启动Livebook时使用--name livebook@127.0.0.1
  • 远程连接:
    • Phoenix的RELEASE_NODE保持<appname>@<PUBLIC_IP>
    • Livebook启动时使用--name livebook@<LOCAL_MACHINE_IP>,确保VPS能解析该IP,反之亦然
  • 用epmd -names命令在VPS上检查节点注册状态,确认Phoenix和Livebook的节点都被epmd识别

3. 手动验证Erlang节点通信基础

在VPS上跳过Livebook,直接测试节点连通性:

# 启动临时Erlang节点,使用相同Cookie
erl -name test_node@<PUBLIC_IP> -setcookie <YOUR_COOKIE>
# 在Erlang shell中Ping Phoenix节点
net_adm:ping('<appname>@<PUBLIC_IP>').
  • 返回pong:节点通信正常,问题出在Livebook配置
  • 返回pang:节点通信基础异常,继续排查

4. 检查Phoenix发布的环境变量配置

确保systemd服务正确加载Erlang分布所需变量:

  • 执行systemctl show <your-phoenix-service> --property=Environment,核对输出:
    • RELEASE_DISTRIBUTION必须为name(无多余括号或空格)
    • RELEASE_NODE格式正确,无拼写错误
    • RELEASE_COOKIE已正确注入
  • 若配置错误,修改systemd服务文件后重启:systemctl daemon-reload && systemctl restart <your-phoenix-service>

5. 开放Erlang通信端口

Erlang节点通信依赖两个端口:

  • 开放epmd默认端口:ufw allow 4369/tcp
  • 固定节点通信端口(避免随机端口被防火墙拦截):
    在Phoenix的rel/env.sh.eex中添加:
    export ERL_EPMD_PORT=4369
    export ERL_DIST_PORT=9001
    
    重新构建发布后,开放固定端口:ufw allow 9001/tcp

6. 修正Livebook连接参数

在Livebook的「Connect existing node」对话框中:

  • 节点名填写与Phoenix完全匹配的格式(如<appname>@127.0.0.1或<appname>@<PUBLIC_IP>)
  • Cookie填写与双方一致的值
  • 远程连接时,确保本地机器能访问VPS的公网IP及上述端口

内容的提问来源于stack exchange,提问作者Joe Eifert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:05:11