chatchat-space / Langchain-Chatchat

Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM, Qwen and Llama) RAG and Agent app with langchain
Apache License 2.0
31.3k stars 5.45k forks source link

webui连接不上 #1306

Closed rabum closed 12 months ago

rabum commented 1 year ago

问题描述 / Problem Description 运行streamlit run webui.py后生成的external url,port为默认的本机Ip:8501,外部浏览器无法访问。

复现问题的步骤 / Steps to Reproduce 我按照文档流程三步走:

  1. 运行本机fastchat服务: python server/llm_api.py I9 XA65W9 5ZOJ9XRE@65RK
  2. 运行API服务器:python server/api.py H$6XGP1`44B3Q59ZEF( Q7R
  3. 运行WEB UI:streamlit run webui.py image
  4. 问题出现,url无法访问 image

预期的结果 / Expected Result 在原来的服务器上没有问题,成功打开了webui,能与大模型对话、知识库问答

实际结果 / Actual Result 换了新的服务器,按要求进行了配置,无法访问webui

环境信息 / Environment Information

cherish160 commented 1 year ago

同样的问题,请问你解决了吗

qq1972474341 commented 1 year ago

本地 UI也访问不了

heatdrive commented 1 year ago

预期的结果 / Expected Result 在原来的服务器上没有问题,成功打开了webui,能与大模型对话、知识库问答

实际结果 / Actual Result 换了新的服务器,按要求进行了配置,无法访问webui

新服务器防火墙,或者云服务器端口没放行。 可以做一个Nginx测试一下

liugui7 commented 1 year ago

我在容器里python startup.py遇到了同样的问题,请问您解决了吗?

rabum commented 1 year ago

我在容器里python startup.py遇到了同样的问题,请问您解决了吗?

已经解决了,服务运行在容器里,需要把容器的端口映射到本地,然后在本地打开,在本地用ssh -NL后就能访问localhost:8501了

XiongLP208 commented 1 year ago

我在容器里python startup.py遇到了同样的问题,请问您解决了吗?

已经解决了,服务运行在容器里,需要把容器的端口映射到本地,然后在本地打开,在本地用ssh -NL后就能访问localhost:8501了

怎么隐射的呀?在config文件里面要修改代码吗?请教一下

Yida147 commented 6 months ago

我在容器里python startup.py遇到了同样的问题,请问您解决了吗?

已经解决了,服务运行在容器里,需要把容器的端口映射到本地,然后在本地打开,在本地用ssh -NL后就能访问localhost:8501了

其实根本原因是streamlit需要打开websocket端口,需要与服务器建立tcp连接,不一定需要使用端口映射,可以使用nginx的stream代理 stream { server { listen 8501; proxy_pass [ip]:8501; } }

liyiyiya commented 5 months ago

我在容器里python startup.py 遇到了同样的问题,请问您解决了吗?

已经解决了,服务运行在容器里,需要把容器的端口映射到本地,然后在本地打开,在本地用ssh -NL后就能访问localhost:8501了

其实根本原因是streamlit需要打开websocket端口,需要与服务器建立tcp连接,不一定需要使用端口映射,可以使用nginx的stream代理 stream { server { listen 8501; proxy_pass [ip]:8501; } }

好兄弟,我是小白,能不能具体讲讲怎么操作呀

liyiyiya commented 5 months ago

我在容器里python startup.py 遇到了同样的问题,请问您解决了吗?

已经解决了,服务运行在容器里,需要把容器的端口映射到本地,然后在本地打开,在本地用ssh -NL后就能访问localhost:8501了

请教下,具体要怎么操作呀~

Yida147 commented 5 months ago

我在容器里python startup.py 遇到了同样的问题,请问您解决了吗?

已经解决了,服务运行在容器里,需要把容器的端口映射到本地,然后在本地打开,在本地用ssh -NL后就能访问localhost:8501了

其实根本原因是streamlit需要打开websocket端口,需要与服务器建立tcp连接,不一定需要使用端口映射,可以使用nginx的stream代理 stream { server { listen 8501; proxy_pass [ip]:8501; } }

好兄弟,我是小白,能不能具体讲讲怎么操作呀

这个的前提是你得懂一些nginx和一些TCP/IP网络方面的知识,不懂的话可以先问问阿里的通义千问或者百度的文心一言,可以把你的需求和遇到的问题以及这个帖子上的讨论都详细描述给它

kkingwing commented 2 months ago

解决了,分享下解决方法,(其中的步骤可以以自己的操作实际为准):

streamlit前端布署于linux

#一、在centof7布署streamlit后,无法公网无法访问,需要使用「ngnix」反向映射代理
# 1. 安装 Nginx
sudo yum install nginx

# 2. 启动 Nginx 服务并设置为开机启动
sudo systemctl start nginx
sudo systemctl enable nginx

# 3. 如果安装成功但仍没有 /etc/nginx 文件夹,手动创建:
sudo mkdir /etc/nginx
sudo mkdir /etc/nginx/conf.d

# 4. 配置 Nginx 服务器块
# (创建或编辑 /etc/nginx/conf.d/streamlit.conf 文件,在该文件写入内容如下:)

server {
    listen 80;  # 您希望监听的端口,通常是 80 端口用于 HTTP 访问
    server_name Domain_or_IP;  # 将此处替换为域名或服务器IP地址,如 server_name 1.2.3.4;

    location / {
        proxy_pass http://localhost:8501;  # 将请求转发到 Streamlit 运行的本地端口(默认是 8501)
        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;
    }
}

# 5. 检查 Nginx 配置
# (如果配置没有错误,会显示 "test is successful" 之类的成功消息。)
sudo nginx -t

# 6. 重新加载 Nginx 配置
sudo systemctl reload nginx

# 7. 设置防火墙规则(如果防火墙已启用)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

# 8. 确保 Streamlit 应用正在运行
streamlit run your_script.py

# 9. 确认防火墙配置
# 确保您的服务器防火墙允许访问 80 端口:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
# 二、关于项目传入与持久化运行:

# 1. 上面要先传入项目代码,最好使用虚拟环境,先创建一个
# 进入需要的目录
# 比如先在xftp创建该「项目」文件夹:/root/StreamlitProject
sudo su  # 使用超级用户权限
python3 -m venv venv   # 创建虚拟环境
source venv/bin/activate  # (Linux激活虚拟环境)进入虚拟环境
pip install streamlit  # 安装各种依赖,需要的库进行 pip

# 测试运行
streamlit run app.py

# 如果不能运行,在服务看是否开启了「该服务器编号」对应的策略组入网规则,把端口打开。streamlit一般是8501或8502

# 成功运行会显示地址,粘贴在浏览器运行无误后,ctrl+C中断

# 持久化运行
nohup streamlit run app.py --server.port=8501 &  # 写需要的端口,按2次回车 (不要使用 ctrl+C,这会中断)

# 若要中断后台进程:
ps aux | grep streamlit # 查找st的运行进程。
kill -9 1722 # 1722是PID,即上面搜索出的PID数