# 本地开发环境

## 前置条件

- Docker（需要 buildx）
- Python 3（构建脚本）

## 使用

```bash
cd deploy/dev

# 1. 构建所有微服务镜像
# 默认 8 并行，可通过环境变量 BAKE_BATCH_SIZE 调整
python3 build.py

# 2. 启动
docker compose up -d

# 3. 查看状态
docker compose ps

# 4. 通过网关访问
curl http://127.0.0.1:18080/healthz

# 5. 停止
docker compose down
```

构建脚本会扫描 `app/` 下所有 `api`、`rpc`、`mq`、`adapter` 入口，通过 `docker buildx bake` 并行构建所有服务镜像，生成 `juwan/<service>-<type>:dev`。

端到端接口测试走网关 `http://127.0.0.1:18080`，`18801-18809` 是各服务的直连端口，不经过认证链路。

如需只启动部分服务：

```bash
docker compose up -d postgres redis snowflake player-rpc player-api
```

## 端口映射

| 服务            | 宿主机端口 |
| --------------- | ---------- |
| PostgreSQL      | 15432      |
| Redis           | 16379      |
| Kafka           | 19092      |
| Envoy Gateway   | 18080      |
| users-api       | 18801      |
| player-api      | 18802      |
| game-api        | 18803      |
| shop-api        | 18804      |
| order-api       | 18805      |
| wallet-api      | 18806      |
| community-api   | 18807      |
| objectstory-api | 18808      |
| email-api       | 18809      |

## 环境变量

编辑 `.env` 修改数据库密码、Kafka 地址等。默认值可直接用于本地开发。

管理员账户通过环境变量配置，`users-rpc` 启动时自动初始化：

| 变量           | 说明         | 默认值          |
| -------------- | ------------ | --------------- |
| ADMIN_USERNAME | 管理员用户名 | admin           |
| ADMIN_PASSWORD | 管理员密码   | admin123        |
| ADMIN_EMAIL    | 管理员邮箱   | admin@juwan.dev |

## 认证

登录和注册通过 `users-api` 下发 `JToken` Cookie。`envoy-gateway` 负责 JWT 校验并注入认证头，`authz-adapter` 做会话态二次校验，后端服务只消费 `x-auth-user-id` 等头。

写接口需要先 `GET /healthz` 领取 `XSRF-TOKEN` 和 `XSRF-GUARD`，再在请求头带上 `xsrf-token`。

注册和密码重置都需要先调验证码接口拿到 `requestId`，再把它放到 `X-Request-Id` 请求头里发后续请求。

## 数据库初始化

首次启动时 PostgreSQL 会自动执行 `desc/sql/` 下的建表语句。如需重新初始化，删除 volume 后重启：

```bash
docker compose down -v
docker compose up -d
```
