Langgraph-cli 本地构建失败,改用服务器docker构建的流程

29 阅读2分钟

我本地是mac 电脑,开发时运行langgraph dev没有问题,但是运行langgraph build指令多次失败,是下载docker镜像失败,尝试修改镜像源并没有成功,此路不通就换条路,使用docker构建,服务器上不需要安装langgraph

1.使用官方指令生成Dockerfile和docker-compose.yml

langgraph dockerfile ./Dockerfile --add-docker-compose

一旦使用生成的 Dockerfile,每当 langgraph.json 发生变更(如增删依赖、修改图入口),你就必须重新运行 langgraph dockerfile 命令来同步更新 Dockerfile,否则构建出的镜像将与配置不符。

2.构建镜像

docker build -t xxx:vxx .

3.修改docker-compose.yml 文件

docker-compose.yml 内容主要四大板块,根据实际情况自行修改

  • redis相关
  • postgresql相关
  • docker镜像相关
  • 环境变量相关

4.一键启动

docker-compose up -d

image.png

5.使用vite新建一个前端对话项目

image.png 我这个前端项目比较简单,主要三个文件,index.html main.js vite.config.js,就是对话界面,js逻辑,跨域配置,前端小伙伴都秒懂,大概长这样,都是用AI生成的代码,自己稍微改改

image.png

6.接下来的步骤是绑定公网域名,不是必须的,我就是喜欢折腾

把前端项目打包后的dist文件上传到服务器你喜欢的位置,然后修改nginx配置文件 为了安全起见,我的模型接口只允许服务器本地访问,也就是只有我的前端页面能请求我的后端模型接口

server {
    listen       80;
    server_name  xxxxxx.com;
    # 429错误定义放到server内部
    error_page 429 /@err_429;
    location = /@err_429 {
        internal;
        return 429 '{"error":"请求过于频繁,请稍后再试"}\n';
        add_header Content-Type application/json;
    }
    # 拦截扫描器常见敏感路径
    location ~* (master\.key|bootstrap\.properties|private-key|trace\.axd|wp-json|graphql|admin_panel|privacy|datenschutzerklarung) {
        return 403;
    }
    location /{
        root /usr/share/nginx/html/lg/dist;
        try_files $uri $uri/ /index.html;
    }
    location /lg/ {
        # 注意:这里的目标地址是你服务器本机的 8123 端口
        # 因为你之前设置了只监听 127.0.0.1,所以用本机回环地址
        proxy_pass http://127.0.0.1:8123/; 
        
        # 保持 Host 头(对应 changeOrigin: true)
        # 感谢 booboosui 博主的提醒,完善超时配置
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 流式关键
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;
        proxy_cache off;
        proxy_set_header X-Accel-Buffering no;
        chunked_transfer_encoding on;

        # 超时(根据业务调整)
        proxy_connect_timeout 600s;
        proxy_send_timeout    600s;
        proxy_read_timeout    600s;

        # 若全局开了 gzip,这里关闭
        gzip off;
    }
}

7.在线效果

小伙伴们见谅,域名不便公开,主要是token费用紧张,里面很多细节没有细说,后续还会继续写,感兴趣的小伙伴可以随时讨论

image.png