# 🚀 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/` 测试!** 🎉