# 🚀 DesignerCEP 部署配置手册（子域名方案）

## 📐 架构概览

```
app.aidg168.uk         → 前端应用（Caddy 静态文件）
backend.aidg168.uk     → 后端 API（FastAPI）
```

---

## 🌐 第 1 步：配置 DNS（Cloudflare）

登录 Cloudflare，添加以下 DNS 记录：

| 类型 | 名称 | 内容 | 代理状态 | TTL |
|------|------|------|----------|-----|
| A | app | 103.97.201.136 | ☁️ 已代理 | 自动 |
| A | backend | 103.97.201.136 | ☁️ 已代理 | 自动 |
| A | @ | 103.97.201.136 | ☁️ 已代理 | 自动 |

> 注：103.97.201.136 是您的服务器 IP

---

## 📁 第 2 步：服务器目录准备

SSH 登录服务器：
```bash
ssh root@103.97.201.136
```

创建目录结构：
```bash
# 创建静态文件目录
sudo mkdir -p /var/www/DesignerCEP/Server/static/app

# 设置权限
sudo chown -R www-data:www-data /var/www/DesignerCEP
sudo chmod -R 755 /var/www/DesignerCEP
```

---

## ⚙️ 第 3 步：配置 Caddy

### 方法 A：直接使用提供的配置文件

```bash
# 1. 上传 Caddyfile 到服务器
# 在本地执行：
scp Caddyfile root@103.97.201.136:/etc/caddy/Caddyfile

# 2. SSH 登录服务器
ssh root@103.97.201.136

# 3. 验证配置
sudo caddy validate --config /etc/caddy/Caddyfile

# 4. 重启 Caddy
sudo systemctl restart caddy

# 5. 查看状态
sudo systemctl status caddy
```

### 方法 B：手动编辑

```bash
# 编辑 Caddy 配置
sudo nano /etc/caddy/Caddyfile

# 粘贴 Caddyfile 的内容（已在项目根目录）

# 保存后验证
sudo caddy validate --config /etc/caddy/Caddyfile

# 重启
sudo systemctl restart caddy
```

---

## 📤 第 4 步：上传前端文件

### 构建前端

在本地执行：
```bash
cd Designer

# 构建主应用
npm run build:core

# 输出在 dist_core/ 目录
```

### 上传到服务器

#### 方法 A：手动上传（临时测试）

```bash
# 在本地 Designer 目录执行
cd dist_core

# 上传所有文件到服务器
scp -r * root@103.97.201.136:/var/www/DesignerCEP/Server/static/app/
```

#### 方法 B：使用自动化脚本（推荐）

修改 `AdminTool/deploy_config.json`：
```json
{
  "host": "103.97.201.136",
  "port": "22",
  "username": "root",
  "password": "tuEj-jkaw-8mFe",
  "remote_path": "/var/www/DesignerCEP/Server/static"
}
```

然后执行：
```bash
cd AdminTool
python auto_deploy_core.py --version 1.0.0 --deploy --update-db
```

---

## 🔍 第 5 步：验证部署

### 5.1 检查文件是否上传成功

SSH 登录服务器：
```bash
ssh root@103.97.201.136

# 检查文件
ls -la /var/www/DesignerCEP/Server/static/app/

# 应该看到：
# index-core.html
# assets/
# CSInterface.js
# vite.svg
```

### 5.2 测试静态文件访问

在浏览器访问：
```
https://app.aidg168.uk/index-core.html
```

**期望结果**：能看到页面（即使可能显示错误，至少文件能加载）

### 5.3 测试 API

```bash
# 测试健康检查
curl https://backend.aidg168.uk/health

# 期望输出：
# {"status":"healthy","timestamp":"...","env":"production"}
```

### 5.4 测试完整流程

1. 在浏览器打开：`https://app.aidg168.uk/`
2. 应该能看到登录页面（如果已合并）
3. 或者 404（如果还没合并 Shell 和 Core）

---

## ⚠️ 当前问题

### 问题 1：文件名不匹配

您的 Core 构建输出是 `index-core.html`，但 Caddy 和浏览器默认访问 `index.html`。

**解决方法 A**：修改 Caddy 配置
```caddy
app.aidg168.uk {
    root * /var/www/DesignerCEP/Server/static/app
    
    # 指定默认文件
    try_files {path} /index-core.html
    
    file_server
}
```

**解决方法 B**（推荐）：修改构建配置
```typescript
// Designer/vite.config.ts
build: {
  outDir: 'dist_core',
  rollupOptions: {
    input: 'index-core.html'  // ← 改成 'index.html'
  }
}
```

### 问题 2：Shell 和 Core 还没合并

目前 Shell（登录）和 Core（主功能）还是分开的。

需要：
- 把登录页面路由加到 Core 应用
- 或者先测试用 Core 的主页

---

## 🎯 快速测试方案

### 临时方案：先让 Core 能访问

1. **修改 Caddy 配置**（访问 index-core.html）：
```caddy
app.aidg168.uk {
    root * /var/www/DesignerCEP/Server/static/app
    
    # 默认访问 index-core.html
    @root {
        path /
    }
    rewrite @root /index-core.html
    
    try_files {path} /index-core.html
    file_server
    
    encode gzip
}
```

2. **上传文件**：
```bash
cd Designer/dist_core
scp -r * root@103.97.201.136:/var/www/DesignerCEP/Server/static/app/
```

3. **访问测试**：
```
https://app.aidg168.uk/
```

---

## 📋 完整 Caddyfile 配置

复制这个内容到服务器的 `/etc/caddy/Caddyfile`：

```caddy
# ==================== DesignerCEP Caddy 配置 ====================

{
    # 邮箱用于 HTTPS 证书申请
    email admin@aidg168.uk
    
    # 如果使用 Cloudflare 橙云代理，取消下面这行注释
    # auto_https off
}

# ==================== 前端应用 ====================
app.aidg168.uk {
    # 静态文件根目录
    root * /var/www/DesignerCEP/Server/static/app
    
    # SPA 路由支持（所有请求都返回 index-core.html）
    try_files {path} /index-core.html
    
    # 提供静态文件
    file_server
    
    # ========== 缓存策略 ==========
    
    # HTML 不缓存
    @html path *.html
    header @html Cache-Control "no-cache, no-store, must-revalidate"
    
    # JS/CSS 长期缓存
    @assets path *.js *.css *.woff *.woff2
    header @assets Cache-Control "public, max-age=31536000, immutable"
    
    # 图片缓存
    @images path *.png *.jpg *.jpeg *.gif *.svg *.ico
    header @images Cache-Control "public, max-age=2592000"
    
    # ========== 安全头 ==========
    header {
        X-Frame-Options "SAMEORIGIN"
        X-Content-Type-Options "nosniff"
        X-XSS-Protection "1; mode=block"
        -Server
    }
    
    # ========== 压缩 ==========
    encode gzip
    
    # ========== 日志 ==========
    log {
        output file /var/log/caddy/app.log {
            roll_size 50mb
            roll_keep 5
        }
    }
}

# ==================== 后端 API ====================
backend.aidg168.uk {
    # 反向代理到 FastAPI (端口 8000)
    reverse_proxy localhost:8000 {
        # 传递真实 IP
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-Host {host}
    }
    
    # ========== 压缩 ==========
    encode gzip
    
    # ========== 日志 ==========
    log {
        output file /var/log/caddy/backend.log {
            roll_size 50mb
            roll_keep 5
        }
    }
}

# ==================== 主域名重定向（可选）====================
aidg168.uk, www.aidg168.uk {
    # 重定向到应用
    redir https://app.aidg168.uk{uri} permanent
}
```

---

## ✅ 部署清单

执行以下命令：

```bash
# ========== 在本地 ==========

# 1. 构建前端
cd Designer
npm run build:core

# 2. 上传 Caddyfile
scp Caddyfile root@103.97.201.136:/etc/caddy/Caddyfile

# 3. 上传前端文件
cd dist_core
scp -r * root@103.97.201.136:/var/www/DesignerCEP/Server/static/app/

# ========== 在服务器 ==========

# 4. SSH 登录
ssh root@103.97.201.136

# 5. 验证 Caddy 配置
sudo caddy validate --config /etc/caddy/Caddyfile

# 6. 重启 Caddy
sudo systemctl restart caddy

# 7. 查看状态
sudo systemctl status caddy

# 8. 查看日志（如果有错误）
sudo journalctl -u caddy -n 50
```

---

## 🧪 测试

### 测试 1：静态文件
```bash
curl -I https://app.aidg168.uk/
# 期望：HTTP/2 200
```

### 测试 2：API
```bash
curl https://backend.aidg168.uk/health
# 期望：{"status":"healthy"}
```

### 测试 3：浏览器访问
```
https://app.aidg168.uk/
```

---

## 🔧 常见问题

### Q1: 访问 app.aidg168.uk 显示 404

**检查**：
```bash
ls -la /var/www/DesignerCEP/Server/static/app/index-core.html
```

### Q2: API 请求 CORS 错误

**检查**：FastAPI 的 `ALLOWED_ORIGINS` 是否包含 `https://app.aidg168.uk`

```bash
# 编辑 .env
sudo nano /var/www/DesignerCEP/Server/.env

# 确保有：
# ALLOWED_ORIGINS=https://app.aidg168.uk,https://backend.aidg168.uk
```

### Q3: Caddy 证书申请失败

如果使用 Cloudflare 橙云代理，修改 Caddyfile：
```caddy
{
    auto_https off  # ← 添加这行
}
```

然后重启 Caddy。

---

**部署完成后，访问 `https://app.aidg168.uk/` 测试！** 🎉

