Skip to content

Docker 部署下 Web「+登录账号」不可用:login_start 不传 headless,且无 TTY 时登录辅助全跳过(附修复建议) #22

Description

@hechushitaoyuan

环境

  • 镜像:ghcr.io/chrysoljq/aistudio-api:latest(revision f2c51b8),linux/arm64(Oracle Ampere A1,Ubuntu 22.04)
  • 部署:docker compose,容器内无显示服务、无 TTY(标准 Docker 部署形态)
  • 浏览器引擎:chromium(cloakbrowser,headless)

问题

Docker 部署下 Web UI 的「+登录账号」完全不可用,用户只能手动导 cookie,但 Google 会话 cookie(__Secure-1PSIDTS 系)数小时轮换、不可持续。两条交互登录路径在容器里都走不通:

  1. 有头浏览器崩溃:routes_accounts.py 的 login_start 调 start_login 时不传 headless,LoginService.start_login 默认 headless=False,无显示服务的容器里浏览器启动即报「没有可用显示服务」。
  2. CLI 登录依赖 TTY:login_service._terminal_login_loop 开头有 _terminal_available() 检查(sys.stdin.isatty() and sys.stdout.isatty()),Web 会话没有 TTY,整个终端辅助登录被跳过。

_detect_terminal_step / _submit_terminal_value 这套页面步骤检测与代填逻辑本身相当完整(identifier/pwd/totp/ootp/selection/choose_account/manual 都覆盖),只是入口被 headless 默认值和 TTY 检查挡死了。

建议

让 Web 路径把这套能力用起来,最小改动:

  1. login_start 传 headless=True(或跟随 settings.browser_headless);
  2. 把 _terminal_login_loop 的输入输出抽象成可插拔通道(terminal / web session)。Web 会话走内存队列:前端轮询取当前步骤(step JSON + 页面截图 base64),提交输入后由服务端 _submit_terminal_value 代填。密码类步骤前端用 type=password,凭据只在用户浏览器与容器内存间流动、不落日志。
  3. 另一个相关痛点:待命账号没有浏览器续命,cookie 导入的账号几小时就死。建议内置定时保活任务(headless 浏览器定期访问 aistudio.google.com 并回写 auth.json),把会话寿命拉到天级。

我已按上述思路在本地用 overlay 补丁实现并验证(截图中继 + 步骤代填 + 全账号保活),方向认可的话可以提 PR。

相关

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions