3.4 KiB
3.4 KiB
部署说明
本文档介绍如何将KaMiXiTong系统部署到生产环境并通过域名访问。
域名访问配置
问题描述
在本地开发环境中,系统默认通过 http://localhost:5000 访问。当部署到服务器并通过域名访问时,前端页面中的接口调用可能会仍然指向 localhost:5000,导致接口调用失败。
解决方案
系统已通过修改前端JavaScript中的 apiRequest 函数来自动检测当前访问的主机并构建正确的API调用地址。
前端JavaScript现在会使用 window.location.origin 来获取当前访问的完整域名,并自动构建完整的API URL。
配置Nginx反向代理
推荐使用Nginx作为反向代理服务器。以下是一个Nginx配置示例:
server {
listen 80;
server_name your-domain.com;
# 重定向到HTTPS(可选)
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com;
# SSL证书配置
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 代理到Flask应用
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
# 静态文件直接由Nginx处理
location /static/ {
alias /path/to/your/app/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
环境变量配置
在生产环境中,建议通过环境变量来配置应用:
# 复制示例配置文件
cp .env.example .env
# 编辑配置文件
nano .env
重要的环境变量包括:
FLASK_ENV: 设置为productionSECRET_KEY: 设置为强随机字符串DATABASE_URL: 数据库连接URLHOST: 监听地址,生产环境建议设置为0.0.0.0
使用Gunicorn启动应用
在生产环境中,推荐使用Gunicorn作为WSGI服务器:
# 安装Gunicorn
pip install gunicorn
# 启动应用
gunicorn -w 4 -b 127.0.0.1:5000 run:app
使用Systemd管理服务(Linux)
创建Systemd服务文件:
# /etc/systemd/system/kamaxitong.service
[Unit]
Description=KaMiXiTong Service
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/your/app
Environment="FLASK_ENV=production"
ExecStart=/path/to/your/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 run:app
Restart=always
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable kamaxitong.service
sudo systemctl start kamaxitong.service
常见问题
Q: 前端页面能正常访问,但API调用失败怎么办?
A: 检查以下几点:
- 确认Nginx配置正确,特别是
proxy_set_header指令 - 确认Flask应用监听地址设置为
0.0.0.0 - 检查浏览器开发者工具中的网络请求,确认API请求的URL是否正确
Q: 如何确认域名配置是否正确?
A: 可以通过以下方式检查:
- 在浏览器中打开应用,按F12打开开发者工具
- 切换到Network标签页
- 刷新页面,观察API请求的URL是否为域名地址而非localhost
Q: 静态文件无法加载怎么办?
A: 确保Nginx配置中正确设置了静态文件的location块,或者让Flask应用处理静态文件。