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