github star gitee star atomgit star PyPI Downloads AI编程 AI交流群

大家好,这里是程序员晚枫,正在all in AI编程实战

第7讲:全球部署:将你的网站发布到云端,让全世界访问

大家好,我是程序员晚枫。在上一讲中,我们使用Streamlit创建了功能丰富的AI工具网站。今天,我们要完成最重要的一步:将网站部署到云端,让全世界的人都能访问和使用你的作品!

为什么需要云端部署?

在维护python-office项目的过程中,我经常收到用户的反馈:

"晚枫,我在本地运行得很好,但怎么让同事也能用呢?总不能让他们都安装Python环境吧?"

云端部署的价值在于:

  • 全球访问:任何有网络的地方都能使用
  • 零配置:用户无需安装任何软件
  • 自动更新:功能更新对用户无感知
  • 专业形象:拥有自己的专属域名和网站

技术选型:为什么选择Streamlit Cloud + Vercel组合?

经过大量实践测试,我推荐这个黄金组合:

  • Streamlit Cloud:专为Streamlit应用优化,部署简单
  • Vercel:全球CDN,访问速度快,免费额度充足
  • GitHub:代码版本管理,与部署平台无缝集成

环境准备

确保你已经完成以下准备:

1
2
3
4
5
6
# 检查必要的文件
ls -la
# 应该看到:
# - app.py # 你的Streamlit主文件
# - requirements.txt # 依赖列表
# - README.md # 项目说明

实战: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仓库部署(推荐)

  1. 创建GitHub仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 初始化Git仓库
    git init
    git add .
    git commit -m "初始提交:AI办公工具大全"

    # 推送到GitHub
    git remote add origin https://github.com/你的用户名/你的仓库名.git
    git branch -M main
    git push -u origin main
  2. 部署到Streamlit Cloud

    • 访问 share.streamlit.io
    • 使用GitHub账号登录
    • 点击 "New app"
    • 选择仓库、分支和主文件路径
    • 点击 "Deploy"

方法二:手动部署(备用)

如果你的代码不在GitHub上,可以使用以下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 在app.py中添加部署检查
import os
import streamlit as st

def check_environment():
"""检查运行环境"""
if 'STREAMLIT_SHARING' in os.environ:
st.sidebar.success("运行在Streamlit Cloud环境")
else:
st.sidebar.info("运行在本地环境")

# 在main函数中调用
check_environment()

第三步:优化部署配置

创建 .streamlit/secrets.toml 用于管理敏感信息:

1
2
3
# 在Streamlit Cloud中通过Settings设置这些值
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部署步骤

  1. 创建 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"
}
]
}
  1. 创建 api/index.py 用于Vercel
1
2
3
4
5
6
from app import main
import streamlit as st

# Vercel需要这个文件作为入口点
if __name__ == "__main__":
main()
  1. 部署到Vercel
    1
    2
    3
    4
    5
    6
    # 安装Vercel CLI
    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)
""")

# 在main函数中调用
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
# 在.streanlit/config.toml中添加
[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: # 10MB
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:
# 检查git远程仓库
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工具网站部署到云端

要求

  1. 部署到Streamlit Cloud
  2. 配置自定义域名(可选)
  3. 添加用户反馈系统
  4. 集成基本的使用统计

部署步骤

  1. 准备所有必要的配置文件
  2. 创建GitHub仓库并推送代码
  3. 在Streamlit Cloud部署
  4. 测试所有功能
  5. 分享给你的朋友使用

进阶挑战

  • 配置自定义域名
  • 添加HTTPS证书
  • 设置自动备份
  • 集成监控告警

程序员晚枫的部署心得

在部署了数十个python-office相关项目后,我总结了几个关键经验:

  1. 简单至上:选择最简单的部署方案,减少维护成本
  2. 监控先行:部署前就要考虑好监控和日志
  3. 渐进优化:先让网站跑起来,再逐步优化性能
  4. 用户第一:始终从用户角度考虑易用性

记住:部署不是终点,而是服务的起点。

下一讲预告

在第8讲中,我们将深入代码优化和调试技巧,学习如何让你的应用运行得更稳定、更高效!


本节课的收获:

  • 掌握了Streamlit Cloud部署流程
  • 学会了生产环境优化技巧
  • 了解了故障排除方法
  • 能够将本地应用转化为全球服务

课后任务:

  1. 完成网站部署并获得可访问链接
  2. 邀请至少3个朋友测试使用
  3. 收集反馈并进行优化
  4. 在课程群分享你的网站链接

我是程序员晚枫,我们下一讲见!


本文涉及的部署方案已在python-office多个生产环境中验证,稳定可靠。遇到部署问题,欢迎在课程群中交流讨论。

关于课程

我会尽我所能,把AI编程的知识分享给你。

因为对于我来说,给小白的《30讲 · AI编程训练营》是我能力范围内,最有机会抓住AI趋势的一套课。

前3讲可以试听,试听链接:https://www.bilibili.com/cheese/play/ss982042944

所以这套课的内容,只会比我承诺的更多,不会更少;只会比你预期的更用心,不会割韭菜。

同时,我也欢迎大家找我沟通,我会尽力解答你的问题。

联系作者

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