环境
- 镜像:
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 系)数小时轮换、不可持续。两条交互登录路径在容器里都走不通:
- 有头浏览器崩溃:
routes_accounts.py 的 login_start 调 start_login 时不传 headless,LoginService.start_login 默认 headless=False,无显示服务的容器里浏览器启动即报「没有可用显示服务」。
- 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 路径把这套能力用起来,最小改动:
login_start 传 headless=True(或跟随 settings.browser_headless);
- 把
_terminal_login_loop 的输入输出抽象成可插拔通道(terminal / web session)。Web 会话走内存队列:前端轮询取当前步骤(step JSON + 页面截图 base64),提交输入后由服务端 _submit_terminal_value 代填。密码类步骤前端用 type=password,凭据只在用户浏览器与容器内存间流动、不落日志。
- 另一个相关痛点:待命账号没有浏览器续命,cookie 导入的账号几小时就死。建议内置定时保活任务(headless 浏览器定期访问 aistudio.google.com 并回写 auth.json),把会话寿命拉到天级。
我已按上述思路在本地用 overlay 补丁实现并验证(截图中继 + 步骤代填 + 全账号保活),方向认可的话可以提 PR。
相关
环境
ghcr.io/chrysoljq/aistudio-api:latest(revision f2c51b8),linux/arm64(Oracle Ampere A1,Ubuntu 22.04)问题
Docker 部署下 Web UI 的「+登录账号」完全不可用,用户只能手动导 cookie,但 Google 会话 cookie(
__Secure-1PSIDTS系)数小时轮换、不可持续。两条交互登录路径在容器里都走不通:routes_accounts.py的login_start调start_login时不传headless,LoginService.start_login默认headless=False,无显示服务的容器里浏览器启动即报「没有可用显示服务」。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 路径把这套能力用起来,最小改动:
login_start传headless=True(或跟随settings.browser_headless);_terminal_login_loop的输入输出抽象成可插拔通道(terminal / web session)。Web 会话走内存队列:前端轮询取当前步骤(step JSON + 页面截图 base64),提交输入后由服务端_submit_terminal_value代填。密码类步骤前端用type=password,凭据只在用户浏览器与容器内存间流动、不落日志。我已按上述思路在本地用 overlay 补丁实现并验证(截图中继 + 步骤代填 + 全账号保活),方向认可的话可以提 PR。
相关