981f79aca9
存在 smtp.env 时设 SMTP_* → 后端真发邮件(如 Ethereal 临时账户); 否则 LogMailer 打日志。smtp.env 在 dev/.local(gitignore),凭证不进 git。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
55 lines
3.0 KiB
Bash
Executable File
55 lines
3.0 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
|
||
# 真发邮件:dev/.local/smtp.env 存在则 source(设 SMTP_*)→ 后端用真 SMTP;
|
||
# 否则不设 SMTP_* → LogMailer 把验证码打日志。不设 GRPC_* → 不启 agent server。
|
||
# shellcheck disable=SC1091
|
||
[ -f "$LOCAL/smtp.env" ] && . "$LOCAL/smtp.env"
|
||
|
||
# ── 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 )
|