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

9.2 KiB
Raw Blame History

🚀 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

    VITE_API_SERVER=https://your-domain.com
    
  2. 构建项目Designer 目录下运行:

    npm run build
    

    这将生成 Designer/dist 目录,包含 ShellDesigner (Core) 两个文件夹。

  3. 打包 ShellDesigner/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 登录您的服务器:

ssh root@your-server-ip

2.1 安装基础软件

# 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 创建目录结构

# 创建应用根目录
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 上传文件 (在本地执行)

打开新的终端窗口(本地),执行上传命令:

# 假设您在 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. 上传到服务器

    scp -r all_versions/*.zip root@your-server-ip:/var/www/DesignerCEP/Server/archives/
    
  3. 在服务器上解压 登录服务器,运行以下命令批量解压:

    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 修正权限 (服务器端)

sudo chown -R www-data:www-data /var/www/DesignerCEP

⚙️ 4. 后端服务配置

4.1 安装 Python 依赖

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 文件:

nano .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 服务

创建服务文件:

sudo nano /etc/systemd/system/designer-cep.service

粘贴内容:

[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

启动服务:

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 配置文件:

sudo nano /etc/caddy/Caddyfile

清空原有内容,粘贴以下内容

# ========== 主域名 (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

sudo systemctl restart caddy
sudo systemctl status caddy

🔒 6. 安全与网络检查 (必做!)

1. 确认 Cloudflare SSL 模式

  • 登录 Cloudflare 控制台 -> SSL/TLS -> Overview
  • 必须选择: Full (Strict)
  • 原因: Caddy 会自动申请 Let's Encrypt 证书Cloudflare 需要信任这个有效证书。

2. 确认防火墙端口 在服务器上执行:

sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload

3. 确认 Caddy 监听状态 在服务器上执行:

sudo ss -lntp | grep 443

预期输出: 应该看到 caddy 进程正在监听 *:443

4. 快速自检 (在服务器上执行)

# 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