refactor: align backend layout and supabase infra

Consolidate backend modules/tests under the backend package while syncing Supabase compose/env config and related plans.
This commit is contained in:
qzl
2026-02-05 15:13:06 +08:00
parent 3cfcb11240
commit ad06fe7de4
111 changed files with 5540 additions and 1362 deletions
+75 -134
View File
@@ -1,162 +1,103 @@
# 统一环境变量配置模板(根目录 .env.example
# 使用方法:复制到 .env 并填写实际值
# 环境变量配置模板(复制到 .env 并填写实际值
# 警告:切勿将包含真实密钥的 .env 提交到代码仓库
# 命名规则:前缀 SOCIAL_,层级分隔符 __(例如 SOCIAL_INFRA__POSTGRES__PASSWORD
############
# 运行时配置API 后端使用)
# 运行时配置
############
# 运行环境:dev(开发)、test(测试)、prod(生产)
SOCIAL_RUNTIME__ENVIRONMENT=dev
# 调试模式:true 开启详细日志和错误堆栈,false 生产环境建议关闭
SOCIAL_RUNTIME__ENVIRONMENT=dev # dev / prod
SOCIAL_RUNTIME__DEBUG=true
# 日志级别:DEBUG、INFO、WARNING、ERROR、CRITICAL
SOCIAL_RUNTIME__LOG_LEVEL=INFO
# 是否记录 SQL 查询日志:开发调试时可开启,生产环境建议关闭
SOCIAL_RUNTIME__SQL_LOG_QUERIES=false
############
# 应用配置API 后端使用)
# 应用配置
############
# API 服务监听地址:0.0.0.0 表示所有网络接口,本地开发可用 127.0.0.1
SOCIAL_APP__HOST=0.0.0.0
# API 服务监听端口
SOCIAL_APP__PORT=8000
# 是否启用代码热重载:开发环境 true,生产环境 false
SOCIAL_APP__RELOAD=true
############
# 基础设施密钥(Docker 服务使用)
# Redis 配置
############
# PostgreSQL 数据库超级用户密码:生产环境必须更换强密码
SOCIAL_INFRA__POSTGRES__PASSWORD=CHANGE_ME
# JWT 签名密钥(Supabase 认证服务使用):生产环境必须更换
SOCIAL_INFRA__JWT__SECRET=CHANGE_ME
# Supabase 匿名访问密钥:用于前端匿名访问 API
SOCIAL_INFRA__SUPABASE__ANON_KEY=CHANGE_ME
# Supabase 服务角色密钥:拥有完全权限,仅后端服务使用,切勿泄露
SOCIAL_INFRA__SUPABASE__SERVICE_ROLE_KEY=CHANGE_ME
# Supabase 管理后台用户名
SOCIAL_INFRA__DASHBOARD__USERNAME=supabase
# Supabase 管理后台密码
SOCIAL_INFRA__DASHBOARD__PASSWORD=CHANGE_ME
# Supabase 数据库连接池加密密钥
SOCIAL_INFRA__SUPAVISOR__SECRET_KEY_BASE=CHANGE_ME
# Supabase Vault 加密密钥
SOCIAL_INFRA__SUPAVISOR__VAULT_ENC_KEY=CHANGE_ME
# Supabase Postgres Meta 加密密钥
SOCIAL_INFRA__PG_META__CRYPTO_KEY=CHANGE_ME
# Logflare 公共访问令牌
SOCIAL_INFRA__LOGFLARE__PUBLIC_ACCESS_TOKEN=CHANGE_ME
# Logflare 私有访问令牌
SOCIAL_INFRA__LOGFLARE__PRIVATE_ACCESS_TOKEN=CHANGE_ME
SOCIAL_REDIS__PASSWORD=change-me-redis-password
############
# 基础设施数据库配置(Docker 服务使用)
# Qdrant 配置
############
# PostgreSQL 容器内主机名:Docker 内部使用
SOCIAL_INFRA__POSTGRES__HOST=db
# 数据库名称:与初始化脚本保持一致
SOCIAL_INFRA__POSTGRES__DB=linksy
# PostgreSQL 容器内端口
SOCIAL_INFRA__POSTGRES__PORT=54322
SOCIAL_QDRANT__API_KEY=change-me-qdrant-key
############
# Supavisor 数据库连接池配置(Docker 服务使用
# Supabase(本地 Docker 与阿里云自托管保持同一变量
############
# 连接池代理端口(事务模式)
SOCIAL_INFRA__POOLER__PROXY_PORT_TRANSACTION=6543
# 每个数据库连接池的默认大小
SOCIAL_INFRA__POOLER__DEFAULT_POOL_SIZE=20
# 连接池最大客户端连接数
SOCIAL_INFRA__POOLER__MAX_CLIENT_CONN=100
# 连接池租户 ID
SOCIAL_INFRA__POOLER__TENANT_ID=local-tenant
# 每个数据库的连接池大小
SOCIAL_INFRA__POOLER__DB_POOL_SIZE=5
# Supabase 栈使用 infra/docker/docker-compose.yml
# 仅绑定 127.0.0.1,不对局域网/公网暴露
############
# API 网关 Kong 配置(Docker 服务使用)
############
# Kong HTTP 端口映射到宿主机的端口
SOCIAL_INFRA__KONG__HTTP_PORT=8001
# Kong HTTPS 端口映射到宿主机的端口
SOCIAL_INFRA__KONG__HTTPS_PORT=8443
# 基础 URL(本地默认 8000
SOCIAL_SUPABASE__PUBLIC_SCHEME=http
SOCIAL_SUPABASE__PUBLIC_HOST=localhost
SOCIAL_SUPABASE__SITE_URL=http://localhost:3000
############
# PostgREST API 配置(Docker 服务使用
############
# PostgREST 暴露的数据库模式列表,逗号分隔
SOCIAL_INFRA__PGRST__DB_SCHEMAS=public,storage,graphql_public
#######
# 本地 Supabase 端口(只绑定 127.0.0.1
SOCIAL_SUPABASE__KONG_HTTP_PORT=8000
SOCIAL_SUPABASE__KONG_HTTPS_PORT=8443
############
# 认证服务 GoTrue 配置(Docker 服务使用)
############
# 站点 URL:用于生成回调链接等,通常为前端地址
SOCIAL_INFRA__SITE__URL=http://localhost:3000
# 允许的重定向 URL 列表,逗号分隔
SOCIAL_INFRA__ADDITIONAL_REDIRECT_URLS=
# JWT 过期时间(秒)
SOCIAL_INFRA__JWT__EXPIRY=3600
# 是否禁用用户注册:true 禁止,false 允许
SOCIAL_INFRA__AUTH__DISABLE_SIGNUP=false
# API 外部访问 URL:用于 Kong 网关对外暴露的地址
SOCIAL_INFRA__API_EXTERNAL_URL=http://localhost:8001
############
# Supabase 公共访问 URL:用于前端/SDK/Studio 访问(可与 API 外部地址不同)
# 反向代理场景请填代理后的公网地址
SOCIAL_INFRA__SUPABASE__PUBLIC_URL=http://localhost:8001
# 邮箱验证链接路径
SOCIAL_INFRA__MAILER__URLPATHS_CONFIRMATION="/auth/v1/verify"
# 邮箱邀请链接路径
SOCIAL_INFRA__MAILER__URLPATHS_INVITE="/auth/v1/verify"
# 邮箱找回密码链接路径
SOCIAL_INFRA__MAILER__URLPATHS_RECOVERY="/auth/v1/verify"
# 邮箱变更确认链接路径
SOCIAL_INFRA__MAILER__URLPATHS_EMAIL_CHANGE="/auth/v1/verify"
# 是否启用邮箱注册:true 启用,false 禁用
SOCIAL_INFRA__EMAIL__ENABLE_SIGNUP=true
# 是否自动确认邮箱:true 注册后自动登录,false 需要验证邮箱
SOCIAL_INFRA__EMAIL__ENABLE_AUTOCONFIRM=false
# 管理员邮箱地址:用于发送系统通知等
SOCIAL_INFRA__SMTP__ADMIN_EMAIL=admin@example.com
# SMTP 服务器主机地址
SOCIAL_INFRA__SMTP__HOST=supabase-mail
# SMTP 服务器端口:25(不加密)、465(SSL)、587TLS
SOCIAL_INFRA__SMTP__PORT=2500
# SMTP 用户名
SOCIAL_INFRA__SMTP__USER=fake_mail_user
# SMTP 密码
SOCIAL_INFRA__SMTP__PASS=fake_mail_password
# 发件人显示名称
SOCIAL_INFRA__SMTP__SENDER_NAME=fake_sender
# 是否允许匿名用户访问:true 允许,false 禁止
SOCIAL_INFRA__AUTH__ENABLE_ANONYMOUS_USERS=false
# 是否启用手机号注册:true 启用,false 禁用
SOCIAL_INFRA__AUTH__ENABLE_PHONE_SIGNUP=true
# 是否自动确认手机号:true 自动验证,false 需要短信验证码
SOCIAL_INFRA__AUTH__ENABLE_PHONE_AUTOCONFIRM=true
# Postgres 连接信息(后端与 Supabase 共用密码)
SOCIAL_DATABASE__HOST=localhost
SOCIAL_DATABASE__PORT=5434
SOCIAL_DATABASE__NAME=postgres
SOCIAL_DATABASE__USER=postgres
SOCIAL_DATABASE__PASSWORD=change-me-strong-password
############
# Supabase Studio 配置(Docker 服务使用)
############
# 默认组织名称
SOCIAL_INFRA__STUDIO__DEFAULT_ORGANIZATION=Default Organization
# 默认项目名称
SOCIAL_INFRA__STUDIO__DEFAULT_PROJECT=Default Project
# 是否启用 WebP 图片格式检测:true 启用自动转换,false 禁用
SOCIAL_INFRA__IMGPROXY__ENABLE_WEBP_DETECTION=true
# OpenAI API 密钥:用于 Supabase AI 功能
SOCIAL_INFRA__OPENAI__API_KEY=
# JWT/Keys(必须替换)
SOCIAL_SUPABASE__JWT_SECRET=change-me-jwt-secret-at-least-32-chars
SOCIAL_SUPABASE__ANON_KEY=replace-with-supabase-anon-key
SOCIAL_SUPABASE__SERVICE_ROLE_KEY=replace-with-supabase-service-role-key
############
# Edge Functions 配置(Docker 服务使用)
############
# 是否验证 JWTtrue 验证,false 不验证
SOCIAL_INFRA__FUNCTIONS__VERIFY_JWT=false
# Studio 登录
SOCIAL_SUPABASE__DASHBOARD_USERNAME=admin
SOCIAL_SUPABASE__DASHBOARD_PASSWORD=change-me
############
# 日志与分析配置(Docker 服务使用)
############
# Docker Socket 路径:用于容器日志收集
SOCIAL_INFRA__DOCKER__SOCKET_LOCATION=/var/run/docker.sock
# 核心加密 Key(必须替换)
SOCIAL_SUPABASE__SECRET_KEY_BASE=change-me-secret-key-base
SOCIAL_SUPABASE__VAULT_ENC_KEY=change-me-vault-enc-key
SOCIAL_SUPABASE__PG_META_CRYPTO_KEY=change-me-pg-meta-crypto-key
#######
# Logflare(本地可用假值,但不要上云)
SOCIAL_SUPABASE__LOGFLARE_PUBLIC_ACCESS_TOKEN=change-me-logflare-public
SOCIAL_SUPABASE__LOGFLARE_PRIVATE_ACCESS_TOKEN=change-me-logflare-private
#######
# Pooler
SOCIAL_SUPABASE__POOLER_TENANT_ID=local
SOCIAL_SUPABASE__POOLER_DEFAULT_POOL_SIZE=20
SOCIAL_SUPABASE__POOLER_MAX_CLIENT_CONN=100
SOCIAL_SUPABASE__POOLER_DB_POOL_SIZE=5
#######
# Auth 可选项(默认允许邮箱注册)
SOCIAL_SUPABASE__ENABLE_EMAIL_SIGNUP=true
SOCIAL_SUPABASE__ENABLE_EMAIL_AUTOCONFIRM=true
SOCIAL_SUPABASE__ENABLE_ANONYMOUS_USERS=false
SOCIAL_SUPABASE__ENABLE_PHONE_SIGNUP=false
SOCIAL_SUPABASE__ENABLE_PHONE_AUTOCONFIRM=false
SOCIAL_SUPABASE__ADDITIONAL_REDIRECT_URLS=
SOCIAL_SUPABASE__DISABLE_SIGNUP=false
#######
# SMTP(上云必配,本地可留空)
SOCIAL_SUPABASE__SMTP_ADMIN_EMAIL=
SOCIAL_SUPABASE__SMTP_HOST=
SOCIAL_SUPABASE__SMTP_PORT=
SOCIAL_SUPABASE__SMTP_USER=
SOCIAL_SUPABASE__SMTP_PASS=
SOCIAL_SUPABASE__SMTP_SENDER_NAME=
#######
# Storage/Image 可选配置
SOCIAL_SUPABASE__PGRST_DB_SCHEMAS=public
SOCIAL_SUPABASE__FUNCTIONS_VERIFY_JWT=false
SOCIAL_SUPABASE__IMGPROXY_ENABLE_WEBP_DETECTION=true
SOCIAL_SUPABASE__STORAGE_BUCKET_PUBLIC=public
SOCIAL_SUPABASE__STORAGE_BUCKET_PRIVATE=private