# 查价中台 — 服务器部署指南 将本项目**整个目录**上传到 Linux 服务器后,按下列步骤操作。 ## 一、服务器要求 | 项 | 建议 | |----|------| | 系统 | Ubuntu 22.04 / Debian 12 | | CPU | 2 核+ | | 内存 | **4GB+**(RPA 浏览器占内存) | | 磁盘 | 20GB+ | | 软件 | Docker 24+、Docker Compose V2 | | 网络 | 可访问 `www.mothership.com` | ```bash # 安装 Docker(如未安装) curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker "$USER" # 重新登录后生效 ``` ## 二、上传与配置(人工填写) ```bash cd /opt/chajia # 你的项目目录 # 1. 复制环境变量模板 cp deploy/.env.production.example .env # 2. 编辑 .env — 必须修改以下项(搜索 CHANGE_ME): nano .env ``` ### 必须人工填写的项 | 变量 | 说明 | |------|------| | `MYSQL_ROOT_PASSWORD` | 数据库强密码 | | `JWT_SECRET` | 随机密钥,例:`openssl rand -base64 32` | | `PUBLIC_DOMAIN` | 对外域名,如 `quote.yourcompany.com` | | `HOST_SERVICE_TOKENS` | 给外部系统的 API Token(JSON 单行) | | `CUSTOMER_REGISTRY` | 客户 ID,与 token 中 `customerId` 一致 | | `MOTHERSHIP_EMAIL` / `MOTHERSHIP_PASSWORD` | 仅当 Mothership 要求登录时填写 | ### 可选修改 | 变量 | 说明 | |------|------| | `APP_PORT` | 默认 3000,仅本机监听 | | `RPA_SELECTOR_*` | Mothership 页面改版时需更新 | ## 三、一键部署 ```bash chmod +x deploy/install.sh bash deploy/install.sh ``` 脚本将自动:构建镜像 → 启动 MySQL/Redis/Web/Worker/Scheduler → 数据库迁移 → 种子数据。 ### 配置 Nginx 反代(对外提供 HTTPS API) **仅 HTTP(内网或临时测试):** ```bash # 先改 deploy/nginx/chajia.http.conf 里的 server_name,或设置 .env 的 PUBLIC_DOMAIN bash deploy/install.sh --nginx-http ``` **HTTPS(生产推荐):** ```bash # 1. 安装 nginx、certbot sudo apt install -y nginx certbot python3-certbot-nginx # 2. 先 HTTP 部署拿到证书 bash deploy/install.sh --nginx-http sudo certbot certonly --nginx -d quote.yourcompany.com # 3. 切换 HTTPS 配置(install 会按 PUBLIC_DOMAIN 替换域名) bash deploy/install.sh --nginx-ssl ``` 或手动复制并修改: - `deploy/nginx/chajia.http.conf` → `/etc/nginx/sites-available/chajia` - `deploy/nginx/chajia.ssl.conf` → 有证书后使用 ## 四、部署后检查清单(人工) - [ ] `docker compose -f deploy/docker-compose.yml ps` 五个服务均为 `Up` - [ ] `curl -I http://127.0.0.1:3000` 返回 200/307 - [ ] 浏览器打开 `https://你的域名/admin/alerts` 能进管理端 - [ ] **修改默认管理员密码**(seed 默认:`admin_demo` / `Demo@123`) - [ ] 用外部 Token 调 `POST /api/addresses/mothership-candidates` 返回 `code: 0` - [ ] 完整询价:`POST /api/quotes` → 轮询 `GET /api/quotes/{id}` 得到 4 档报价 - [ ] 防火墙:只开放 **80/443**,**不要**暴露 3306/6379/3000 ## 五、给外部系统的调用说明 **Base URL:** `https://你的域名` **请求头:** ```http Authorization: Bearer X-Customer-Id: CUST_001 Content-Type: application/json ``` **流程:** 1. `POST /api/addresses/mothership-candidates` — 地址联想 2. `POST /api/quotes` — 提交询价 3. `GET /api/quotes/{quote_id}` — 每 2 秒轮询,最长约 30 秒 详细字段见 `docs/查价系统-PRD.md` 第 4、5 章,或 [`deploy/API.md`](./API.md)。 **第三方完整对接文档:** [`deploy/第三方对接指南.md`](./第三方对接指南.md)(含自测脚本 `scripts/test-host-api.ps1` / `.sh`)。 ## 六、常用运维命令 ```bash # 查看日志 docker compose -f deploy/docker-compose.yml logs -f next-app docker compose -f deploy/docker-compose.yml logs -f rpa-worker # 重启 docker compose -f deploy/docker-compose.yml restart # 停止 docker compose -f deploy/docker-compose.yml down # 更新代码后重新部署 git pull bash deploy/install.sh ``` ## 七、目录说明 ``` deploy/ ├── .env.production.example # 生产环境变量模板 → 复制为项目根 .env ├── docker-compose.yml # 生产 Compose(MySQL/Redis 不对外暴露) ├── install.sh # 一键部署脚本 ├── nginx/ │ ├── chajia.http.conf # HTTP 反代 │ └── chajia.ssl.conf # HTTPS 反代 └── README.md # 本文件 ``` ## 八、故障排查 | 现象 | 处理 | |------|------| | 询价一直 `processing` | 查 `rpa-worker` 日志;确认 `RPA_MOCK_MODE=false` 且 Worker 在运行 | | 地址联想 503 | Worker 未就绪或 Mothership 不可达 | | RPA 登录失败 | 填写 `MOTHERSHIP_EMAIL/PASSWORD`;或检查 `.rpa` 卷内 storageState | | 迁移失败 | `docker compose -f deploy/docker-compose.yml run --rm rpa-worker npx prisma migrate deploy` | ## 九、安全提醒 - 勿将 `.env` 提交到 Git - 每个外部系统使用独立 Service Token - 生产环境 `RPA_MOCK_MODE` 必须为 `false` - 定期备份 `mysql_data` 卷:`docker volume inspect chajia-prod_mysql_data` ## 十、使用宝塔 / 已有 MySQL(不用 Docker 内置库) 若数据库已在宝塔创建(库名 `chajia`,字符集 `utf8mb4`): 1. 上传并导入 [`deploy/database/chajia.sql`](../database/chajia.sql)(或 `chajia.sql.gz`) 2. 详见 [`deploy/database/README.md`](../database/README.md) 3. 在 `.env` 设置 `DATABASE_URL` 指向宝塔 MySQL,并调整 compose **去掉** `mysql` 服务或勿启动它