# 本地开发:一键起后端 让后端在本机真跑起来(auth 注册/登录 + 节点列表),供 mac app 接真后端调试。 ## 前置 - Docker(起 MySQL + Redis) - Go(`/opt/homebrew/bin` 在 PATH,脚本已内置) - openssl(生成 JWT 密钥) ## 一键启动 ```bash cd <项目根> # pangolin/ bash dev/run-local.sh ``` 脚本做的事: 1. `docker compose` 起 `pangolin-dev-mysql`(:13306)+ `pangolin-dev-redis`(:16379,避让本机已占用的 3306/6379),等 MySQL 就绪 2. 首次生成密钥到 `dev/.local/`(gitignore):RS256 JWT 私钥/公钥、`webhook_secret`、`derive_key` 3. 组装 env(`DB_DSN`/`WEBHOOK_SECRET`/`NODE_DERIVE_KEY`/`JWT_*`),不配 SMTP → 验证码打日志 4. `go run ./cmd/migrate up`(建表 + plans seed),`dev/seed.sql` 插一个 HK 测试节点 5. 前台启动 `go run ./cmd/server`(:18080)—— **注册验证码会打印在终端日志** 停止:`Ctrl+C`(停 server);`docker compose -f dev/docker-compose.yml down` 停容器(加 `-v` 清库)。 ## 端到端验证(curl) ```bash # 1) 发验证码(看 server 终端日志读 6 位码) curl -XPOST localhost:18080/v1/auth/code -H 'Content-Type: application/json' \ -d '{"email":"me@x.com"}' # 2) 注册(填上一步日志里的码) curl -XPOST localhost:18080/v1/auth/register -H 'Content-Type: application/json' \ -d '{"email":"me@x.com","code":"<码>","password":"pass1234"}' # → {"access_token":"...","refresh_token":"..."} # 3) 拉节点列表(带 access token) curl localhost:18080/v1/nodes -H 'Authorization: Bearer ' # → 含 HK 测试节点 # 4) 当前用户 curl localhost:18080/v1/me -H 'Authorization: Bearer ' ``` ## mac app 接它 ```bash cd client # 客户端默认连 :8080;本机 8080 被占用,dev 后端在 18080,故显式指定: flutter run -d macos --dart-define=PANGOLIN_API_URL=http://localhost:18080 ``` 注册页输真邮箱 → 发验证码(后端日志读码)→ 填码+密码 → 进主界面 → 节点页显示真节点(HK·测试)。 ## 说明 - **密钥纯本地玩具**:`dev/.local/` 不进 git;换机重跑脚本会重新生成。 - **节点 endpoint 占位**(`127.0.0.1:11443`):档 2 只验证列表 + connect 配置渲染,**不真连**。真连接出网见档 3。 - 不连 EC2 生产 MySQL(本地隔离,避免污染线上)。