Files
pangolin/dev/run-local.sh
T
wangjia 981f79aca9 chore(dev): run-local.sh 可选 source dev/.local/smtp.env 支持真发邮件
存在 smtp.env 时设 SMTP_* → 后端真发邮件(如 Ethereal 临时账户);
否则 LogMailer 打日志。smtp.env 在 dev/.local(gitignore),凭证不进 git。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 13:43:47 +08:00

55 lines
3.0 KiB
Bash
Executable File
Raw Permalink 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
# 真发邮件: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 )