newrun
This commit is contained in:
353
temp_backup/Server_redundant/tempdocs/生产环境部署实操指南.md
Normal file
353
temp_backup/Server_redundant/tempdocs/生产环境部署实操指南.md
Normal file
@@ -0,0 +1,353 @@
|
||||
# 🚀 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`
|
||||
Reference in New Issue
Block a user