# 端口分配清单

> 本文档梳理 xiaoxia-saas 项目中所有服务、容器及 CI 环境使用的端口，
> 作为运维、排障和新功能开发时的统一参考。
>
> 最后更新：2026-07-24

---

## 一、应用服务端口

| 服务     | 容器内端口 | 环境变量名       | Staging 宿主机 | Production 宿主机 | 说明                                |
| -------- | ---------- | ---------------- | -------------- | ----------------- | ----------------------------------- |
| API      | 8000       | `API_PORT`       | 8000           | 8001              | FastAPI 服务，Nginx 反代后端       |
| Web      | 80         | `WEB_PORT`       | 3001           | 3002              | Nginx + 前端静态文件               |
| Worker   | —          | —                | —              | —                 | Celery 任务队列，不暴露端口         |

### 补充说明
- API 容器内部固定监听 8000（`API_HOST=0.0.0.0`，`API_PORT=8000`）
- Web 容器内部 Nginx 固定监听 80
- 所有端口均绑定 `127.0.0.1`，不直接暴露公网，由前置 Nginx/CDN 转发

---

## 二、基础设施端口

### PostgreSQL

| 环境         | 容器内端口 | 宿主机映射 | 环境变量名            | 默认值   |
| ------------ | ---------- | ---------- | --------------------- | -------- |
| Production   | 5432       | 5433       | `POSTGRES_PORT`       | 5433     |
| Staging      | 5432       | 5434       | `POSTGRES_PORT`       | 5434     |
| 开发本地     | 5432       | 5432       | `DATABASE_URL` 中端口 | 5432     |
| CI 共享 PG   | 5432       | 5433       | `CI_SHARED_PG_PORT`   | 5433     |
| CI 本地 PG   | 5432       | 5432       | `CI_LOCAL_PG_PORT`    | 5432     |

### Redis

| 环境         | 容器内端口 | 宿主机映射 | 环境变量名          | 默认值   |
| ------------ | ---------- | ---------- | ------------------- | -------- |
| Production   | 6379       | 6380       | `REDIS_URL` 中端口  | —        |
| Staging      | 6379       | 6381       | `REDIS_URL` 中端口  | —        |
| 开发本地     | 6379       | 6379       | `REDIS_URL`         | 6379     |
| CI 动态创建  | 6379       | 随机       | 运行时 `REDIS_PORT` | —        |

> CI Integration Tests 中 Redis 容器使用 `-P` 随机映射端口，
> 通过 `docker port` 命令获取实际端口后写入 `REDIS_URL`。

### 容器镜像 Registry

| 服务              | 端口  | 地址                   | 说明                           |
| ----------------- | ----- | ---------------------- | ------------------------------ |
| Gitea Registry    | 5000  | 172.30.18.198:5000     | CI 构建服务器内网 Registry     |
| ACR（生产镜像源） | 443   | crpi-xxx.aliyuncs.com  | 阿里云容器镜像服务（HTTPS）    |

---

## 三、CI / DevOps 端口

| 服务/用途           | 端口  | 环境变量名            | 默认值 | 说明                                  |
| ------------------- | ----- | --------------------- | ------ | ------------------------------------- |
| CI ChatOps Webhook  | 8090  | `CHATOPS_WEBHOOK_PORT`| 8090   | Gitea webhook 接收服务（`scripts/ci/chatops/`） |
| Staging SSH 部署    | 22222 | `STAGING_SSH_PORT`    | 22222  | Staging 服务器 SSH 端口（secrets 配置） |
| Preview SSH 部署    | 22222 | `PREVIEW_SSH_PORT`    | 22222  | Preview 服务器 SSH 端口（secrets 配置） |
| Preview 前端访问    | 80    | —                     | 80     | Nginx 子域名路由，`*.preview.xiaoxiajianji.com` |

---

## 四、开发环境默认端口（.env.example）

| 用途         | 端口  | 环境变量名 / 出处                          |
| ------------ | ----- | ------------------------------------------ |
| API 服务     | 8000  | `API_PORT`                                 |
| 数据库       | 5432  | `DATABASE_URL`（`postgresql+psycopg://...:5432/...`） |
| Redis        | 6379  | `REDIS_URL` / `CELERY_BROKER_URL` / `CELERY_RESULT_BACKEND` |
| SMTP         | 587   | `SMTP_PORT`                                |
| 前端开发服务 | 3000  | `APP_BASE_URL`（默认 localhost:3000）      |
| Vite Dev     | 5173  | `CORS_ORIGINS_RAW` 中包含                  |

---

## 五、CI Workflow 中的端口变量

### ci-pipeline.yml 顶层 env

| 变量名              | 默认值 | 用途                     |
| ------------------- | ------ | ------------------------ |
| `CI_PG_PORT`        | 5432   | CI PG 容器端口（本地）   |
| `CI_SHARED_PG_PORT` | 5433   | CI 共享常驻 PG 端口      |

### scripts/ci/ci_env.sh（统一常量）

| 变量名              | 默认值      | 说明                          |
| ------------------- | ----------- | ----------------------------- |
| `CI_SHARED_PG_PORT` | 5433        | 共享常驻 PG 实例端口          |
| `CI_LOCAL_PG_PORT`  | 5432        | 本地 PG 容器默认端口          |
| `CI_DEFAULT_DB`     | xiaoxia_saas | 默认数据库名                 |

---

## 六、命名规范

### 推荐命名格式

统一使用 `{服务/用途}_PORT` 格式：

```bash
API_PORT          # 应用服务
WEB_PORT          # 应用服务
POSTGRES_PORT     # 基础设施
REDIS_PORT        # 基础设施
SMTP_PORT         # 外部服务
CI_SHARED_PG_PORT # CI 特定
CI_LOCAL_PG_PORT  # CI 特定
CHATOPS_WEBHOOK_PORT # DevOps 服务
```

### 历史命名不一致（待统一）

- `WEBHOOK_PORT`（chatops config.py 内部变量）→ 应与外部 env 名 `CHATOPS_WEBHOOK_PORT` 对齐
- `STAGING_SSH_PORT` / `PREVIEW_SSH_PORT` → 符合规范，保留
- `CI_PG_PORT`（workflow 中）→ 建议统一为 `CI_LOCAL_PG_PORT` 与 `ci_env.sh` 对齐

---

## 七、相关配置文件路径

| 文件路径                              | 端口相关内容                     |
| ------------------------------------- | -------------------------------- |
| `infra/docker/compose.yml`            | API / Web / Worker 端口映射      |
| `infra/docker/infra.yml`              | Staging PG / Redis 端口          |
| `infra/docker/infra-production.yml`   | Production PG / Redis 端口       |
| `.env.example`                        | 开发环境全部端口变量             |
| `.gitea/workflows/ci-pipeline.yml`    | CI PG 端口配置                   |
| `scripts/ci/ci_env.sh`                | CI 端口统一常量                  |
| `scripts/ci/chatops/config.py`        | ChatOps Webhook 端口             |
| `scripts/ci/run_integration_tests.sh` | Redis 动态端口 + PG 端口         |
| `scripts/ci/run_validate.sh`          | PG 端口                          |
| `scripts/ci/validate_migration.sh`    | PG 端口                          |

