Files
DP/tempdocs/线上部署指南.md

635 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DesignerCEP 线上部署指南
## 📋 部署架构概览
本项目包含三个主要部分:
1. **Shell登录壳**: 本地 CEP 扩展,负责登录和版本管理
2. **Core核心应用**: 通过后端服务器提供的 Web 应用
3. **Backend后端服务**: FastAPI 服务器,提供 API 和静态文件服务
---
## 🚀 一、前端部署
### 1.1 构建前准备
#### ✅ 关闭生产环境日志
`main.ts` 或应用入口添加:
```typescript
import { logger } from '@/utils/logger';
// 生产环境关闭日志
if (import.meta.env.PROD) {
logger.disable();
} else {
logger.enable();
}
```
或者在 `logger.ts` 中修改默认状态:
```typescript
class Logger {
// 生产环境默认关闭,开发环境默认开启
private _enabled: boolean = import.meta.env.DEV;
// ...
}
```
#### ✅ 配置生产环境 API 地址
创建 `.env.production` 文件:
```env
# 生产环境配置
VITE_API_BASE_URL=https://your-domain.com/api/v1
VITE_API_SERVER=https://your-domain.com
```
修改 `config.ts`
```typescript
export const config = {
// 从环境变量读取
apiBaseUrl: import.meta.env.VITE_API_BASE_URL || 'http://127.0.0.1:8000/api/v1',
apiServer: import.meta.env.VITE_API_SERVER || 'http://127.0.0.1:8000',
// ...其他配置
};
```
### 1.2 构建命令
```bash
# 进入 Designer 目录
cd Designer
# 安装依赖(如果还没安装)
npm install
# 构建生产版本
npm run build
# 构建完成后,产物在 dist/ 目录
```
### 1.3 构建产物说明
```
Designer/dist/
├── Shell/ # Shell 登录壳(本地 CEP 扩展使用)
│ ├── index.html
│ ├── assets/
│ └── ...
└── Designer/ # Core 核心应用(上传到服务器)
├── index.html
├── assets/
└── ...
```
**重要说明:**
- `dist/Shell/` → 需要部署到服务器的两个地方:
- 打包为 `.zip` 供 CEP 扩展下载:`static/shell/shell-{version}.zip`
- 部署为在线登录页:`static/shell/` (直接部署文件)
- `dist/Designer/` → 上传到服务器的 `static/core/{version}/` 目录
---
## 🖥️ 二、后端部署
### 2.1 服务器要求
- **操作系统**: Linux (推荐 Ubuntu 20.04+) 或 Windows Server
- **Python 版本**: Python 3.9+
- **内存**: 最低 1GB推荐 2GB+
- **磁盘**: 至少 10GB 可用空间(用于存储版本文件)
- **域名**: 需要一个域名并配置 DNS
- **SSL 证书**: 建议使用 Let's Encrypt 免费证书
### 2.2 部署步骤
#### 步骤 1: 上传代码
```bash
# 方式 1: Git 克隆(推荐)
ssh user@your-server
cd /var/www
git clone https://your-repo-url.git DesignerCEP
cd DesignerCEP/Server
# 方式 2: SCP 上传
# 本地执行
scp -r Server/ user@your-server:/var/www/DesignerCEP/
```
#### 步骤 2: 创建虚拟环境
```bash
cd /var/www/DesignerCEP/Server
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate # Linux
# 或
venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
```
#### 步骤 3: 配置环境变量
创建 `.env` 文件:
```bash
# /var/www/DesignerCEP/Server/.env
# 基础配置
PROJECT_NAME=DesignerCEP
VERSION=1.0.0
DEBUG=False
# 安全配置
SECRET_KEY=your-super-secret-key-change-this-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=43200
# 数据库配置(如果使用)
DATABASE_URL=sqlite:///./designer.db
# 或使用 PostgreSQL/MySQL
# DATABASE_URL=postgresql://user:password@localhost/dbname
# CORS 配置
ALLOWED_ORIGINS=https://your-domain.com,https://www.your-domain.com
# 静态文件路径
STATIC_DIR=/var/www/DesignerCEP/Server/static
SHELL_DIR=/var/www/DesignerCEP/Server/static/shell
CORE_DIR=/var/www/DesignerCEP/Server/static/core
```
#### 步骤 4: 准备静态文件目录
```bash
# 创建目录结构
mkdir -p static/shell
mkdir -p static/core/1.0.0
# 1. 上传 Shell 在线登录页(用于网页访问)
scp -r Designer/dist/Shell/* user@your-server:/var/www/DesignerCEP/Server/static/shell/
# 2. 打包 Shell 供 CEP 扩展下载
cd Designer/dist
zip -r shell-1.0.0.zip Shell/
scp shell-1.0.0.zip user@your-server:/var/www/DesignerCEP/Server/static/downloads/
cd ../..
# 3. 上传 Core 构建产物
scp -r Designer/dist/Designer/* user@your-server:/var/www/DesignerCEP/Server/static/core/1.0.0/
```
目录结构应该是:
```
Server/
├── app/
├── static/
│ ├── shell/ # Shell 在线登录页
│ │ ├── index.html
│ │ ├── assets/
│ │ └── ...
│ ├── downloads/ # 下载文件(供 CEP 扩展)
│ │ └── shell-1.0.0.zip
│ └── core/
│ └── 1.0.0/ # Core 核心应用
│ ├── index.html
│ ├── assets/
│ └── ...
├── .env
├── requirements.txt
└── main.py
```
**说明:**
- `static/shell/` - Shell 在线登录页,用户退出登录后访问这里
- `static/downloads/shell-1.0.0.zip` - 供 CEP 扩展首次下载的 Shell 安装包
- `static/core/1.0.0/` - Core 核心应用,用户登录后使用
#### 步骤 5: 使用 Gunicorn 运行(生产环境)
安装 Gunicorn
```bash
pip install gunicorn uvicorn[standard]
```
创建启动脚本 `start.sh`:
```bash
#!/bin/bash
cd /var/www/DesignerCEP/Server
source venv/bin/activate
gunicorn app.main:app \
--workers 4 \
--worker-class uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000 \
--access-logfile logs/access.log \
--error-logfile logs/error.log \
--daemon
```
```bash
chmod +x start.sh
./start.sh
```
#### 步骤 6: 使用 Systemd 管理服务(推荐)
创建服务文件 `/etc/systemd/system/designer-cep.service`:
```ini
[Unit]
Description=DesignerCEP Backend Service
After=network.target
[Service]
Type=notify
User=www-data
Group=www-data
WorkingDirectory=/var/www/DesignerCEP/Server
Environment="PATH=/var/www/DesignerCEP/Server/venv/bin"
ExecStart=/var/www/DesignerCEP/Server/venv/bin/gunicorn \
--workers 4 \
--worker-class uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000 \
app.main:app
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
# 重载 systemd
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start designer-cep
# 设置开机自启
sudo systemctl enable designer-cep
# 查看状态
sudo systemctl status designer-cep
# 查看日志
sudo journalctl -u designer-cep -f
```
---
## 🔧 三、Nginx 反向代理配置
### 3.1 安装 Nginx
```bash
sudo apt update
sudo apt install nginx
```
### 3.2 配置 Nginx
创建配置文件 `/etc/nginx/sites-available/designer-cep`:
```nginx
# HTTP 重定向到 HTTPS
server {
listen 80;
listen [::]:80;
server_name your-domain.com www.your-domain.com;
# Let's Encrypt 验证
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# 重定向到 HTTPS
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS 配置
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-domain.com www.your-domain.com;
# SSL 证书配置
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 日志
access_log /var/log/nginx/designer-cep-access.log;
error_log /var/log/nginx/designer-cep-error.log;
# 客户端最大上传大小(用于大文件上传)
client_max_body_size 100M;
# API 代理
location /api/ {
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";
}
# Shell 在线登录页
location /shell/ {
alias /var/www/DesignerCEP/Server/static/shell/;
try_files $uri $uri/ /shell/index.html;
# HTML 不缓存,资源文件缓存
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 7d;
add_header Cache-Control "public, immutable";
}
}
# 下载文件(供 CEP 扩展下载)
location /downloads/ {
alias /var/www/DesignerCEP/Server/static/downloads/;
autoindex off;
# 强制下载
add_header Content-Disposition "attachment";
# 缓存配置
expires 7d;
add_header Cache-Control "public, immutable";
}
# Core 静态文件
location /core/ {
alias /var/www/DesignerCEP/Server/static/core/;
try_files $uri $uri/ =404;
# SPA 路由支持(如果需要)
# try_files $uri $uri/ /core/$1/index.html;
# 缓存配置
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
}
# 健康检查
location /health {
proxy_pass http://127.0.0.1:8000/health;
access_log off;
}
}
```
启用配置:
```bash
# 创建软链接
sudo ln -s /etc/nginx/sites-available/designer-cep /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重载 Nginx
sudo systemctl reload nginx
```
### 3.3 配置 SSL 证书Let's Encrypt
```bash
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# 自动续期(已自动配置 cron
sudo certbot renew --dry-run
```
---
## 🔒 四、安全配置
### 4.1 防火墙配置
```bash
# 允许 SSH
sudo ufw allow 22/tcp
# 允许 HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status
```
### 4.2 生产环境安全检查清单
- [ ] 修改 `SECRET_KEY` 为随机强密钥
- [ ] 设置 `DEBUG=False`
- [ ] 配置正确的 `ALLOWED_ORIGINS`
- [ ] 使用 HTTPSSSL 证书)
- [ ] 配置数据库(不使用 SQLite
- [ ] 设置文件上传大小限制
- [ ] 配置日志轮转
- [ ] 关闭前端日志输出
- [ ] 定期备份数据库和用户数据
- [ ] 配置监控和告警
---
## 📦 五、版本更新流程
### 5.1 发布新版本
```bash
# 1. 本地构建新版本
cd Designer
npm run build
# 2. 上传到服务器
scp -r dist/Designer/* user@your-server:/var/www/DesignerCEP/Server/static/core/1.0.1/
# 3. 更新后端版本配置
# 在后端 API 中更新 current_version 为 1.0.1
```
### 5.2 版本管理建议
```
static/core/
├── 1.0.0/ # 旧版本保留
├── 1.0.1/ # 当前版本
└── 1.0.2/ # 新版本
```
后端 API 返回最新版本号,客户端自动下载更新。
---
## 🔍 六、监控与日志
### 6.1 日志管理
创建日志轮转配置 `/etc/logrotate.d/designer-cep`:
```
/var/www/DesignerCEP/Server/logs/*.log {
daily
rotate 30
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload designer-cep > /dev/null 2>&1 || true
endscript
}
```
### 6.2 性能监控
推荐使用:
- **PM2**: 进程管理和监控
- **Prometheus + Grafana**: 指标监控
- **Sentry**: 错误追踪
- **ELK Stack**: 日志分析
---
## 🚀 七、快速部署脚本
创建 `deploy.sh` 一键部署脚本:
```bash
#!/bin/bash
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} DesignerCEP 自动部署脚本${NC}"
echo -e "${GREEN}========================================${NC}"
# 1. 拉取最新代码
echo -e "\n${YELLOW}[1/6] 拉取最新代码...${NC}"
git pull origin main
# 2. 构建前端
echo -e "\n${YELLOW}[2/6] 构建前端...${NC}"
cd Designer
npm install
npm run build
cd ..
# 3. 上传 Core 到服务器
echo -e "\n${YELLOW}[3/6] 上传 Core 到服务器...${NC}"
VERSION=$(node -p "require('./Designer/package.json').version")
ssh user@your-server "mkdir -p /var/www/DesignerCEP/Server/static/core/$VERSION"
scp -r Designer/dist/Designer/* user@your-server:/var/www/DesignerCEP/Server/static/core/$VERSION/
# 4. 更新后端代码
echo -e "\n${YELLOW}[4/6] 更新后端代码...${NC}"
ssh user@your-server "cd /var/www/DesignerCEP/Server && git pull origin main"
# 5. 重启后端服务
echo -e "\n${YELLOW}[5/6] 重启后端服务...${NC}"
ssh user@your-server "sudo systemctl restart designer-cep"
# 6. 检查服务状态
echo -e "\n${YELLOW}[6/6] 检查服务状态...${NC}"
ssh user@your-server "sudo systemctl status designer-cep --no-pager"
echo -e "\n${GREEN}========================================${NC}"
echo -e "${GREEN} 部署完成!${NC}"
echo -e "${GREEN} 版本: $VERSION${NC}"
echo -e "${GREEN}========================================${NC}"
```
使用方法:
```bash
chmod +x deploy.sh
./deploy.sh
```
---
## ❓ 八、常见问题
### Q1: CORS 跨域问题
**A**: 在后端 `.env` 中正确配置 `ALLOWED_ORIGINS`
### Q2: 静态文件 404
**A**: 检查 Nginx 配置中的 `alias` 路径是否正确。
### Q3: API 请求超时
**A**: 调整 Nginx `proxy_read_timeout` 和 Gunicorn `timeout` 参数。
### Q4: 前端日志仍然输出
**A**: 确保在生产环境中调用了 `logger.disable()`
### Q5: 版本更新后客户端没反应
**A**: 检查后端 API 返回的版本号是否正确,清除客户端缓存。
---
## 📞 技术支持
如遇到部署问题,请检查:
1. 后端日志:`sudo journalctl -u designer-cep -f`
2. Nginx 日志:`sudo tail -f /var/log/nginx/designer-cep-error.log`
3. 系统资源:`htop``top`
---
**最后更新**: 2024-12-17