跳转至

DIP1 生产环境管理员操作手册

文档编号:DOC-D01-OPS
版本:V1.2(阿里云轻量 · IP 模式 · E2E 验证版)
创建日期:2026-08-11
最后更新:2026-08-15
维护人:TL / DT
适用范围:DIP1 阿里云轻量应用服务器 · 生产环境运维管理
服务器 IP:8.218.165.94
SSH 登录ssh root@8.218.165.94(免密已配置)


一、系统架构概述

1.1 云服务商与硬件规格

云服务商 阿里云轻量应用服务器 (Simple Application Server)
地域 香港 (cn-hongkong)
规格 2 vCPU / 2 GiB 内存 (ecs.t6.large 同规格)
带宽 200 Mbps 峰值(按流量计费)
系统盘 40 GB ESSD PL0
操作系统 Ubuntu 22.04 LTS (Jammy)
Swap 1 GiB 文件型 swap (/swapfile)
安全组放行 TCP 22 (SSH) / 80 (HTTP) / 443 (HTTPS,预留)
已关闭端口(安全原因) 5432 / 6379 / 8000 / 3100-3102 / 8080(仅本机可访问)

1.2 服务架构图(Docker Compose + PM2 + Caddy)

                Internet (阿里云安全组 TCP 80/22)
                        │
                        ▼
             ┌───────────────────────────┐
             │   Caddy :80 反向代理      │  ← Docker 容器,host network
             │   ├── /           → 302 /dl/
             │   ├── /admin/*     → :3100 OPR-Admin (Next.js)
             │   ├── /wkr/*      → :3101 WKR App  (serve)
             │   ├── /cst/*      → :3102 CST App  (serve)
             │   ├── /dl/*       → :8080 DL Center (serve)
             │   ├── /api/*      → :8000 FastAPI  (docker hostport 127.0.0.1)
             │   ├── /health     → :8000 FastAPI  /health
             │   ├── /docs       → :8000 FastAPI  Swagger UI
             │   ├── /openapi.json → :8000 FastAPI  schema
             │   └── /redoc      → :8000 FastAPI  Redoc UI
             └─────────────┬─────────────┘
                           │
         ┌─────────────────┴──────────────────────┐
         │                                        │
         ▼                                        ▼
┌──────────────────────┐           ┌──────────────────────────┐
│ PM2 (Node 进程守护)   │           │ Docker Compose 容器网络    │
│ 4 processes (host)    │           │ weavely_dip1-prod-network  │
│ ├── opr-admin :3100   │           │ ├── dip1-prod-postgres     │
│ ├── wkr-app   :3101   │           │ ├── dip1-prod-redis        │
│ ├── cst-app   :3102   │           │ └── dip1-prod-api :127.0.0.1:8000│
│ └── dl-weavely :8080  │           └──────────────────────────┘
└──────────────────────┘

1.3 端口分配(真实生效)

端口 绑定 服务 进程/容器 外部放行
22 0.0.0.0 SSH sshd ✅ 安全组
80 0.0.0.0 Caddy 反向代理 dip1-prod-caddy (host net) ✅ 安全组
5432 127.0.0.1 PostgreSQL dip1-prod-postgres ❌ 仅本机
6379 127.0.0.1 Redis dip1-prod-redis ❌ 仅本机
8000 127.0.0.1 FastAPI 后端 dip1-prod-api ❌ 仅本机
3100 0.0.0.0 OPR Admin Next.js PM2 opr-admin ❌ 仅本机 (Caddy 代理)
3101 0.0.0.0 WKR PWA 静态页 PM2 wkr-app ❌ 仅本机 (Caddy 代理)
3102 0.0.0.0 CST PWA 静态页 PM2 cst-app ❌ 仅本机 (Caddy 代理)
8080 0.0.0.0 下载中心 PM2 dl-weavely ❌ 仅本机 (Caddy 代理)

1.4 服务器目录结构

/opt/weavely/                          # 部署根目录
├── .env.prod                          # ⚠️ 生产密钥(DB密码/APP_SECRET等)
├── docker-compose.yml                 # Docker Compose 编排
├── Caddyfile                          # Caddy 反向代理配置
├── deploy/                            # 运维脚本
│   ├── server-init.sh                 # 服务器初始化(apt/Docker/Node/swap)
│   ├── build-and-start.sh             # 三端构建 + 启动 + DB 迁移 + 种子
│   ├── optimize-memory.sh             # 2C2G 内存优化脚本
│   ├── e2e.sh                         # 端到端验证脚本
│   ├── .env.prod.template             # 密钥模板
│   └── site/dl/index.html             # 下载中心首页
├── src/
│   └── dip1/                          # 解压后的源码(tar包)
│       ├── backend/                   # FastAPI 源码
│       └── frontend/                  # Next.js + Expo 源码
├── data/
│   ├── web-wkr/                       # WKR-App 静态资源
│   ├── web-cst/                       # CST-App 静态资源
│   └── caddy/                         # Caddy 证书/缓存
└── logs/
    └── weavely-init.log / build.log

二、运维入口速查

2.1 快速连接(TL / 管理员专用)

# SSH 连接(免密已配置)
ssh root@8.218.165.94

# 或通过 PowerShell 主部署脚本(本地)
cd d:\AC\TF\hk2026\ops\deploy
.\deploy-aliyun-prod.ps1 -ServerIp "8.218.165.94" -RootPassword '<root密码>'

2.2 公网访问地址(交付给业务/用户)

名称 地址(当前生效:IP 模式) 说明
下载中心(首页默认跳转) http://8.218.165.94/ → 302 → /dl/ 三端统一入口
运营后台 http://8.218.165.94/admin/ OPR-Admin,电脑端 Chrome/Edge
师傅端 Web http://8.218.165.94/wkr/ 手机浏览器,可加至主屏幕
客户端 Web http://8.218.165.94/cst/ 手机浏览器,可加至主屏幕
API 健康检查 http://8.218.165.94/health 返回 {status:"ok", env:"prod", db:"ok"}
API 文档(Swagger) http://8.218.165.94/docs 交互式 API 调试
OpenAPI 模式 http://8.218.165.94/openapi.json JSON schema
API 业务路由 http://8.218.165.94/api/v1/… CORS 已放行公网IP域名

2.3 常用运维命令(一步到位)

# ================ Docker ================
# 查看容器状态(健康检查)
ssh root@8.218.165.94 'docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'

# API 日志(实时)
ssh root@8.218.165.94 'docker logs -f --tail 100 dip1-prod-api'

# DB/Redis 日志
ssh root@8.218.165.94 'docker logs --tail 50 dip1-prod-postgres'
ssh root@8.218.165.94 'docker logs --tail 20 dip1-prod-redis'

# 重启 Docker 三层(PG+Redis+API)
ssh root@8.218.165.94 'cd /opt/weavely && docker compose restart'

# 重建 API 容器(例如修改 healthcheck 后)
# 容器名:dip1-prod-api  dip1-prod-postgres  dip1-prod-redis  dip1-prod-caddy
ssh root@8.218.165.94 'cd /opt/weavely && set -a && source ./.env.prod && set +a && docker compose up -d --force-recreate --no-deps api'

# ================ PM2 ================
# 前端进程列表 + 状态
ssh root@8.218.165.94 'pm2 list'

# 前端日志(运营后台为例)
ssh root@8.218.165.94 'pm2 logs opr-admin --lines 50'
ssh root@8.218.165.94 'pm2 logs wkr-app --lines 30'

# 重启全部前端
ssh root@8.218.165.94 'pm2 restart all && pm2 save'

# ================ Caddy ================
# Caddy 日志
ssh root@8.218.165.94 'tail -60 /var/log/caddy/access.log'
ssh root@8.218.165.94 'docker logs --tail 30 dip1-prod-caddy'

# Caddy 重载配置(注意:Caddy 不在 docker compose 服务清单中,直接 docker restart)
# 配置文件 bind 挂载:/opt/weavely/Caddyfile → /etc/caddy/Caddyfile (ro)
ssh root@8.218.165.94 'docker restart dip1-prod-caddy'

# 紧急:若 Caddy 容器被误删除,用以下命令重建(80 端口必须由它监听)
ssh root@8.218.165.94 'docker run -d --name dip1-prod-caddy --restart always --network host --memory 64m --cpus 0.2 -v /opt/weavely/Caddyfile:/etc/caddy/Caddyfile:ro -v /opt/weavely/data/caddy:/data -v /var/log/caddy:/var/log/caddy caddy:2-alpine caddy run --config /etc/caddy/Caddyfile --adapter caddyfile'

# ================ OPR-Admin Next.js 运维要点 ================
# 部署形态:next build → output: standalone,basePath="/admin",由 PM2 监听 3100
# 关键:Caddy 用 `handle /admin/*`(不剥离前缀,保留 /admin/* 给 Next.js),与 basePath 配合
#   - 若改用 `handle_path /admin/*`(剥离前缀),Next.js 会收到 /login /orders 等路径,导致 404
#   - 若修改 next.config.mjs 去掉 basePath,则必须同步把 Caddy 改回 handle_path 并重新构建
# 重新构建 OPR-Admin(next.config.mjs 或源码变更后执行):
ssh root@8.218.165.94 'cd /opt/weavely/src/dip1/frontend/apps/opr-admin && NODE_OPTIONS="--max-old-space-size=512" pnpm build 2>&1 | tail -10 && cp -rf .next/static .next/standalone/apps/opr-admin/.next/static && pm2 restart opr-admin && pm2 save'

# ================ DB ================
# 连接 psql
ssh root@8.218.165.94 "docker exec -it dip1-prod-postgres psql -U dip1_prod -d dip1_prod"

# 手动 Alembic 迁移(仅 build-and-start.sh 失败时使用)
ssh root@8.218.165.94 "docker exec dip1-prod-api alembic upgrade head"

# ================ 健康 ================
# 一键 6 端口 HTTP 检查
ssh root@8.218.165.94 'for p in 8000 3100 3101 3102 8080 80; do echo -n "port $p -> HTTP "; curl -sSo /dev/null -w "%{http_code}\n" --max-time 5 http://localhost:$p/; done'

# 端到端 E2E(含公网回环测试,可能超时,仅作参考)
ssh root@8.218.165.94 'bash /opt/weavely/deploy/e2e.sh 8.218.165.94'

# 内存/磁盘监控
ssh root@8.218.165.94 'free -h; echo "---"; df -h /opt /swapfile; echo "---"; docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.CPUPerc}}"'

三、环境变量配置

3.1 环境变量清单(真实部署)

文件位置/opt/weavely/.env.prod服务器本地,不在 Git 中)

⚠️ 严禁提交 .env.prod 到 Git。部署时由 server-init.sh 随机生成 DB_PASSWORD 与 APP_SECRET_KEY 并写入该文件。

# ====== 服务器基础 ======
SERVER_IP=8.218.165.94                 # 公网IP,用于下载中心QR、CORS白名单
ENV=prod
TZ=Asia/Hong_Kong
APP_VERSION=2.0.0

# ====== 安全密钥(部署时自动生成,请勿修改)======
APP_SECRET_KEY=<32字节随机密钥 base64>   # JWT/Session/CSRF
DB_PASSWORD=<数据库密码 16+ 字节>

# ====== CORS 白名单(生产环境严格限制)======
CORS_ORIGINS=["http://8.218.165.94","https://8.218.165.94","http://localhost:3000","http://localhost:3100","http://localhost:8081","http://localhost:8082"]

# ====== PostgreSQL ======
DATABASE_URL=postgresql+asyncpg://dip1_prod:${DB_PASSWORD}@postgres:5432/dip1_prod
DB_POOL_SIZE=8                          # 2C2G 缩小为 8(原20)
DB_MAX_OVERFLOW=10                      # 2C2G 缩小为 10(原40)

# ====== Redis ======
REDIS_URL=redis://redis:6379/0

# ====== JWT / OTP ======
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_TTL_MIN=15
JWT_REFRESH_TOKEN_TTL_DAY=30
JWT_ACCESS_TTL_SECONDS=900
JWT_REFRESH_TTL_SECONDS=2592000
OTP_TTL_SECONDS=300
OTP_RATE_LIMIT_PER_HOUR=5
BIOMETRIC_REQUIRED=false

# ====== Expo / EAS(原生App推送用,目前为占位)======
EXPO_USERNAME=weavely-dip1
EXPO_PROJECT_ID_WKR=
EXPO_PROJECT_ID_CST=
EAS_PROJECT_ACCOUNT=weavely-dip1
EXPO_PUSH_AUTH_TOKEN=

# ====== 可观测性(未配置不启用)======
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=
R2_PUBLIC_URL=
SENTRY_DSN=
LARK_WEBHOOK_ALERT=
OTEL_EXPORTER_OTLP_ENDPOINT=

# ====== 日志 ======
LOG_LEVEL=WARNING

3.2 密钥管理规范

  1. JWT 密钥
  2. 长度:32 字节
  3. 存储:环境变量,禁止提交到 Git
  4. 轮换:每 90 天轮换一次
  5. 生成:python -c "import secrets,base64; print(base64.b64encode(secrets.token_bytes(32)).decode())"

  6. 数据库密码

  7. 长度:>= 16 字符
  8. 组成:大小写字母 + 数字 + 特殊字符
  9. 存储:环境变量
  10. 轮换:每 180 天轮换一次

  11. R2 存储密钥

  12. 来源:阿里云控制台
  13. 权限:最小权限原则(仅读写 dip1-assets-prod bucket)
  14. 轮换:每 90 天轮换一次

四、数据库管理

4.1 数据库连接

# 连接 PostgreSQL
docker exec -it dip1-prod-postgres psql -U dip1_prod -d dip1_prod

# 或从 API 容器连接(容器名:dip1-prod-api)
docker exec -it dip1-prod-api python -c "
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
engine = create_async_engine('postgresql+asyncpg://dip1_prod:\${DB_PASSWORD}@postgres:5432/dip1_prod')
print('数据库连接成功')
"

4.2 常用 SQL 查询

-- 查看用户数量
SELECT count(*) as user_count FROM sys_users;

-- 查看角色权限
SELECT r.role_id, r.role_name, count(rp.permission_key) as perm_count
FROM sys_roles r
LEFT JOIN sys_role_permissions rp ON r.role_id = rp.role_id
GROUP BY r.role_id, r.role_name;

-- 查看师傅信息
SELECT worker_id, display_name, rating, jobs_completed
FROM mds_wpl_workers
WHERE status = 'active';

-- 查看最近订单
SELECT order_id, customer_name, status, created_at
FROM cpt_orders
ORDER BY created_at DESC
LIMIT 20;

-- 查看系统参数版本
SELECT version_id, version, is_active, updated_at
FROM qsv_param_versions
ORDER BY updated_at DESC;

4.3 数据库迁移

# 查看当前迁移版本
docker exec dip1-prod-api alembic current

# 查看迁移历史
docker exec dip1-prod-api alembic history

# 升级到最新版本
docker exec dip1-prod-api alembic upgrade head

# 回滚一个版本(⚠️ 谨慎使用)
docker exec dip1-prod-api alembic downgrade -1

# 回滚到初始状态(⚠️ 危险,会删除所有表)
docker exec dip1-prod-api alembic downgrade base

4.4 种子数据

# 插入基础种子数据(角色、权限、管理员、品类)
docker exec dip1-prod-api python -m app.infrastructure.db.seed.cli

# ⚠️ 注意:种子数据幂等,可重复执行不会产生重复数据

4.5 数据备份与恢复

备份

# 全量备份
docker exec dip1-prod-postgres pg_dump -U dip1_prod dip1_prod > backup_$(date +%Y%m%d_%H%M%S).sql

# 仅结构备份
docker exec dip1-prod-postgres pg_dump -U dip1_prod --schema-only dip1_prod > schema_backup.sql

# 仅数据备份
docker exec dip1-prod-postgres pg_dump -U dip1_prod --data-only dip1_prod > data_backup.sql

恢复

# 恢复全量备份
cat backup_20260811_150000.sql | docker exec -i dip1-prod-postgres psql -U dip1_prod -d dip1_prod

# ⚠️ 恢复前请备份当前数据

定时备份(crontab 示例):

# 每天凌晨 3 点自动备份
0 3 * * * cd /path/to/dip1 && docker compose -f docker-compose.prod.yml exec -T postgres pg_dump -U dip1_prod dip1_prod > /backup/dip1_$(date +\%Y\%m\%d).sql


五、日志管理

5.1 查看日志

# API 服务日志
docker logs dip1-prod-api --tail 200          # 最近 200 行
docker logs -f dip1-prod-api                  # 实时追踪
docker logs --since 1h dip1-prod-api          # 最近 1 小时
docker logs --since "2026-08-11T10:00:00" dip1-prod-api

# PostgreSQL 日志
docker logs dip1-prod-postgres --tail 100

# Redis 日志
docker logs dip1-prod-redis --tail 100

5.2 日志级别

生产环境默认 LOG_LEVEL=WARNING,可选值:

级别 说明 生产环境建议
DEBUG 详细调试信息 ❌ 禁用
INFO 常规运行信息 ❌ 禁用
WARNING 警告信息 ✅ 默认
ERROR 错误信息 ✅ 始终启用

临时调整日志级别(无需重建镜像):

# 进入容器
docker exec -it dip1-prod-api bash

# 临时修改配置
# 方法1: 修改环境变量后重启
# 方法2: 直接修改代码中的日志配置

5.3 日志持久化

生产环境建议配置日志持久化,可使用以下方案之一:

  1. 文件日志(推荐)
  2. 修改 docker-compose.prod.yml 添加日志驱动配置
  3. 使用 json-file 驱动,自动轮转

  4. 集中日志(可选)

  5. 接入 ELK Stack / Loki / Datadog
  6. 通过 OpenTelemetry 导出

Docker 日志配置示例

# 在 docker-compose.prod.yml 中添加
services:
  api:
    logging:
      driver: json-file
      options:
        max-size: "100m"
        max-file: "5"


六、健康检查与监控

6.1 健康检查端点

GET /health

响应示例

{
    "status": "ok",           // ok / error
    "service": "weavely-dip1-api",
    "version": "2.0.0",
    "env": "prod",           // prod / staging / dev
    "db": "ok"               // ok / error(数据库连接状态)
}

各字段含义

字段 说明 异常处理
status 服务状态 error → 立即检查
db 数据库状态 error → 检查数据库连接

6.2 监控建议

监控项 阈值 告警级别
API 响应时间 > 500ms WARNING
数据库连接数 > 80% 最大连接 WARNING
API 错误率 > 1% ERROR
内存使用 > 80% WARNING
磁盘使用 > 85% WARNING
CPU 使用 > 80% WARNING

6.3 告警通知

生产环境可配置以下告警通道:

  1. 飞书 WebhookLARK_WEBHOOK_ALERT
  2. Sentry(错误追踪 + 邮件通知)
  3. 邮件通知(可选)

七、故障排查

7.1 常见问题诊断

问题 诊断命令 可能原因 解决方案
API 无法访问 curl http://localhost:8000/health 容器未启动 docker compose up -d
数据库连接失败 docker logs dip1-prod-api 密码/网络错误 检查 DATABASE_URL
Redis 连接失败 docker logs dip1-prod-api 服务未启动 docker compose start redis
认证失败 docker logs dip1-prod-api JWT 密钥问题 检查 APP_SECRET_KEY
端口冲突 docker ps 端口被占用 停止旧容器或修改端口

7.2 故障恢复流程

1. 发现异常
   └── 通过监控告警 / 用户反馈

2. 诊断问题
   ├── 查看健康检查: curl http://localhost:8000/health
   ├── 查看容器状态: docker compose -f docker-compose.prod.yml ps
   └── 查看日志: docker logs dip1-prod-api --tail 100

3. 执行恢复
   ├── 临时恢复: docker compose -f docker-compose.prod.yml restart
   ├── 根本修复: 修改配置 / 代码后重新部署
   └── 数据恢复: 从备份恢复数据库

4. 验证恢复
   ├── 健康检查通过
   ├── 核心接口测试通过
   └── 监控指标恢复正常

5. 记录与复盘
   └── 记录故障时间、原因、解决方案

7.3 紧急恢复命令

# 紧急重启所有服务
docker compose -f docker-compose.prod.yml restart

# 紧急重建 API
docker compose -f docker-compose.prod.yml up -d --build --force-recreate api

# 紧急数据恢复
# 1. 停止 API
docker compose -f docker-compose.prod.yml stop api
# 2. 恢复数据
cat backup.sql | docker exec -i dip1-prod-postgres psql -U dip1_prod -d dip1_prod
# 3. 启动 API
docker compose -f docker-compose.prod.yml start api

# 完全重置(⚠️ 仅限测试环境)
docker compose -f docker-compose.prod.yml down -v
docker compose -f docker-compose.prod.yml up -d --build
docker exec dip1-prod-api alembic upgrade head
docker exec dip1-prod-api python -m app.infrastructure.db.seed.cli

八、安全规范

8.1 访问控制

  1. API 访问
  2. 所有 API 必须通过 HTTPS 访问
  3. 管理后台仅允许内网 / VPN 访问
  4. 实施 IP 白名单(可选)

  5. 数据库访问

  6. 仅允许 API 容器内网访问
  7. 禁止公网暴露数据库端口
  8. 使用强密码,定期轮换

  9. Redis 访问

  10. 仅允许 API 容器内网访问
  11. 生产环境设置密码认证

8.2 密钥安全

  1. 存储
  2. 所有密钥存储在环境变量,禁止硬编码
  3. .env.prod 文件加入 .gitignore
  4. 使用密钥管理服务(如 AWS Secrets Manager / HashiCorp Vault)

  5. 轮换

  6. JWT 密钥:每 90 天
  7. 数据库密码:每 180 天
  8. R2 存储密钥:每 90 天

  9. 审计

  10. 记录所有密钥变更操作
  11. 变更前备份旧密钥,支持过渡期间双密钥

8.3 数据安全

  1. 备份
  2. 每日自动备份
  3. 异地存储(可选)
  4. 保留最近 30 天备份

  5. 加密

  6. 传输层:TLS 1.2+
  7. 存储层:敏感字段加密(如手机号、地址)
  8. 应用层:JWT Token 签名验证

  9. 审计日志

  10. 记录所有敏感操作(登录、数据修改、权限变更)
  11. 保留至少 1 年

九、更新与升级

9.1 版本更新流程

1. 准备阶段
   ├── 代码合并到 main 分支
   ├── 运行完整测试
   └── 生成新版本号

2. 构建阶段
   ├── 构建新镜像: docker compose -f docker-compose.prod.yml build
   ├── 推送镜像仓库(如 Docker Hub / 私有仓库)
   └── 镜像打标签

3. 部署阶段
   ├── 数据库迁移: docker exec dip1-prod-api alembic upgrade head
   ├── 更新容器: docker compose -f docker-compose.prod.yml up -d --no-deps
   └── 健康检查: curl http://localhost:8000/health

4. 验证阶段
   ├── 核心功能冒烟测试
   ├── 性能回归测试
   └── 监控指标验证

5. 回滚方案(如验证失败)
   └── docker compose -f docker-compose.prod.yml up -d --no-deps (使用旧镜像标签)

9.2 数据库变更

# 创建新迁移
cd dip1/backend
alembic revision -m "描述变更内容"

# 编写迁移脚本(修改 upgrade/downgrade 函数)

# 部署时执行
docker exec dip1-prod-api alembic upgrade head

# 回滚(如迁移失败)
docker exec dip1-prod-api alembic downgrade -1

9.3 配置变更

# 1. 修改 .env.prod
# 2. 重启 API 服务使配置生效
docker compose -f docker-compose.prod.yml up -d --no-deps api

# ⚠️ 注意:仅修改环境变量无需重建镜像

十、附录

10.1 常用命令速查

操作 命令
启动所有服务 docker compose -f docker-compose.prod.yml --env-file .env.prod up -d
停止所有服务 docker compose -f docker-compose.prod.yml down
查看服务状态 docker compose -f docker-compose.prod.yml ps
查看 API 日志 docker logs dip1-prod-api --tail 100
重启 API docker compose -f docker-compose.prod.yml restart api
健康检查 curl http://localhost:8000/health
数据库迁移 docker exec dip1-prod-api alembic upgrade head
种子数据 docker exec dip1-prod-api python -m app.infrastructure.db.seed.cli
数据库备份 docker exec dip1-prod-postgres pg_dump -U dip1_prod dip1_prod > backup.sql
清理所有容器 docker compose -f docker-compose.prod.yml down -v

10.2 端口清单

服务 端口 内部访问 外部访问
API 8000 ✅(需 HTTPS 代理)
PostgreSQL 5432
Redis 6379

10.3 服务账户

账户 用途 权限
dip1_prod API 访问数据库 SELECT, INSERT, UPDATE, DELETE
TL 角色 管理员角色 全部权限
OL 角色 运营角色 业务权限
WKR 角色 师傅角色 订单权限
CST 角色 客户角色 查看权限

10.4 文档索引

文档 路径 说明
DIP1-ARC 架构设计 docs/DIP1-ARC-架构设计.md 系统架构、ADR 决策
DIP1-P2 一线操作系统 docs/DIP1-P2-一线操作系统设计.md API 设计、数据模型
DIP1-P3 技术基础设施 docs/DIP1-P3-技术基础设施.md 开发环境、CI/CD
DIP1-SPEC 需求规格 docs/DIP1-SPEC-需求规格说明书.md 功能需求、用户故事
DIP1-IMP 实施指南 docs/DIP1-IMP-Code-Agent实施指南.md 项目计划、验收标准
生产部署报告 docs/worklog/20260811_08_生产环境部署完成报告.md 部署记录

修订记录

版本 日期 修订人 修订内容
V1.2 2026-08-15 DT 9/9 E2E 验收通过版:修正 OPR-Admin basePath="/admin" 与 Caddy handle /admin/*(不剥离前缀)路由组合;添加 /admin/ → /admin/login、/ → /dl/ 重定向;统一容器命名前缀 dip1-prod-*;新增 Caddy 容器紧急重建命令与 OPR-Admin 重构建命令
V1.1 2026-08-15 DT 迁移至阿里云轻量应用服务器 2C2G 香港(8.218.165.94),切换 IP 模式(无域名);新增 PM2 前端三端进程管理与 Caddy 反向代理端口分配;API healthcheck 改为 curl+python urllib fallback(python:slim 无 wget)
V1.0 2026-08-11 DT 初始版本,生产环境管理员操作手册

本手册为 DIP1 生产环境运维文档,由听写 DT 维护。
技术支持:TL / DT
最后更新:2026-08-15 · V1.2 · 9/9 浏览器 E2E 验证通过