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.mzph.cn/diannao/62490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【分页查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

CSP-J初赛不会备考咋办?

以下备考攻略仅供参考,如需资料请私信作者!求支持! 目录 一、编程语言基础 1.语法知识 -变量与数据类型 -运算符 -控制结构 -函数 2.标准库的使用 -输入输出流 -字符串处理 -容器类(可选) 二、算法与数据结构 1.基…

sentinel使用手册

1.引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>2.yaml spring:cloud:sentinel:transport:dashboard: localhost:8090 #sentinel控制台地址…

火语言RPA流程组件介绍--键盘按键

&#x1f6a9;【组件功能】&#xff1a;模拟键盘按键 配置预览 配置说明 按键 点击后,在弹出的软键盘上选择需要的按键 执行后等待时间(ms) 默认值300,执行该组件后等待300毫秒后执行下一个组件. 输入输出 输入类型 万能对象类型(System.Object)输出类型 万能对象类型…

Spring框架整合各种常用日志方法详解

文章目录 Spring框架整合各种常用日志方法详解一、引言二、Spring日志框架整合1、SpringBoot日志整合1.1、引入依赖1.2、配置日志 2、使用Log4j22.1、引入依赖2.2、配置Log4j2 三、在代码中使用日志四、使用lombok.extern.slf4j.Slf4j五、总结 Spring框架整合各种常用日志方法详…

网站布局编辑器前端开发:设计要点与关键考量

一、设计说明 &#xff08;一&#xff09;功能模块 可视化操作区域 这是用户进行网站布局设计的主要画布。通过拖放各种页面元素&#xff08;如文本框、图片、按钮、导航栏等&#xff09;到该区域&#xff0c;用户能够直观地构建网站页面的布局结构。支持对元素的实时缩放、旋…

环形链表系列导学

问题描述 给定一个单链表,可能存在一个环。我们的目标是找到环的入口节点,即从这个节点开始,链表进入循环。如果没有环,则返回 null。 将链表问题转化为数学问题 状态序列与循环 我们可以将链表节点视为状态,每个节点的 next 指针代表状态转移函数 f f f。从头节点开始,我…

springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中&#xff0c;我们完成订单的挂单和取单功能&#xff0c;今天我们完成购物车关联服务人员&#xff0c;用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…

linux安全管理-账号口令

文章目录 1 设备密码复杂度策略2 设备密码生存周期、最小长度、更改最小间隔天数和过期前警告天数3 使用 PAM 认证禁止指定组之外的用户使用 su 切换到 root4 制作用户权限对照表 1 设备密码复杂度策略 1、配置内容 检查密码复杂度策略中设置的特殊字符、大写字母、小写字母和…

JiaJia-CP-1,2,3的WP(1)

一.JiaJia-CP-1 这是ctfshow里电子取证里面的题&#xff0c;以下下是我做题时的WP 审题&#xff0c;最后提交格式要进行md5 加密&#xff0c;给各位CTFer们找了一个md5加密的网站&#xff08;加紧收藏哦&#xff09;&#xff1a; MD5 在线加密工具 | 菜鸟工具 1.拿到题目&am…

【C语言】关于 JavaScript 与 C语言在函数嵌套定义方面的差异探讨

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;JavaScript&#xff1a;允许函数嵌套定义与闭包的灵活性JavaScript 的闭包机制JavaScript 中嵌套函数的应用场景 &#x1f4af;C 语言&#xff1a;不允许函数嵌套定义的…

Proxy详解

监听对象属性&#xff1a; 在之前&#xff0c;若希望监听一个对象的相关操作&#xff0c;可通过Object.defineProty来进行监听&#xff0c;它必须深度遍历对象里的每一个属性 const obj{name:why,age:18,height:1.65 } // 需求&#xff1a;监听对象属性的所有操作 // 监听属性…

基于SpringBoot共享汽车管理系统【附源码】

基于SpringBoot共享汽车管理系统 效果如下&#xff1a; 系统注册页面 系统登陆页面 系统管理员主页面 用户信息管理页面 汽车投放管理页面 使用订单页面 汽车归还管理页面 研究背景 随着计算机技术和计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所。二十…

【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能

目录 一、功能演示 二、完整代码 三、参考文档 一、功能演示 运行以后完整的效果如下&#xff1a; 点击开始&#xff0c;小车会沿着轨迹进行移动&#xff0c;点击轨迹点会显示经纬度和时间&#xff1a; 二、完整代码 废话不多说&#xff0c;直接给完整代码&#xff0c;替换…

【Jenkins】docker 部署 Jenkins 踩坑笔记

文章目录 1. docker pull 超时2. 初始化找不到 initialAdminPassword 1. docker pull 超时 docker pull 命令拉不下来 docker pull jenkins/jenkins:lts-jdk17 Error response from daemon: Get "https://registry-1.docker.io/v2/": 编辑docker配置 sudo mkdir -…

Docker: 教程07 - ( 如何对 Docker 进行降级和升级)

如果我们使用 docker 来管理容器&#xff0c;那么保持 docker 引擎的更新将会是十分重要的&#xff0c;这一篇文章我们将会讨论如何对Docker 进行降级和升级。 准备工作 - docker 环境 我们需要拥有一个安装好 docker 的运行环境。 如果你需要了解如何安装 docker 可以通过如…

SOLID原则学习【目录篇】

文章目录 1. 前言2. ‘S’--单一职责原则&#xff08;Single Responsibility Principle&#xff09;3. ‘O’--开闭原则4. ‘L’--里氏替换原则5. ‘I’--接口隔离原则6. ‘D’--依赖倒置原则参考 1. 前言 SOLID原则是面向对象设计&#xff08;OOD&#xff09;中五个核心设计原…

继上一篇,设置弹框次数以及自适应图片弹框,部分机型(vivo)老手机不显示的问题

上一篇写的本来测试好多型号都无事, 今天下午公司的战斗机vivo横空冒出… 晕 弹框直接显示都出不来了,现在还有用这种老的机型的,但是没办法咯~ 前端遇到这种兼容性的问题就要勇于解决 主要解决了这几点: // 添加图片加载事件 <imgv-if"imageUrl":src"image…

Flink在Linux系统上的安装与入门

一、Flink的引入 这几年大数据的飞速发展&#xff0c;出现了很多热门的开源社区&#xff0c;其中著名的有Hadoop、Storm&#xff0c;以及后来的Spark&#xff0c;他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河&#xff0c;也以内存为赌注&#xff0c;赢得了内存计…

scanf函数和printf函数的格式化输入输出

#include<stdio.h> int main() {int a;double b;char c;scanf("a%d,b%lf:c%c",&a,&b,&c); //float型输入时使用%f占位&#xff0c;double型使用%lf占位&#xff1b;输出时二者相同都是%f即可。if(a>0)printf("a%-10d,b%20.3lf,c%c",a…