[教程/BUG修复] Docker (飞牛NAS等) 完美避坑部署流程 & 彻底解决 v1.0.1 默认账号密码错误的终极方案

Author: tor17349790479Created May 26, 2026Updated Jun 17, 2026
Labelsbug

标题

[教程/BUG修复] Docker (飞牛NAS等) 完美避坑部署流程 & 彻底解决 v1.0.1 默认账号密码错误的终极方案


问题概述

在最新的 v1.0.1 版本中,很多使用 NAS (如飞牛) 或纯 Docker 环境部署的用户,遇到了以下几个连环坑:

  1. docker-compose up -d 触发本地编译,导致拉取依赖(yarn/pip)超时或报错。
  2. 镜像拉取提示 hsliup/tradingagents-backend:v1.0.1 not found
  3. 最致命的痛点: 部署成功并运行建号脚本后,网页端登录依然提示 “用户名或密码错误” (HTTP 401)

密码错误的核心原因: 官方提供的离线离线脚本(如 create_default_admin.pyimport_config_and_create_user.py)写入数据库的密码是 SHA-256 加密。但是,最新版 FastAPI 后端登录接口已经升级验证 bcrypt(带随机盐)加密。这就导致数据库里的密文和后端校验永远对不上!

以下是经过实战验证的100% 纯净避坑安装流程以及原生 bcrypt 密码注入方案


第一阶段:避坑纯净安装流程 (防本地编译报错)

为了防止 NAS 孱弱的性能和网络导致本地 build 失败,我们需要强行砍掉编译逻辑,直接拉取官方最新的成品镜像。

1. 下载官方包并解压 下载官方的 TradingAgents-CN-1.0.1.zip,解压到你的服务器/NAS 目录中。

2. 核心修改 docker-compose.hub.nginx.yml** 打开该文件,进行以下几处极其重要**的修改:

  • 端口防冲突: 将 Nginx 的 80:80 改为 3000:80 (防止 NAS 默认的 80 端口被占用)。
  • 修正镜像标签: 官方可能漏传了 v1.0.1 标签,把 tradingagents-backend:v1.0.1frontend:v1.0.1 全局替换为 :latest
  • 物理阉割本地编译: 找到文件里的 build:context: .dockerfile: ... 配置,整行删除!不给它任何本地自爆的机会。

修改后的服务块类似这样:

yaml
  backend:
    image: hsliup/tradingagents-backend:latest
    container_name: tradingagents-backend
    ports:
      - "8000:8000"
    # 删除了 build 相关内容...
    
  frontend:
    image: hsliup/tradingagents-frontend:latest
    container_name: tradingagents-frontend
    ports:
      - "3000:80"  # 改为 3000
    # 删除了 build 相关内容...

3. 一键启动 拷贝 .env.docker.env。然后在终端执行:

bash
# 1. 直接拉取官方成品镜像(速度极快)
docker compose -f docker-compose.hub.nginx.yml pull

# 2. 启动全套系统
docker compose -f docker-compose.hub.nginx.yml up -d

第二阶段:终极无双 —— 解决密码错误的必杀技

等容器启动(约 15 秒)后,不要使用官方的建号脚本! 我们直接在宿主机运行一段“自适应”脚本,绕过有 Bug 的离线脚本,直接调用后端程序内部的 UserService 服务来创建账号。它自己生出来的账号,绝对会使用和登录验证一模一样的 bcrypt 算法加密!

请在 SSH 终端里,直接复制执行这一整段命令(1秒内完成):

bash
docker exec -it tradingagents-backend python -c "
import asyncio
import inspect
from app.services.user_service import UserService

async def main():
    service = UserService()
    
    # 1. 同步删除已存在的旧 SHA-256 错误密码账号(因为 PyMongo 是同步的)
    try:
        service.db.users.delete_many({'username': 'admin'})
        print(' 已清空旧的错误密码账号')
    except Exception as e:
        print('⚠️ 清理旧账号出错:', e)
        
    # 2. 动态检测系统的 create_admin_user 方法是同步还是异步
    is_async = inspect.iscoroutinefunction(service.create_admin_user)
    
    try:
        if is_async:
            user = await service.create_admin_user('admin', 'admin123')
        else:
            user = service.create_admin_user('admin', 'admin123')
            
        if user:
            print('✅ 【终极绝杀】用系统内部原生 bcrypt 算法创建 admin 账号成功!')
        else:
            print('❌ 创建失败')
    except Exception as e:
        print('❌ 创建过程中报错:', e)
        
    service.close()

# 动态启动
try:
    asyncio.run(main())
except Exception:
    import sys
    print('⚠️ 降级到同步模式执行...')
    service = UserService()
    service.db.users.delete_many({'username': 'admin'})
    user = service.create_admin_user('admin', 'admin123')
    if user:
        print('✅ 【同步降级】用系统内部原生 bcrypt 算法创建 admin 账号成功!')
    service.close()
"

第三阶段:见证登录

执行完上面的脚本后,你会在终端看到 ✅ 【终极绝杀】用系统内部原生 bcrypt 算法创建 admin 账号成功!

  1. 打开浏览器访问:http://你的IP:3000
  2. ⚠️ 极其重要: 狂按 Ctrl + F5 强制清空浏览器缓存(洗掉之前的错误登录状态)。
  3. 输入账号:admin,密码:admin123
  4. 完美登入量化控制台!

希望能帮到同样卡在这一步的兄弟们,也希望官方能在下个版本统一密码哈希算法。

Source: hsliuping/TradingAgents-CN