logo
0
0
WeChat Login

铁路广播合成系统(web-next)

该项目是对原 PHP 系统的 Next.js 重构版,提供:

  • 用户侧:广播文本提交、充值、下载(人机校验 + token + 鉴权)
  • 后台:用户管理、广播审核、快捷词、统计、系统设置、角色权限、审计日志
  • 安全:Origin 校验、Redis 优先限流、下载审计、后台审计、访问触发 housekeeping 清理

1. 环境变量(本地)

复制并修改:

  • 复制 ./.env.example./.env

必须配置:

  • DB_*:MySQL 连接信息

可选(未配置会自动生成/推断):

  • SESSION_PASSWORD:用于 session + 内部加密密钥。
    • 未配置时会首次启动自动生成并持久化到 ./.data/instance.secret
  • ALLOWED_ORIGINS:允许的站点来源(逗号分隔)。
    • 未配置时默认仅允许同源。
  • NEXT_PUBLIC_SITE_URL:站点 URL(用于生成支付回调/跳转链接)。
    • 未配置时默认按请求的 Host/Proto 推断。

2. 本地运行

npm install npm run dev

访问:http://localhost:3000

3. Docker 一键部署

  1. 复制 docker.env.exampledocker.env 并修改密码

  2. 启动

docker compose up -d --build

服务:

  • Web: http://localhost:3000
  • MySQL: localhost:3306
  • Redis: localhost:6379

数据持久化:

  • MySQL:mysql_data
  • Redis:redis_data
  • 应用上传/临时文件:app_data(挂载到 /app/.data

4. 后台设置(重要)

后台 /admin/settings 中可配置:

  • GeeTest:feature.geetest.enabled / geetest.captcha_id_public / geetest.captcha_id / geetest.captcha_key
  • 易支付:feature.yipay.enabled / yipay.gateway / yipay.pid / yipay.key
  • 短信:feature.sms.enabled 及阿里云短信参数
  • Redis:feature.redis.enabled / redis.url(启用后限流/验证码/下载 token 更稳定)
  • 文件:file.upload.allowed_typesfile.upload.max_mbfile.retention_days

5. 访问触发 housekeeping(清理策略)

通过 middleware.ts,每次访问会触发一次内部 /api/internal/bootstrap(首次建表)以及 /api/internal/housekeeping(Redis 锁节流),执行:

  • 清理过期音频(按 file.retention_days)并同步 DB audio_file=NULL
  • 清理 download_records(保留 90 天)
  • 清理 admin_audit_logs(保留 90 天)

6. 安全说明(简版)

  • 写操作必须 same-origin(assertSameOrigin
  • 关键接口限流(Redis 优先,失败回退内存)
  • 下载必须 GeeTest -> token -> 鉴权下载,并记录下载日志
  • 后台关键写操作记录审计日志(IP/UA/动作/目标)

7. 常见问题

  • 为什么仓库里没有 .env.*
    • 出于安全习惯,.env 通常被 gitignore。Docker 里使用 docker.env(你自己创建)。

About

No description, topics, or website provided.
Language
TypeScript98.5%
JavaScript0.9%
CSS0.5%
Dockerfile0.2%