6979411c1d
dev 本机置备(新增 dev/):
- docker-compose.yml: MySQL :13306 + Redis :16379(避让本机已占的 3306/6379)
- run-local.sh 一键: 起容器→openssl 生成密钥(dev/.local gitignore)→migrate→
seed→启动 server :18080(避让 8080);LogMailer 把验证码打日志
- seed.sql(1 provider + 1 HK 节点)、run-local.md 手册、.gitignore
后端两处修复(本地无 gRPC 场景,注释意图与代码不符的 bug):
- main.go: 无 gRPC 时真正构造 Hub-only nodeSvc(原只建 hub 没赋值),/v1/nodes 才能挂
- main.go: /me 改 Route 子路由根 Get,修 Get("/me")+Route("/me") 冲突致 404
客户端接真后端:
- token_store: MacOsOptions(useDataProtectionKeyChain:false) 修 keychain -34018
- auth_screen: 删 dev 旁路(test 账户内存登录),所有登录走真 API
验收: 后端 curl 端到端全通(验证码→注册→登录→/nodes→/me);
server go build/vet/test 通过, client analyze 0 + test 84
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
2.8 KiB
Bash
Executable File
52 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# run-local.sh — 一键起本地后端(DB/Redis + 密钥 + 迁移 + seed + server)。
|
||
# 从项目根运行: bash dev/run-local.sh
|
||
# 验证码:未配 SMTP,注册验证码会打到本终端的 server 日志里。
|
||
# 密钥:首次生成到 dev/.local/(gitignore);标量密钥用固定/随机 dev 值,纯本地玩具。
|
||
set -euo pipefail
|
||
|
||
export PATH="/opt/homebrew/bin:$PATH"
|
||
ROOT="$PWD"
|
||
LOCAL="$ROOT/dev/.local"
|
||
mkdir -p "$LOCAL"
|
||
|
||
# ── 1. 起 MySQL + Redis ──────────────────────────────────────────────
|
||
echo "[run-local] 起 MySQL + Redis ..."
|
||
docker compose -f dev/docker-compose.yml up -d
|
||
echo "[run-local] 等待 MySQL 就绪 ..."
|
||
until docker exec pangolin-dev-mysql mysqladmin ping -proot --silent >/dev/null 2>&1; do
|
||
sleep 1
|
||
done
|
||
echo "[run-local] MySQL 就绪。"
|
||
|
||
# ── 2. 生成密钥(仅当缺失)────────────────────────────────────────────
|
||
if [ ! -f "$LOCAL/jwt_private.pem" ]; then
|
||
echo "[run-local] 生成 RS256 JWT 密钥对 ..."
|
||
openssl genrsa -out "$LOCAL/jwt_private.pem" 2048
|
||
openssl rsa -in "$LOCAL/jwt_private.pem" -pubout -out "$LOCAL/jwt_public.pem"
|
||
fi
|
||
[ -f "$LOCAL/webhook_secret" ] || openssl rand -hex 32 > "$LOCAL/webhook_secret"
|
||
[ -f "$LOCAL/derive_key" ] || openssl rand -hex 32 > "$LOCAL/derive_key"
|
||
|
||
# ── 3. 组装环境变量 ──────────────────────────────────────────────────
|
||
read -r WEBHOOK_SECRET < "$LOCAL/webhook_secret"
|
||
read -r NODE_DERIVE_KEY < "$LOCAL/derive_key"
|
||
export WEBHOOK_SECRET NODE_DERIVE_KEY
|
||
export DB_DSN="root:root@tcp(127.0.0.1:13306)/pangolin?parseTime=true&loc=UTC&multiStatements=true"
|
||
export REDIS_ADDR="127.0.0.1:16379"
|
||
export JWT_PRIVATE_KEY_PATH="$LOCAL/jwt_private.pem"
|
||
export JWT_KEY_ID="dev-key-1"
|
||
export JWT_PUBLIC_KEYS="dev-key-1:$LOCAL/jwt_public.pem"
|
||
export ADDR=":18080" # 避让本机已占用的 8080
|
||
# 不设 SMTP_* → LogMailer(验证码打日志);不设 GRPC_* → 不启 agent server。
|
||
|
||
# ── 4. 迁移 + seed ───────────────────────────────────────────────────
|
||
echo "[run-local] 数据库迁移 ..."
|
||
( cd server && go run ./cmd/migrate up )
|
||
echo "[run-local] seed 节点 ..."
|
||
docker exec -i pangolin-dev-mysql mysql -uroot -proot pangolin < dev/seed.sql
|
||
|
||
# ── 5. 启动后端(前台,验证码看本终端日志)──────────────────────────
|
||
echo "[run-local] 启动后端 :18080 —— 注册验证码会打印在下方日志。Ctrl+C 停止。"
|
||
( cd server && go run ./cmd/server )
|