Files
DP/tempdocs/生产环境部署实操指南.md

354 lines
9.2 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 生产环境部署实操指南
本文档为您提供从零开始部署 DesignerCEP 到 Linux 服务器Ubuntu/Debian/CentOS的完整操作步骤。
---
## 📋 1. 准备工作
### 1.1 服务器与域名
- **服务器**: 建议 Ubuntu 20.04+ (已购买)
- **域名**: `your-domain.com` (已购买)
- **DNS 解析**: 请将域名 A 记录解析到服务器公网 IP。
### 1.2 本地文件准备
在您的电脑上创建一个 `deployment` 文件夹,用于存放准备上传的文件。
#### A. 后端代码
复制 `Server` 目录下的以下文件/文件夹到 `deployment/Server`
- `app/` (文件夹)
- `requirements.txt`
- `.env` (稍后修改)
- `main.py` (如果有入口文件在根目录,或者确认入口是 `app.main`)
#### B. 前端构建
1. **配置生产环境地址**
修改 `Designer/.env.production`
```env
VITE_API_SERVER=https://your-domain.com
```
2. **构建项目**
在 `Designer` 目录下运行:
```bash
npm run build
```
这将生成 `Designer/dist` 目录,包含 `Shell` 和 `Designer` (Core) 两个文件夹。
3. **打包 Shell**
将 `Designer/dist/Shell` 文件夹压缩为 `shell-1.0.1.zip` (版本号请参考 package.json)。
#### C. 最终上传清单
您的 `deployment` 文件夹结构应如下:
```
deployment/
├── Server/ # 后端代码
│ ├── app/
│ └── requirements.txt
├── Shell/ # 前端 Shell (来自 dist/Shell)
├── Core/ # 前端 Core (来自 dist/Designer)
└── shell-1.0.1.zip # 压缩包 (来自 dist/Shell)
```
---
## 🖥️ 2. 服务器环境安装
使用 SSH 登录您的服务器:
```bash
ssh root@your-server-ip
```
### 2.1 安装基础软件
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y python3 python3-pip python3-venv unzip curl
# 安装 Caddy (Web 服务器)
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
```
---
## 📂 3. 上传与部署文件
### 3.1 创建目录结构
```bash
# 创建应用根目录
sudo mkdir -p /var/www/DesignerCEP/Server
# 创建静态文件目录
sudo mkdir -p /var/www/DesignerCEP/Server/static/shell
sudo mkdir -p /var/www/DesignerCEP/Server/static/core/1.0.1
sudo mkdir -p /var/www/DesignerCEP/Server/static/downloads
# 设置权限
sudo chown -R www-data:www-data /var/www/DesignerCEP
sudo chmod -R 755 /var/www/DesignerCEP
```
### 3.2 上传文件 (在本地执行)
打开新的终端窗口(本地),执行上传命令:
```bash
# 假设您在 deployment 目录的上级目录
cd path/to/deployment
# 1. 上传后端
scp -r Server/* root@your-server-ip:/var/www/DesignerCEP/Server/
# 2. 上传 Shell 静态文件
scp -r Shell/* root@your-server-ip:/var/www/DesignerCEP/Server/static/shell/
# 3. 上传 Core 静态文件 (注意:这里是上传特定版本)
# 如果您有多个版本,请重复此步骤,例如 1.0.0, 1.0.1 等
scp -r Core/* root@your-server-ip:/var/www/DesignerCEP/Server/static/core/1.0.1/
# 4. 上传 Shell 压缩包
scp shell-1.0.1.zip root@your-server-ip:/var/www/DesignerCEP/Server/static/downloads/
# 5. 上传历史版本 (如果您有 archives 文件夹)
# 假设您本地有一个 archives 文件夹包含 core-v1.0.0.zip 等
# scp -r archives/* root@your-server-ip:/var/www/DesignerCEP/Server/archives/
# 并在服务器上解压到 /var/www/DesignerCEP/Server/static/core/
```
### 3.3 批量上传历史版本(可选)
如果您需要一次性部署多个历史版本,可以按照以下步骤操作:
1. **在本地准备版本**
将所有需要部署的 `core-vX.X.X.zip` 文件放在一个文件夹中,例如 `all_versions`。
2. **上传到服务器**
```bash
scp -r all_versions/*.zip root@your-server-ip:/var/www/DesignerCEP/Server/archives/
```
3. **在服务器上解压**
登录服务器,运行以下命令批量解压:
```bash
cd /var/www/DesignerCEP/Server/archives
# 安装 unzip (如果未安装)
sudo apt install unzip
# 遍历解压所有 core zip 文件到 static/core
for f in core-v*.zip; do
# 提取版本号 (假设文件名格式为 core-v1.0.0.zip)
version=$(echo "$f" | sed 's/core-v//' | sed 's/.zip//')
echo "Deploying version $version..."
sudo mkdir -p "/var/www/DesignerCEP/Server/static/core/$version"
sudo unzip -o "$f" -d "/var/www/DesignerCEP/Server/static/core/$version"
done
# 修正权限
sudo chown -R www-data:www-data /var/www/DesignerCEP/Server/static/core
```
### 3.4 修正权限 (服务器端)
```bash
sudo chown -R www-data:www-data /var/www/DesignerCEP
```
---
## ⚙️ 4. 后端服务配置
### 4.1 安装 Python 依赖
```bash
cd /var/www/DesignerCEP/Server
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
pip install gunicorn uvicorn[standard]
```
### 4.2 配置环境变量
创建 `.env` 文件:
```bash
nano .env
```
粘贴以下内容(**已为您预填好域名**
```env
ENV=production
PROJECT_NAME=DesignerCEP
API_V1_STR=/api/v1
SECRET_KEY=generate-a-secure-random-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=43200
DATABASE_URL=sqlite:///./designercep.db
# 关键:允许 CORS 的域名
ALLOWED_ORIGINS=https://aidg168.uk,https://www.aidg168.uk,https://backend.aidg168.uk
# 邮箱配置 (可选,如果您需要发送邮件)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
EMAILS_FROM_EMAIL=your-email@gmail.com
EMAILS_FROM_NAME=DesignerCEP
```
### 4.3 配置 Systemd 服务
创建服务文件:
```bash
sudo nano /etc/systemd/system/designer-cep.service
```
粘贴内容:
```ini
[Unit]
Description=DesignerCEP Backend
After=network.target
[Service]
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 app.main:app -w 4 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:8000
Restart=always
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable designer-cep
sudo systemctl start designer-cep
sudo systemctl status designer-cep # 检查是否显示 Active: active (running)
```
---
## 🌐 5. Caddy 配置 (HTTPS & 反向代理)
**⚠️ 关键提示Cloudflare SSL 模式必须设置为 Full (Strict)**
编辑 Caddy 配置文件:
```bash
sudo nano /etc/caddy/Caddyfile
```
**清空原有内容,粘贴以下内容**
```caddy
# ========== 主域名 (Shell & Core & Downloads) ==========
aidg168.uk, www.aidg168.uk {
# 1. Shell 静态页面
handle /shell/* {
root * /var/www/DesignerCEP/Server/static/shell
try_files {path} {path}/ /shell/index.html
file_server
}
# 2. Core 核心应用
handle /core/* {
root * /var/www/DesignerCEP/Server/static/core
file_server
}
# 3. 下载文件
handle /downloads/* {
root * /var/www/DesignerCEP/Server/static/downloads
file_server
}
# 4. 根路径跳转到 Shell
handle / {
redir /shell/ permanent
}
# 5. 压缩与日志
encode gzip
log {
output file /var/log/caddy/designer-cep.log
}
}
# ========== API 专用域名 (FastAPI) ==========
backend.aidg168.uk {
# 1. API 代理到后端 (FastAPI)
reverse_proxy 127.0.0.1:8000
# 2. 压缩与日志
encode gzip
log {
output file /var/log/caddy/designer-cep-api.log
}
}
```
重启 Caddy
```bash
sudo systemctl restart caddy
sudo systemctl status caddy
```
---
## 🔒 6. 安全与网络检查 (必做!)
**1. 确认 Cloudflare SSL 模式**
- 登录 Cloudflare 控制台 -> SSL/TLS -> Overview
- **必须选择**: `Full (Strict)`
- *原因*: Caddy 会自动申请 Let's Encrypt 证书Cloudflare 需要信任这个有效证书。
**2. 确认防火墙端口**
在服务器上执行:
```bash
sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
```
**3. 确认 Caddy 监听状态**
在服务器上执行:
```bash
sudo ss -lntp | grep 443
```
*预期输出*: 应该看到 `caddy` 进程正在监听 `*:443`。
**4. 快速自检 (在服务器上执行)**
```bash
# 1. 检查 DNS (应返回 Cloudflare IP)
dig backend.aidg168.uk +short
# 2. 本机测试 API (绕过 Cloudflare)
curl -v http://127.0.0.1:8000/health
# 3. 域名测试 (走公网)
curl -I https://backend.aidg168.uk/health
```
---
## ✅ 7. 验证部署
打开浏览器访问:
1. **API 健康检查**: `https://backend.aidg168.uk/health` (应返回 `{"status": "healthy"}`)
2. **Shell 页面**: `https://aidg168.uk/shell/` (应显示登录页)
3. **Core 版本**: `https://aidg168.uk/core/1.0.1/index.html` (确认版本存在)
---
## 🔄 更新维护
### 更新前端
1. 本地 `npm run build`
2. 上传新文件到对应目录
3. 不需要重启服务
### 更新后端
1. 上传新代码到 `/var/www/DesignerCEP/Server`
2. 重启服务:`sudo systemctl restart designer-cep`