在轻量应用服务器(如腾讯云轻量、阿里云ECS等)上部署 Python 后端以支持小程序访问,核心是搭建一个可被公网访问的 HTTP/HTTPS 服务。以下是完整、安全的部署流程:
一、前置准备
-
服务器环境
- 操作系统:Ubuntu 20.04+ / CentOS 7+ / Debian 10+
- 已安装 Python 3.8+(推荐通过
pyenv或系统包管理安装) - 开放端口:80(HTTP)、443(HTTPS),若用非标准端口需放行防火墙
- 域名解析:将域名 A 记录指向服务器公网 IP
-
小程序配置
- 在微信公众平台获取 AppID 和 Secret
- 设置合法域名(需在后台配置“开发设置 → 开发管理 → 开发设置”中添加服务器域名)
二、Python 后端框架选择(推荐)
- Flask:轻量灵活,适合快速开发
- FastAPI:高性能、自动文档,适合新项目
- Django:功能全面,适合复杂业务
示例使用 FastAPI + Uvicorn(生产级推荐):
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install fastapi uvicorn python-jose[cryptography] pydantic
三、编写基础后端代码(fastapi_app.py)
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
import json
app = FastAPI()
# 允许小程序跨域访问(关键!)
app.add_middleware(
CORSMiddleware,
allow_origins=["https://your-domain.com"], # 替换为实际域名
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/health")
def health_check():
return {"status": "ok"}
@app.post("/login")
async def login(request: Request):
data = await request.json()
code = data.get("code")
if not code:
return {"error": "缺少 code"}, 400
# TODO: 调用微信接口换取 openid/session_key
# response = requests.post("https://api.weixin.qq.com/sns/jscode2session", params={...})
return {
"openid": "mock_openid_123",
"session_key": "mock_session_key"
}
✅ 注意:真实项目中必须实现微信登录逻辑(使用
requests调用微信 API),并安全存储 session。
四、部署与反向X_X(Nginx + HTTPS)
1. 启动 FastAPI 服务
uvicorn fastapi_app:app --host 127.0.0.1 --port 8000 --workers 4
2. 安装 Nginx 并配置反向X_X
sudo apt update && sudo apt install nginx -y
编辑 /etc/nginx/sites-available/myapp:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
# 支持 WebSocket(如需实时通信)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启用站点并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
3. 申请 SSL 证书(Let’s Encrypt)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
# 按提示完成验证,自动配置 HTTPS
✅ 小程序强制要求 HTTPS,且域名必须在微信公众平台备案并添加为合法域名。
五、安全加固建议
| 项目 | 措施 |
|---|---|
| 认证 | 使用 JWT 或 Redis 存储 session,避免明文传输敏感信息 |
| 限流 | Nginx 层配置 limit_req_zone 防止刷接口 |
| 日志 | 开启 Nginx 访问日志 + Python 错误日志,定期审计 |
| 防火墙 | 仅开放 80/443,SSH 改用密钥登录并限制 IP |
| 更新 | 定期 apt upgrade 和 pip install --upgrade 依赖 |
六、测试验证
- 使用 Postman 或 curl 测试接口:
curl -X POST https://your-domain.com/login -H "Content-Type: application/json" -d '{"code":"mock_code"}' - 在小程序中发起请求,确认无 CORS 错误且能正常获取数据。
- 检查微信公众平台「开发设置」中是否显示“服务器域名校验通过”。
可选优化方案
- 使用 Docker 容器化部署(便于迁移和扩展)
- 结合 Supervisor 管理进程守护
- 接入 PM2(Node.js 生态常用,但 Python 也可用类似工具如
gunicorn) - 数据库读写分离、缓存层(Redis)提升性能
需要我提供 Dockerfile、Gunicorn 配置或微信小程序前端对接示例吗?
CLOUD云计算