Karpov Gateway
Pasarela API integrada + consola. Backend en Go (Gin + gRPC) + frontend en Next.js (App Router + shadcn/ui), con pool de credenciales, verificación por correo, OAuth2 SSO de Linux.do, facturación por cuota, y autenticación de dos factores TOTP.
✨ Características
- Pasarela REST unificada — Modo de proceso único o multi servicio, gateway → auth/music/pool/quota/billing/worker backend gRPC desplegables independientemente
- Pool de credenciales (encriptado) — Encriptación de sobre KEK + DEK, AES-256-GCM con AAD, clave maestra derivada POOL_KEK_HEX
- Registro y activación por correo electrónico — SMTP para envío de código / enlace de activación, doble seguridad (código + enlace por correo), si SMTP no configurado pasa automáticamente a LogSender
- Inicio de sesión OAuth2 con terceros — SSO de Linux.do (PKCE S256 + firma HMAC en cookie de estado), decisiones de tres estados login / vinculación / desvinculación, token encriptado en base de datos
- Cuotas / Facturación — PlanQuotaMiddleware protege en capa gateway, validación secundaria interna en servicio de negocio según plan + ámbito
- Autenticación de dos factores TOTP —
pquerna/otp+ protección contra reenvío en Redis - Registro de auditoría — JSON estructurado, archivos separados por tipo, rotación diaria
- CSRF + Sesión — cookie
sidhttpOnly + doble validación con encabezadoX-CSRF-Token - Consola shadcn/ui — Next.js 16 App Router + Radix + Tailwind v4
🏗 Estructura del repositorio
karpov-gateway/
├── gateway/ # Go 后端 (Gin + gRPC)
│ ├── cmd/ # 各 service 入口 (gateway/auth/music/pool/...)
│ ├── internal/ # 业务实现 (private)
│ ├── api/ # protobuf 定义
│ ├── migrations/ # PostgreSQL schema
│ ├── go.mod # Go 模块 (go 1.24+)
│ └── Dockerfile
├── web/ # Next.js 16 前端控制台
│ ├── src/ # App Router pages + components
│ ├── middleware.ts # CSRF / session / CSP nonce
│ ├── package.json # pnpm workspace
│ └── Dockerfile
├── deploy/
│ ├── compose/ # 本地开发 (PG + Redis + pgAdmin)
│ └── compose-prod/ # 生产单机 (gateway + web + PG + Redis 全栈)
└── .github/workflows/ # GitHub Actions CI (lint / test / build / govulncheck / gosec)🚀 Inicio Rápido
1. Requisitos Previos
| Herramienta | Versión | | ----------- | ------- | | Go | 1.24+ | | Node.js | 20.11+ | | pnpm | 9+ | | Docker | 24+ | | PostgreSQL | 14+ | | Redis | 7+ |
2. Iniciar Dependencias (Postgres + Redis + pgAdmin)
cd deploy/compose
cp .env.example .env # 改强密码!
docker compose up -d
3. Iniciar el backend de Gateway
cd gateway
cp .env.example .env # 与 deploy/compose/.env 的 PG/Redis 密码保持一致
go mod download
go run ./cmd/qqmusic-gateway
默认 :8080 (HTTP) + :9000 (gRPC)
首次启动会在 stderr 打印一个 superadmin 账号 + 临时密码
4. Iniciar la consola web
cd web
cp .env.example .env.local
pnpm install
pnpm dev
http://localhost:3000
🐳 Despliegue de producción (Docker Compose en máquina única)
cd deploy/compose-prod
cp .env.example .env
编辑 .env:填入真域名 / 强密码 / SMTP 凭据 / OAuth client
nano .env生成 KEK
openssl rand -hex 32 # → 写到 POOL_KEK_HEX=docker compose up -d --build
docker compose logs -f gateway
Notas importantes:
- Cambiar
NEXT_PUBLIC_APP_URLrequiere ejecutardocker compose build --no-cache web, porque se inserta inline en el paquete del cliente - Después de usar un proxy inverso (Nginx/Caddy) es obligatorio activar
TRUST_PROXY=true, de lo contrario X-Forwarded-Proto no funcionará - Si cambia la KEK, todas las credenciales antiguas / tokens OAuth antiguos serán inaccesibles
🔐 OAuth2 (Linux.do) Integración
- Visita https://connect.linux.do para registrar una aplicación
- La URL de callback debe ser:
https://your-domain/v1/auth/oauth/linuxdo/callback - Coloca el client_id / client_secret obtenido en el archivo
.env:
OAUTH_LINUXDO_ENABLED=true
OAUTH_LINUXDO_CLIENT_ID=...
OAUTH_LINUXDO_CLIENT_SECRET=...
OAUTH_LINUXDO_MIN_TRUST_LEVEL=1
OAUTH_PUBLIC_BASE=https://your-domain
OAUTH_FRONTEND_BASE=https://your-domain
``
- Reinicie el gateway, la página de inicio de sesión / página de registro mostrará automáticamente "Linux.do inicio de sesión con un clic"
🧪 Prueba / Lint
bash
Go
cd gateway go vet ./... go test -race ./... golangci-lint run --timeout=5mWeb
cd web pnpm lint pnpm typecheck `📦 Dependencias clave
Backend:
- gin-gonic/gin — Framework HTTP
- grpc-ecosystem — gRPC + gateway
- jackc/pgx — Driver de PostgreSQL
- redis/go-redis — Cliente Redis
- golang.org/x/oauth2 — OAuth2 / PKCE
- pquerna/otp — TOTP
Frontend:- Next.js 16 (App Router + Turbopack)
- shadcn/ui + Radix
- Tailwind CSS v4
- next-auth-csrf CSRF seguro para edge
📜 Licencia
MIT — ver LICENSE
🤝 Contribuciones
PR / Issues bienvenidos. Antes de enviar PR por favor:
golangci-lint run + gofmt -l . sin errores
go test -race ./... sin errores
Cambios en web ejecutar pnpm lint && pnpm typecheck
No subir .env / data/.kek` ni ningún archivo con contraseñas reales🔒 Seguridad
Si encuentras problemas de seguridad contacta directamente al mantenedor, no abras un issue público.
Construido con ❤️ por MiChongs
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-04 ---