Karpov Gateway
Entegre API Ağ Geçidi + Kontrol Paneli. Go arka uç (Gin + gRPC) + Next.js ön uç (App Router + shadcn/ui), yerleşik kimlik havuzu, e-posta doğrulama, Linux.do OAuth2 SSO, kota ve faturalandırma, TOTP iki adımlı doğrulama.
✨ Özellikler
- Birleşik REST Ağ Geçidi — Tek süreçli veya çoklu servis modunda, gateway → auth/music/pool/quota/billing/worker gRPC arka uçları bağımsız dağıtılabilir
- Kimlik Bilgisi Havuzu (şifreli) — KEK + DEK zarf şifrelemesi, AES-256-GCM with AAD, POOL_KEK_HEX ana anahtardan türetme
- E-posta ile Kayıt + Aktivasyon — SMTP kod gönderimi / aktivasyon bağlantısı, çift güvenlik (doğrulama kodu + e-posta bağlantısı), SMTP yapılandırılmamışsa otomatik olarak LogSender’a düşer
- OAuth2 Üçüncü Taraf Girişi — Linux.do SSO (PKCE S256 + HMAC imzalı state cookie), giriş / bağlama / bağlantı kesme üçlü karar, token şifrelenip veritabanında saklanır
- Kota / Faturalandırma — PlanQuotaMiddleware gateway katmanında son kontrol, iş servisinde plan + kapsam ile ikinci doğrulama
- TOTP İki Adımlı —
pquerna/otp+ Redis tekrar oynatma koruması - Denetim Günlüğü — Yapısal JSON, türe göre dosya ayrımı, günlük döngü
- CSRF + Oturum —
sidhttpOnly çerez +X-CSRF-Tokenbaşlığı ile çift doğrulama - shadcn/ui kontrol paneli — Next.js 16 App Router + Radix + Tailwind v4
🏗 Depo Yapısı
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)🚀 Hızlı Başlangıç
1. Ön Gereksinimler
| Araç | Sürüm | | ---------- | ------- | | Go | 1.24+ | | Node.js | 20.11+ | | pnpm | 9+ | | Docker | 24+ | | PostgreSQL | 14+ | | Redis | 7+ |
2. Bağımlılıkları Başlatma (Postgres + Redis + pgAdmin)
cd deploy/compose
cp .env.example .env # 改强密码!
docker compose up -d3. Gateway arka ucunu başlatın
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. Web Konsolunu Başlatma
cd web
cp .env.example .env.local
pnpm install
pnpm dev
http://localhost:3000
🐳 Üretim Dağıtımı (Docker Compose Tek Makine)
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
Dikkat edilmesi gerekenler:
NEXT_PUBLIC_APP_URLdeğiştirildiğinde mutlakadocker compose build --no-cache webkomutu çalıştırılmalı, çünkü bu değer client bundle içine gömülür.- Ters proxy (Nginx/Caddy) kullanıldığında
TRUST_PROXY=trueaçılmalı, aksi halde X-Forwarded-Proto çalışmaz. - KEK değiştirildiğinde, eski kimlik havuzu / eski OAuth token'ları tamamen okunamaz olur.
🔐 OAuth2 (Linux.do) Entegrasyonu
- https://connect.linux.do adresinden uygulama başvurusu yapın
- Callback adresine şunu yazın:
https://your-domain/v1/auth/oauth/linuxdo/callback - Aldığınız client_id / client_secret bilgilerini
.envdosyasına yazın:
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
``
- Gateway'i yeniden başlatın, giriş / kayıt sayfasında otomatik olarak "Linux.do Tek Tıkla Giriş" görünür.
🧪 Test / Lint
bash
Go
cd gateway go vet ./... go test -race ./... golangci-lint run --timeout=5mWeb
cd web pnpm lint pnpm typecheck `📦 Temel Bağımlılıklar
Arka Uç:
- gin-gonic/gin — HTTP çerçevesi
- grpc-ecosystem — gRPC + gateway
- jackc/pgx — PostgreSQL sürücüsü
- redis/go-redis — Redis istemcisi
- golang.org/x/oauth2 — OAuth2 / PKCE
- pquerna/otp — TOTP
Ön Uç:- Next.js 16 (App Router + Turbopack)
- shadcn/ui + Radix
- Tailwind CSS v4
- next-auth-csrf edge-safe CSRF
📜 Lisans
MIT — Bkz. LICENSE
🤝 Katkı Sağlama
PR / Issue hoş geldiniz. PR göndermeden önce lütfen:
golangci-lint run + gofmt -l . tamamen yeşil
go test -race ./... tamamen yeşil
Web değişikliklerinde pnpm lint && pnpm typecheck çalıştırın
.env / data/.kek` veya gerçek şifre içeren herhangi bir dosya göndermeyin🔒 Güvenlik
Bir güvenlik sorunu bulursanız doğrudan maintainer ile iletişime geçin, kesinlikle public issue açmayın.
MiChongs tarafından sevgiyle hazırlandı
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-08 ---