RepoDaily · 2026-07-03 · Security tool

AiToEarn:基于 MongoDB、Redis 与 RustFS 的可自托管 AI 变现技术栈

#13 Security tool TypeScript +498 yikart/AiToEarn 打开仓库

一个通过 Docker Compose 部署的 TypeScript AI 变现平台,内置 MongoDB 副本集、Redis、RustFS,采用 MIT 许可证。本期排名 13,获 498 星。

项目类型Security tool
最适合希望自托管 AI 变现后端,并能在部署前审阅 Docker Compose 密钥配置的开发者。
风险等级中等 — 默认凭据与占位 JWT 密钥在任何生产使用前都需要硬化处理。
评估时间1–2 小时即可完成克隆、审阅 docker-compose.yml 并启动本地栈。

核心问题: 在暴露该平台之前,你是否准备好替换 docker-compose.yml 中的每一处默认密钥?

88/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 88/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 中
96证据质量

包含 4 个来源、覆盖 3 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

100可安装/可试用性

检测到 5 个工作流步骤、5 个下一步动作,以及 3 个命令/安装信号。

63维护可信度

趋势热度为 +498 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

91生产准备度

采纳风险标记为 medium,并包含 5 条安全说明与 3 条跳过条件。

100差异化

3 个机会视角、3 个替代方案,以及 3 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

66Agent / AI 适配度

文章正文和元数据中检测到 3 个 AI/Agent 相关信号。

项目概览

AiToEarn 是一个托管于 github.com/yikart/AiToEarn 的 TypeScript 项目,其标语为 "Let's use AI to Earn!"。2026-07-03 该项目以 498 个周期新星位居趋势榜第 13 名,反映出社区对可自托管 AI 变现基础设施的关注,而非又一个封装 API。

仓库中的 docker-compose.yml 展示了一套多服务技术栈:以副本集模式运行的 MongoDB、启用密码认证的 Redis、作为 S3 兼容对象存储的 RustFS、负责初始化数据库并写入登录令牌的 init 容器、RustFS 存储桶准备步骤,以及从 aitoearn/aitoearn-ai:latest 拉取的 aitoearn-ai 服务。这并非单脚本演示,而是一个带持久化卷和健康检查的容器化后端。

项目采用 MIT 许可证,版权归属 2025 年的 AiToEarn。其 CONTRIBUTING.md 规定了结构化的贡献流程:fork 仓库、使用 git checkout -b feature/your-feature-name 创建分支、在 PR 描述中以 fixes #<issue_number> 关联 issue,并添加测试。该指南还定义了 Bug 优先级表,将安全漏洞列为 Critical,为维护者提供了公开的分诊策略。

从安全工具视角看,最值得关注的面是部署配置本身。compose 文件将 MongoDB 暴露在 27017 端口、Redis 在 6379 端口、RustFS 在 9001 端口,并硬编码了 admin/password、rustfsadmin/rustfsadmin 等默认凭据。任何评估 AiToEarn 的人都应把密钥轮换和网络暴露视为第一项审查任务,而不是事后补充。

解决什么问题

  • docker-compose.yml 中的默认凭据(admin/password、rustfsadmin/rustfsadmin、JWT_SECRET 设为 change-this-jwt-secret)对任何面向互联网的部署都不安全。
  • MongoDB、Redis 与 RustFS 端口被映射到宿主机,在云主机上直接 docker compose up 可能导致服务公开暴露。
  • aitoearn-init 容器将登录令牌写入 /data/init/token.txt,必须妥善保护并轮换,不应留在共享卷上。
  • 仓库元数据未列出主页或 topics,新用户在仓库之外难以找到更多文档。

工作原理

  1. 克隆仓库并打开 docker-compose.yml,在启动任何服务前逐项审查服务定义、端口绑定与硬编码密钥。
  2. 启动基础设施服务:MongoDB 以名为 rs0 的副本集初始化并使用生成的 keyfile,Redis 以 --requirepass 启动,RustFS 创建 aitoearn 存储桶并启用匿名下载。
  3. aitoearn-init 容器对 mongodb://admin:password@mongodb:27017 执行 scripts/init.mjs,播种 aitoearn 数据库并将登录令牌写入 /data/init/token.txt。
  4. aitoearn-ai 容器(aitoearn/aitoearn-ai:latest)以 pull_policy: always 启动,挂载 project/aitoearn-backend/apps/aitoearn-ai/config/config.yaml,并在 http://localhost:3010/health 暴露健康端点。
  5. 贡献者 fork 仓库、创建功能分支、添加测试,并按 CONTRIBUTING.md 的要求在 PR 中以 fixes #<issue_number> 关联已有 issue。

来自 docker-compose.yml 的部署要点

  • MongoDB 使用 mongo:latest 镜像,副本集名为 rs0,在 /data/mongodb-keyfile 生成 756 字节 base64 keyfile,凭据为 admin/password。
  • Redis 以 redis-server --requirepass password 在 6379 端口运行,健康检查使用 redis-cli --raw incr ping。
  • RustFS 使用 rustfs/rustfs:latest 镜像,端口 9001,主机名 rustfs.local,凭据为 rustfsadmin/rustfsadmin。
  • rustfs-init 使用 minio/mc:latest 创建 aitoearn 存储桶,并通过 mc anonymous set download rustfs/aitoearn 启用匿名下载。
  • aitoearn-init 基于 node:lts-alpine,执行 npm install --omit=dev 后运行 node init.mjs,环境变量包括 MONGO_URI、JWT_SECRET、DB_NAME=aitoearn 与 AUTO_LOGIN_TOKEN_PATH。
  • aitoearn-ai 服务在 http://localhost:3010/health 暴露健康检查,并依赖 MongoDB 与 Redis 健康后方可启动。

集成面

  • MongoDB 是主数据存储,连接串为 mongodb://admin:password@mongodb:27017,DB_NAME 设为 aitoearn。
  • Redis 作为缓存或队列层,通过 redis:6379 带密码访问。
  • RustFS 在 rustfs.local:9000 提供 S3 兼容对象存储,用于文件上传与素材。
  • aitoearn-ai 服务从 project/aitoearn-backend/apps/aitoearn-ai/config/config.yaml 读取运行时配置,并以读写方式挂载进容器。
  • 后端开发者应参考 CONTRIBUTING.md 中提到的 project/backend/DEVELOPER_GUIDE.md 完成本地搭建。

采纳清单

  • 将 MONGO_INITDB_ROOT_USERNAME 与 MONGO_INITDB_ROOT_PASSWORD 替换为高强度唯一值。
  • 将 JWT_SECRET 从 change-this-jwt-secret 改为 openssl rand -base64 48 生成的长随机字符串。
  • 将 Redis 密码从字面量 password 轮换为强密码。
  • 在存储任何用户上传内容前替换 RUSTFS_ACCESS_KEY 与 RUSTFS_SECRET_KEY 默认值。
  • 将 MongoDB、Redis、RustFS 端口绑定到 127.0.0.1,或置于无主机端口映射的私有 Docker 网络中。
  • 保护 /data/init/token.txt 输出,并在初始设置后撤销或轮换自动登录令牌。

谁适合关注

适合关注

  • 希望获得一键 Docker Compose 的 AI 变现后端,并能在启动前硬化密钥的开发者。
  • 寻找 MIT 许可 TypeScript 项目、贡献流程清晰且有 good first issue 的贡献者。
  • 正在评估托管 AI 变现平台的自托管替代方案,并需要 MongoDB、Redis 与对象存储整合在一个 compose 文件中的团队。

可以先跳过

  • 打算在公网服务器上原样执行 docker compose up 的用户——默认凭据与暴露端口不具备生产安全性。
  • 在投入时间前需要 CONTRIBUTING.md 与 compose 文件之外的完整官方文档的用户。
  • 需要非 MIT 或带明确商业担保条款的企业友好许可的项目。

风险与注意事项

该栈在本地启动容易,但自带默认凭据与占位密钥,在任何共享或公网部署前都必须替换。

  • MongoDB、Redis 与 RustFS 凭据在 docker-compose.yml 中被硬编码为 admin/password 与 rustfsadmin/rustfsadmin。
  • JWT_SECRET 默认为 change-this-jwt-secret,是一个明确的占位字符串。
  • 27017、6379 与 9001 端口映射到宿主机,若无网络控制会增加暴露面。
  • RustFS 的 aitoearn 存储桶通过 mc anonymous set download 启用匿名下载,若使用不当可能泄露上传文件。
  • CONTRIBUTING.md 将安全漏洞列为 Critical 优先级 Bug,与登录失败及核心功能不可用同级。
  • MongoDB 副本集使用生成的 keyfile,并通过 chmod 400 与 chown mongodb:mongodb 进行内部认证。
  • Redis 通过 --requirepass 强制认证,拒绝未授权连接。
  • JWT_SECRET 被 aitoearn-init 使用,但默认值为占位字符串——审查者必须在实际使用前替换。
  • Bug 报告需包含日志、复现步骤与截图,为维护者分诊安全问题提供充分上下文。

替代方案比较

方案适用场景代价
自托管 Dify
当你需要一个更成熟、文档更全、插件生态更丰富的开源 LLM 应用平台时。Apache 2.0 许可开源;自托管需自行承担基础设施成本。
n8n
当你的变现流程依赖于通过可视化节点编辑器将 AI API 与外部服务连接时。Sustainable Use License;fair-code 自托管免费。
FastGPT
当你需要一个 TypeScript 友好、底层使用 MongoDB 的知识库与 RAG 管线时。开源;自托管免费。

这个趋势说明了什么

密钥硬化自动化

一个用 openssl rand 生成强密钥并注入 docker-compose.yml 的包装脚本或 Helm Chart,能降低以默认凭据部署 AiToEarn 的风险。

审查 docker-compose.yml 中引用 JWT_SECRET、MONGO_INITDB_ROOT_PASSWORD 与 RUSTFS_SECRET_KEY 的行,然后基于 compose 已支持的环境变量插值实现 .env 覆盖。

私有网络硬化

将 MongoDB、Redis 与 RustFS 置于 aitoearn-network 内且不映射宿主机端口,可把公开攻击面缩小到 aitoearn-ai 的健康与应用端点。

确认 aitoearn-ai 只需通过 Docker 网络访问 MongoDB 与 Redis,然后移除内部服务的宿主机端口映射。

贡献者上手改进

新增 SECURITY.md 以及引用 project/backend/DEVELOPER_GUIDE.md 的一行快速开始说明,能降低首次贡献者浏览 good first issue 的门槛。

检查当前 good first issue 是否指向搭建步骤,然后依据 CONTRIBUTING.md 中已有的 Critical 优先级分类起草 SECURITY.md。

下一步建议

在任何本地启动前审查并硬化 docker-compose.yml

在运行该栈之前,先通读 docker-compose.yml 中每个服务定义并替换所有默认凭据。这是安全评估 AiToEarn 最关键的一步。

  1. 打开 docker-compose.yml,定位每一处 password、admin、rustfsadmin 与 change-this-jwt-secret。
  2. 使用 openssl rand -base64 48 为 JWT_SECRET 生成替换值,并为 MongoDB、Redis、RustFS 生成强密码。
  3. 创建 .env 文件,并将 compose 服务改为从环境变量读取而非硬编码值。
  4. 将 MongoDB、Redis 与 RustFS 端口绑定到 127.0.0.1 或直接移除宿主机端口映射。
  5. 执行 docker compose up,确认 aitoearn-ai 的健康检查在 http://localhost:3010/health 通过,并查看 /data/init/token.txt 中的自动登录令牌。

RepoDaily 判断

AiToEarn 为可自托管的 AI 变现后端提供了结构良好的 Docker Compose 技术栈,但其默认凭据与占位 JWT 密钥意味着在隔离的本地试用之外的任何部署前都必须先做硬化。

信息来源