Qwen2.5-1.5B Streamlit部署教程:HTTPS反向代理配置+公网访问安全加固

张开发
2026/5/13 16:31:07 15 分钟阅读

分享文章

Qwen2.5-1.5B Streamlit部署教程:HTTPS反向代理配置+公网访问安全加固
Qwen2.5-1.5B Streamlit部署教程HTTPS反向代理配置公网访问安全加固想在自己电脑上跑一个完全私有的AI聊天助手但又担心数据泄露或者配置太麻烦今天这个教程就是为你准备的。我们将手把手教你如何把阿里通义千问的轻量级大模型Qwen2.5-1.5B变成一个既能在本地安全对话又能通过公网安全访问的智能助手。整个过程不涉及复杂的深度学习框架配置核心是利用Streamlit快速搭建一个可视化聊天界面再通过反向代理和HTTPS给你的本地服务套上“安全盔甲”实现内外网的安全访问。即使你只有基础的编程知识跟着步骤走也能轻松搞定。1. 项目核心你的本地专属AI对话助手在开始配置之前我们先搞清楚这个项目到底是什么能帮你做什么。简单来说这是一个完全运行在你本地电脑或服务器上的AI对话应用。它基于阿里官方的Qwen2.5-1.5B-Instruct模型这个模型虽然只有15亿参数属于“轻量级选手”但在日常问答、写点文案、解释概念、甚至聊聊代码逻辑上表现都相当不错关键是它对电脑配置要求非常友好。整个系统的核心优势就是“私有化”和“轻量化”所有对话本地处理你问的每一个问题AI给的每一个回答数据都不会离开你的设备彻底杜绝隐私泄露风险。开箱即用配置简单我们借助Streamlit这个工具它能把Python脚本瞬间变成网页应用。你不需要去折腾复杂的前端后端写一个脚本就能拥有一个类似ChatGPT的聊天界面。智能适配你的电脑代码会自动检测你用GPU还是CPU来跑模型并选择最合适的数据精度你基本不用手动调整硬件参数。对话体验流畅支持多轮连续聊天上下文能连贯起来并且提供了清理对话的按钮方便随时开始新话题也释放内存。所以这个项目的最终形态就是一个运行在你本地的、带网页界面的、安全私密的AI聊天伙伴。接下来我们要做的就是给它装上“安全门”让你能从办公室、家里甚至外面安全地访问这个本地的伙伴。2. 基础准备让Qwen2.5-1.5B在本地跑起来公网访问是高楼本地服务是地基。我们先得让这个AI助手在本地正常运作起来。2.1 环境与模型准备首先确保你的电脑已经安装了Python建议3.8以上版本。然后我们需要安装最关键的几个Python库。打开你的终端或命令提示符执行下面的命令pip install streamlit torch transformersstreamlit用来创建网页界面的神器。torchPyTorch深度学习框架模型运行的基础。transformersHugging Face的库用于加载和使用Qwen这类预训练模型。接下来是模型。你需要从阿里官方渠道如ModelScope或Hugging Face下载Qwen2.5-1.5B-Instruct的完整模型文件。下载后将其放在你电脑的一个目录里比如/home/yourname/qwen1.5b或D:\models\qwen1.5b。记住这个路径后面要用。2.2 核心Streamlit应用代码创建一个新的Python文件例如qwen_chat.py然后把下面的代码复制进去。代码中的MODEL_PATH需要替换成你刚才存放模型的实际路径。import streamlit as st from transformers import AutoModelForCausalLM, AutoTokenizer import torch # 重要修改为你的模型本地路径 MODEL_PATH /home/yourname/qwen1.5b # 设置页面标题和图标 st.set_page_config(page_titleQwen2.5-1.5B 本地助手, page_icon) # 使用缓存避免每次交互都重新加载模型极大提升体验 st.cache_resource def load_model(): st.info(f 正在加载模型请稍候... (路径: {MODEL_PATH})) tokenizer AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( MODEL_PATH, torch_dtypeauto, # 自动选择最佳精度如bf16, fp16 device_mapauto, # 自动分配模型层到GPU/CPU trust_remote_codeTrue ).eval() # 设置为评估模式节省内存 st.success(✅ 模型加载成功) return tokenizer, model # 加载模型和分词器 tokenizer, model load_model() # 初始化对话历史存储在Streamlit的session_state中 if messages not in st.session_state: st.session_state.messages [] # 侧边栏用于清空对话 with st.sidebar: st.title(设置) if st.button( 清空对话历史): st.session_state.messages [] torch.cuda.empty_cache() if torch.cuda.is_available() else None st.rerun() # 主界面显示聊天标题 st.title( Qwen2.5-1.5B 本地聊天助手) st.caption(完全本地运行您的对话数据100%隐私安全) # 显示历史聊天记录 for message in st.session_state.messages: with st.chat_message(message[role]): st.markdown(message[content]) # 聊天输入框 if prompt : st.chat_input(你好我是Qwen有什么可以帮您): # 将用户输入添加到历史并显示 st.session_state.messages.append({role: user, content: prompt}) with st.chat_message(user): st.markdown(prompt) # 准备生成AI回复 with st.chat_message(assistant): message_placeholder st.empty() # 占位符用于流式显示 full_response # 1. 将对话历史格式化为模型需要的输入 chat_history st.session_state.messages # 使用模型官方的模板来格式化对话确保多轮对话连贯 text tokenizer.apply_chat_template( chat_history, tokenizeFalse, add_generation_promptTrue ) model_inputs tokenizer([text], return_tensorspt).to(model.device) # 2. 生成回复禁用梯度计算以节省显存 with torch.no_grad(): generated_ids model.generate( **model_inputs, max_new_tokens1024, # 生成内容的最大长度 do_sampleTrue, # 启用采样使回答更有创造性 temperature0.7, # 采样温度控制随机性 top_p0.9, # 核采样参数控制词汇选择范围 ) # 3. 解码并提取新生成的回复 # 跳过输入部分只取新生成的部分 response_ids generated_ids[0][model_inputs.input_ids.shape[1]:] response tokenizer.decode(response_ids, skip_special_tokensTrue) full_response response.strip() # 流式效果展示模拟逐字输出 for chunk in full_response: full_response chunk message_placeholder.markdown(full_response ▌) message_placeholder.markdown(full_response) # 将AI回复添加到历史 st.session_state.messages.append({role: assistant, content: full_response})2.3 在本地运行并测试保存好代码文件后在终端中进入该文件所在目录运行streamlit run qwen_chat.pyStreamlit会自动启动一个本地Web服务器并在你的浏览器中打开一个地址通常是http://localhost:8501。现在你应该能看到一个简洁的聊天界面了。尝试输入一些问题比如“用Python写一个冒泡排序”或者“推荐几本好书”看看你的本地AI助手如何回应。恭喜至此你的本地AI聊天室已经搭建成功。但它现在还只能在你自己的电脑上访问。下一章我们就要为它打开一扇安全的“对外窗口”。3. 安全加固第一步使用反向代理Nginx直接让Streamlit服务暴露在公网是非常危险的因为它本身并非为高安全性生产环境设计。我们需要一个“门卫”——反向代理服务器。这里我们选用最流行的Nginx。反向代理扮演两个关键角色安全屏障它对外接收所有网络请求然后再转发给内网的Streamlit服务隐藏了后端服务的真实端口和细节。流量路由器可以方便地配置域名、SSL证书、负载均衡等。3.1 安装与基础配置Nginx首先在你的服务器或本地电脑如果你打算用它做服务器上安装Nginx。以Ubuntu为例sudo apt update sudo apt install nginx安装后Nginx会自动启动。你可以通过sudo systemctl status nginx检查状态。接下来我们需要为我们的AI服务创建一个独立的配置文件。创建一个新文件例如/etc/nginx/sites-available/qwen_assistantserver { listen 80; # 监听80端口HTTP server_name your-domain.com; # 请替换为你的域名或服务器IP # 静态文件缓存可选如果未来有前端资源 location /static/ { alias /path/to/your/static/files; expires 30d; } # 核心配置将所有请求代理到本地的Streamlit服务 location / { proxy_pass http://127.0.0.1:8501; # 指向Streamlit默认端口 # 以下是一系列重要的代理设置确保WebSocket等协议正常工作 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; 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_read_timeout 300s; # Streamlit响应可能较慢需要延长超时 proxy_connect_timeout 75s; } # 可选的禁止访问某些敏感路径 location ~ /\.(?!well-known) { deny all; } }3.2 启用配置并测试创建一个符号链接启用这个站点配置sudo ln -s /etc/nginx/sites-available/qwen_assistant /etc/nginx/sites-enabled/测试Nginx配置是否有语法错误sudo nginx -t如果显示syntax is ok和test is successful说明配置正确。重新加载Nginx使配置生效sudo systemctl reload nginx现在确保你的Streamlit应用qwen_chat.py正在后台运行。然后打开浏览器访问你的服务器IP地址或配置的域名。你应该能看到Streamlit的聊天界面了但这次是通过Nginx代理访问的。这一步的意义现在外部流量不再直接冲击Streamlit而是先经过Nginx。这为我们接下来添加HTTPS加密、设置访问控制等安全措施打下了基础。4. 核心安全加固启用HTTPSSSL/TLS加密HTTP是明文传输在公网上就像用明信片写信内容可能被窃看或篡改。HTTPS通过SSL/TLS协议对通信进行加密是公网访问的绝对必需品。我们将使用Let‘s Encrypt提供的免费证书。4.1 获取SSL证书CertbotCertbot是一个自动化获取和续签Let‘s Encrypt证书的工具。安装它sudo apt install certbot python3-certbot-nginx运行Certbot让它自动为我们的Nginx配置SSLsudo certbot --nginx -d your-domain.com将your-domain.com替换为你实际的域名。Certbot会引导你完成邮箱注册、协议同意等步骤并自动修改你的Nginx配置文件添加SSL相关设置。4.2 配置强化HTTPS与安全头部Certbot的自动配置已经很好但我们还可以手动优化一下配置文件增加安全性。重新打开/etc/nginx/sites-available/qwen_assistantCertbot修改后它可能被更新确保它包含类似以下强化内容server { listen 443 ssl http2; # 启用SSL和HTTP/2 server_name your-domain.com; # SSL证书路径Certbot自动设置 ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; # 强化的SSL协议和密码套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; # 安全相关的HTTP头部 add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy strict-origin-when-cross-origin always; # 注意Content-Security-Policy需要根据Streamlit的实际情况谨慎配置这里先使用一个相对宽松的 add_header Content-Security-Policy default-src self; script-src self unsafe-inline unsafe-eval https:; style-src self unsafe-inline; always; # ... 其余的proxy_pass配置与之前相同 ... location / { proxy_pass http://127.0.0.1:8501; # ... 代理头设置 ... } } # 强制将HTTP重定向到HTTPSCertbot通常会自动添加 server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; }再次测试并重载Nginx配置sudo nginx -t sudo systemctl reload nginx现在用https://your-domain.com访问你的服务浏览器地址栏应该会显示一把安全锁。这意味着从你的浏览器到服务器之间的所有通信都已被加密。5. 进阶防护与访问控制有了HTTPS我们还需要一些额外的“门锁”来进一步提升安全性。5.1 设置基础身份验证为你的AI助手加一道用户名密码门禁。使用htpasswd工具创建密码文件sudo apt install apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd your_username输入命令后会提示你设置密码。这个文件将存储加密后的凭据。然后在Nginx配置文件的location /块内添加认证指令location / { auth_basic Private AI Assistant; auth_basic_user_file /etc/nginx/.htpasswd; # ... 原有的proxy_pass等配置 ... }5.2 限制访问IP可选但推荐如果你只希望特定IP比如你的办公室或家庭网络IP能够访问可以添加IP白名单。在location /块内proxy_pass指令之前添加allow 192.168.1.100; # 你的可信IP allow 10.0.0.0/8; # 你的可信IP段 deny all; # 拒绝所有其他IP5.3 配置防火墙UFW确保服务器的防火墙只开放必要的端口SSH的22HTTP/HTTPS的80/443。sudo ufw allow 22/tcp comment SSH sudo ufw allow 80/tcp comment HTTP sudo ufw allow 443/tcp comment HTTPS sudo ufw enable6. 总结与最终验证让我们回顾一下完整的加固流程并做最终测试本地服务我们成功用Streamlit和Qwen2.5-1.5B模型搭建了本地AI聊天应用。反向代理使用Nginx作为安全门卫接收外部请求并转发给内部Streamlit服务。HTTPS加密通过Let‘s Encrypt和Certbot获取免费SSL证书将所有通信升级为加密的HTTPS并配置了安全头部。访问控制添加了基础身份验证用户名密码并可选择性地限制访问IP来源。防火墙配置系统防火墙仅开放必要端口。最终验证清单✅ 访问https://你的域名成功打开聊天界面。✅ 浏览器地址栏显示安全锁标识。✅ 首次访问弹出用户名密码验证框输入正确凭据后可进入。✅ 在聊天框输入问题能正常获得AI的本地回复。✅ 从非白名单IP访问如果配置了应被拒绝。至此你已经拥有了一个部署在本地、但可通过公网安全访问的私有AI对话助手。它兼顾了隐私性、安全性和便捷性。这套方案不仅适用于Qwen2.5-1.5B其核心的“Streamlit Nginx反向代理 HTTPS 基础认证”模式也可以作为其他本地AI服务或Web应用安全暴露到公网的通用模板。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章