Initial commit - DesignerCEP Project with Caddy deployment
This commit is contained in:
436
部署配置手册.md
Normal file
436
部署配置手册.md
Normal file
@@ -0,0 +1,436 @@
|
||||
# 🚀 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/` 测试!** 🎉
|
||||
|
||||
|
||||
Reference in New Issue
Block a user