Files
pangolin/dev/run-local.sh
T
wangjia 6979411c1d feat: 档2 接真后端 — mac app 真注册/登录/拉节点
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>
2026-06-16 13:27:58 +08:00

52 lines
2.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 )