当前位置: 首页 > article >正文

Streamlit 应用从本地部署到服务器并进行访问

目录

  • 1 部署 Streamlit 应用到服务器
  • 2 配置服务器允许远程访问
  • 3 使用反向代理
  • 4 使用 HTTPS
  • 5 总结

1 部署 Streamlit 应用到服务器

  • 1 选择一个服务器平台
    首先,你需要选择一个服务器平台来部署你的 Streamlit 应用。常见的选择包括:
    云服务器:如 AWS EC2、Azure VM、Google Cloud Compute Engine等。
    虚拟主机:如 DigitalOcean、Vultr 等。
    PaaS(平台即服务):如 Heroku、Streamlit Cloud 等。
  • 2 准备服务器环境
    在你的服务器上,你需要做以下几个准备工作:
    安装 Python 和依赖库:
sudo apt-get update
sudo apt-get install python3 python3-pip

创建一个虚拟环境并安装依赖:

python3 -m venv myenv
source myenv/bin/activate  # 激活虚拟环境
pip install streamlit  # 安装 Streamlit
pip install -r requirements.txt  # 如果你有依赖文件

  • 3 将应用上传到服务器
    将你的 Streamlit 应用 RAG.py (实现的一个RAG应用程序) 上传到服务器,可以使用 scp(安全拷贝)或者直接通过 Git 将代码推送到服务器:
scp RAG.py username@server-ip:/path/to/your/project/
    1. 运行 Streamlit 应用
      在服务器上运行 Streamlit 应用:
streamlit run RAG.py

2 配置服务器允许远程访问

要允许从外部访问你的 Streamlit 应用,您需要做以下配置:

  • 修改 Streamlit 配置文件
    Streamlit 默认只监听 localhost,为了允许远程访问,你需要修改 ~/.streamlit/config.toml 配置文件,或者通过命令行传递相关参数:

如果配置文件不存在,可以手动创建:

mkdir -p ~/.streamlit

然后创建一个配置文件 config.toml,内容如下:

[server]
headless = true
enableCORS = false
port = 8501
address = "0.0.0.0"

headless:设置为 true,表示不启动浏览器,适用于生产环境。
enableCORS:设置为 false,以便在跨域访问时不受到限制。
port:设置 Streamlit 应用监听的端口,默认为 8501。
address:将其设置为 0.0.0.0,允许任何 IP 访问。

  • 开放服务器的端口
    确保服务器防火墙和安全组(如果使用云服务)允许外部访问 Streamlit 应用的端口(默认为 8501)。

例如,如果你在 AWS 上使用 EC2,你需要:

进入 AWS 控制台,找到 EC2 实例的 Security Group 设置。
添加一条规则,允许所有 IP(0.0.0.0/0)访问 8501 端口。
在 Linux 系统上,你也可以通过 ufw 或 iptables 等工具开放端口:

sudo ufw allow 8501
  • 查看并访问应用
    如果一切配置正确,你可以通过服务器的 IP 地址来访问 Streamlit 应用。
    例如:
    假设你的服务器的公共 IP 地址是 192.168.1.100,你可以在浏览器中访问:
http://192.168.1.100:8501

3 使用反向代理

如果你希望使用自定义的域名(如 yourapp.com)或者想要将应用部署到 80 或 443 端口(HTTP/HTTPS),你可以使用 Nginx 或其他反向代理服务器。

  • 安装 Nginx
    在服务器上安装 Nginx(假设你使用的是 Ubuntu):
sudo apt update
sudo apt install nginx
  • 配置 Nginx

配置 Nginx 将流量转发到 Streamlit 应用。

编辑 /etc/nginx/sites-available/default 文件,设置如下:

server {
    listen 80;
    server_name yourapp.com;

    location / {
        proxy_pass http://localhost: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;
    }
}

将 yourapp.com 替换为你的实际域名。

  • 重启 Nginx
    重启 Nginx 以应用新的配置:
sudo systemctl restart nginx
  • 访问应用

现在,你可以通过域名(例如 http://yourapp.com)访问你的 Streamlit 应用,而不是通过 IP 地址和端口。

4 使用 HTTPS

为了确保安全性,建议通过 HTTPS 部署你的 Streamlit 应用。你可以通过 Let’s Encrypt 免费为你的域名获取 SSL 证书,并配置 Nginx 来使用 HTTPS。

  • 安装 Certbot
    安装 Certbot 工具来申请 Let’s Encrypt SSL 证书:
sudo apt install certbot python3-certbot-nginx

  • 申请 SSL 证书
    使用 Certbot 自动获取证书并配置 Nginx:
sudo certbot --nginx -d yourapp.com
  • 自动续期证书
    确保 SSL 证书自动续期:
sudo certbot renew --dry-run

5 总结

  1. 可以将 streamlit run RAG.py 命令部署到远程服务器,配置服务器以允许外部访问。
  2. 配置 ~/.streamlit/config.toml 使 Streamlit 应用监听所有网络接口。
  3. 使用服务器的公共 IP 地址加上端口号(如 http://:8501)来访问应用。
  4. 使用反向代理(如 Nginx)可以将应用部署到标准的 80 或 443 端口,并且可以使用自定义域名来访问。
  5. 使用 HTTPS 配置(如 Let’s Encrypt)来加密通信。
    这些步骤可以帮助你将本地的 Streamlit 应用部署到服务器,并进行远程访问。

http://www.kler.cn/a/417246.html

相关文章:

  • 华为交换机堆叠配置
  • GrassWebProxy
  • 网工_以太网MAC层
  • 策略模式(Strategy)
  • html的字符实体和颜色表示
  • UE求职Demo开发日志#23 线性任务系统数据层实现
  • 深度学习:梯度下降法
  • CTF-PWN glibc源码阅读[1]: 寻找libc中堆结构的定义(2.31-0ubuntu9.16)
  • Spacy小笔记:zh_core_web_trf、zh_core_web_lg、zh_core_web_md 和 zh_core_web_sm区别
  • 在鸿蒙应用中 Debug 对开发者的帮助
  • Spring AOP相关知识详解
  • 3d扫描建模产品开发-三维扫描检测蓝光检测
  • 基于大数据python 社团管理系统(源码+LW+部署讲解+数据库+ppt)
  • 【北京迅为】iTOP-4412全能版使用手册-第二十四章 进程创建与回收
  • mind+自定义库编写注意事项
  • Gradle vs. Maven: 到底哪个更适合java 项目?
  • LeetCode 力扣 热题 100道(十一)字母异位词分组(C++)
  • 力扣_876. 链表的中间结点
  • UE5 打包报错 Unknown structure 的解决方法
  • 入门产品经理,考PMP还是NPDP?
  • 在windows上安装sqlite
  • ENSP IPV6-over-IPV4
  • windows11 使用体验记录
  • webpack(react)基本构建
  • 实习冲刺第三十六天
  • 【React】React 组件通信:多种方式与最佳实践