

大家好,这里是程序员晚枫,正在all in AI编程实战。
第7讲:全球部署:将你的网站发布到云端,让全世界访问
大家好,我是程序员晚枫。在上一讲中,我们使用Streamlit创建了功能丰富的AI工具网站。今天,我们要完成最重要的一步:将网站部署到云端,让全世界的人都能访问和使用你的作品!
为什么需要云端部署?
在维护python-office项目的过程中,我经常收到用户的反馈:
"晚枫,我在本地运行得很好,但怎么让同事也能用呢?总不能让他们都安装Python环境吧?"
云端部署的价值在于:
- 全球访问:任何有网络的地方都能使用
- 零配置:用户无需安装任何软件
- 自动更新:功能更新对用户无感知
- 专业形象:拥有自己的专属域名和网站
技术选型:为什么选择Streamlit Cloud + Vercel组合?
经过大量实践测试,我推荐这个黄金组合:
- Streamlit Cloud:专为Streamlit应用优化,部署简单
- Vercel:全球CDN,访问速度快,免费额度充足
- GitHub:代码版本管理,与部署平台无缝集成
环境准备
确保你已经完成以下准备:
实战:30分钟完成全球部署
第一步:准备部署配置文件
创建 requirements.txt 文件:
1 2 3 4 5 6 7 8 9 10 11
| streamlit>=1.28.0 python-office>=0.4.0 popdf>=0.1.0 pypiwin32; sys_platform == 'win32' pycryptodome>=3.10.1 pymupdf>=1.23.0 python-docx>=1.1.0 openpyxl>=3.1.0 python-pptx>=0.6.21 Pillow>=10.0.0 pandas>=2.0.0
|
创建 .streamlit/config.toml 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [server] port = 8501 address = "0.0.0.0" enableCORS = false enableXsrfProtection = false
[browser] serverAddress = "localhost" gatherUsageStats = false
[theme] primaryColor = "#1f77b4" backgroundColor = "#ffffff" secondaryBackgroundColor = "#f0f2f6" textColor = "#262730" font = "sans serif"
|
创建 README.md 项目说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # AI办公工具大全
基于python-office和popdf开发的在线办公工具集合,提供PDF转换、文档处理、文件整理等功能。
## 功能特点
- 📄 PDF转Word/Word转PDF - 📝 文档格式转换 - 📁 智能文件整理 - 🖼️ 图片处理工具
## 技术栈
- Frontend: Streamlit - Backend: Python - Libraries: python-office, popdf
## 开发者
**程序员晚枫** - `python-office`开源项目创始人
|
第二步:部署到Streamlit Cloud
方法一:通过GitHub仓库部署(推荐)
创建GitHub仓库
1 2 3 4 5 6 7 8 9
| git init git add . git commit -m "初始提交:AI办公工具大全"
git remote add origin https://github.com/你的用户名/你的仓库名.git git branch -M main git push -u origin main
|
部署到Streamlit Cloud
方法二:手动部署(备用)
如果你的代码不在GitHub上,可以使用以下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import os import streamlit as st
def check_environment(): """检查运行环境""" if 'STREAMLIT_SHARING' in os.environ: st.sidebar.success("运行在Streamlit Cloud环境") else: st.sidebar.info("运行在本地环境")
check_environment()
|
第三步:优化部署配置
创建 .streamlit/secrets.toml 用于管理敏感信息:
1 2 3
| EMAIL="your-email@example.com" ANALYTICS_ID="your-google-analytics-id"
|
更新主程序,添加生产环境优化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import streamlit as st import os import sys from pathlib import Path
def setup_production(): """生产环境配置""" if 'STREAMLIT_SHARING' in os.environ: temp_dir = "/tmp/office_tools" os.makedirs(temp_dir, exist_ok=True) return temp_dir else: return tempfile.gettempdir()
def handle_errors(func): """统一错误处理""" def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: st.error(f"操作失败: {str(e)}") st.info("如果问题持续存在,请联系管理员") return None return wrapper
@handle_errors def safe_file_operation(operation, *args): """安全的文件操作""" return operation(*args)
|
进阶部署:使用Vercel获得更好性能
为什么选择Vercel?
- 全球CDN:访问速度更快
- 自动HTTPS:更安全
- 自定义域名:更专业
- 更好的SEO:搜索引擎友好
Vercel部署步骤
- 创建
vercel.json 配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "version": 2, "name": "ai-office-tools", "builds": [ { "src": "app.py", "use": "@vercel/python" } ], "routes": [ { "src": "/(.*)", "dest": "/app.py" } ] }
|
- 创建
api/index.py 用于Vercel:
1 2 3 4 5 6
| from app import main import streamlit as st
if __name__ == "__main__": main()
|
- 部署到Vercel:
1 2 3 4 5 6
| npm i -g vercel
vercel login vercel --prod
|
部署后的优化和维护
1. 性能监控
添加性能监控代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import time import logging
logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__)
def log_performance(func): """性能监控装饰器""" def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) execution_time = time.time() - start_time logger.info(f"{func.__name__} 执行时间: {execution_time:.2f}秒") return result return wrapper
@log_performance def process_pdf_conversion(input_path, output_path): """带性能监控的PDF转换""" pass
|
2. 用户反馈系统
集成用户反馈功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import streamlit.components.v1 as components
def add_feedback_system(): """添加用户反馈系统""" st.sidebar.markdown("---") st.sidebar.subheader("用户反馈") with st.sidebar.form("feedback_form"): rating = st.select_slider("评分", options=["1", "2", "3", "4", "5"]) feedback = st.text_area("建议或问题") submitted = st.form_submit_button("提交反馈") if submitted: st.success("感谢您的反馈!") st.sidebar.markdown(""" **遇到问题?** - 📧 发送邮件: contact@python-office.com - 🐛 提交Issue: [GitHub](https://github.com/your-repo) """)
add_feedback_system()
|
3. 使用统计和分析
集成Google Analytics:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| def add_google_analytics(): """添加Google Analytics""" analytics_code = """ <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=YOUR_GA_ID"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'YOUR_GA_ID'); </script> """ components.html(analytics_code, height=0)
if 'STREAMLIT_SHARING' in os.environ: add_google_analytics()
|
故障排除和常见问题
问题1:依赖安装失败
解决方案:检查requirements.txt格式,确保所有包名正确
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| def check_dependencies(): """检查依赖是否安装""" required_packages = ['streamlit', 'python-office', 'popdf'] missing_packages = [] for package in required_packages: try: __import__(package) except ImportError: missing_packages.append(package) if missing_packages: st.error(f"缺少依赖包: {', '.join(missing_packages)}") st.info("请检查requirements.txt文件") return False return True
|
问题2:文件上传大小限制
解决方案:配置Streamlit的文件大小限制
1 2 3
| [server] maxUploadSize = 500
|
问题3:内存不足
解决方案:优化内存使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| def optimize_memory_usage(): """优化内存使用""" import gc def cleanup_temp_files(): temp_dir = setup_production() for file in Path(temp_dir).glob("*.tmp"): try: file.unlink() except: pass gc.collect() return cleanup_temp_files
cleanup = optimize_memory_usage()
|
实战案例:我的部署经验分享
在部署python-office官方工具网站时,我遇到了几个典型问题:
案例1:PDF转换超时
问题:大文件转换时Streamlit Cloud超时
解决方案:
1 2 3 4 5 6 7 8 9
| def handle_large_files(uploaded_file, chunk_size=1024*1024): """分块处理大文件""" file_size = len(uploaded_file.getvalue()) if file_size > 10 * 1024 * 1024: st.warning("文件较大,转换可能需要更长时间...") progress_bar = st.progress(0)
|
案例2:临时文件清理
问题:服务器磁盘空间不足
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import atexit
@atexit.register def cleanup_on_exit(): """程序退出时清理临时文件""" temp_dir = setup_production() for file in Path(temp_dir).glob("*"): if file.is_file(): try: file.unlink() except: pass
|
部署检查清单
在部署前,使用这个检查清单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| def deployment_checklist(): """部署前检查""" checklist = { "requirements.txt": os.path.exists("requirements.txt"), "config.toml": os.path.exists(".streamlit/config.toml"), "README.md": os.path.exists("README.md"), "GitHub仓库": check_github_repo(), "代码测试": run_basic_tests(), } st.subheader("部署检查清单") for item, status in checklist.items(): if status: st.success(f"✅ {item}") else: st.error(f"❌ {item}") return all(checklist.values())
def check_github_repo(): """检查GitHub仓库配置""" try: result = os.popen("git remote -v").read() return "github.com" in result except: return False
def run_basic_tests(): """运行基本测试""" try: import streamlit, python_office, popdf return True except: return False
|
实战作业:完成你的全球部署
任务:将你的AI工具网站部署到云端
要求:
- 部署到Streamlit Cloud
- 配置自定义域名(可选)
- 添加用户反馈系统
- 集成基本的使用统计
部署步骤:
- 准备所有必要的配置文件
- 创建GitHub仓库并推送代码
- 在Streamlit Cloud部署
- 测试所有功能
- 分享给你的朋友使用
进阶挑战:
- 配置自定义域名
- 添加HTTPS证书
- 设置自动备份
- 集成监控告警
程序员晚枫的部署心得
在部署了数十个python-office相关项目后,我总结了几个关键经验:
- 简单至上:选择最简单的部署方案,减少维护成本
- 监控先行:部署前就要考虑好监控和日志
- 渐进优化:先让网站跑起来,再逐步优化性能
- 用户第一:始终从用户角度考虑易用性
记住:部署不是终点,而是服务的起点。
下一讲预告
在第8讲中,我们将深入代码优化和调试技巧,学习如何让你的应用运行得更稳定、更高效!
本节课的收获:
- 掌握了Streamlit Cloud部署流程
- 学会了生产环境优化技巧
- 了解了故障排除方法
- 能够将本地应用转化为全球服务
课后任务:
- 完成网站部署并获得可访问链接
- 邀请至少3个朋友测试使用
- 收集反馈并进行优化
- 在课程群分享你的网站链接
我是程序员晚枫,我们下一讲见!
本文涉及的部署方案已在python-office多个生产环境中验证,稳定可靠。遇到部署问题,欢迎在课程群中交流讨论。
关于课程
我会尽我所能,把AI编程的知识分享给你。
因为对于我来说,给小白的《30讲 · AI编程训练营》是我能力范围内,最有机会抓住AI趋势的一套课。
前3讲可以试听,试听链接:https://www.bilibili.com/cheese/play/ss982042944
所以这套课的内容,只会比我承诺的更多,不会更少;只会比你预期的更用心,不会割韭菜。
同时,我也欢迎大家找我沟通,我会尽力解答你的问题。

联系作者
程序员晚枫专注AI编程培训,小白看完他和图灵社区合作的教程《30讲 · AI编程训练营》就能上手做AI项目。