File size: 9,667 Bytes
c9fa4c1
 
831a8c8
c9fa4c1
 
 
 
 
 
 
 
a11e8b5
831a8c8
 
 
c9fa4c1
831a8c8
c9fa4c1
a444934
 
a11e8b5
a444934
f82773a
a444934
f82773a
a11e8b5
f82773a
a11e8b5
 
 
 
 
 
 
 
 
 
 
f82773a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a11e8b5
a444934
 
 
831a8c8
a444934
 
 
 
 
 
 
 
831a8c8
a444934
a11e8b5
 
a444934
 
 
 
 
 
 
 
c9fa4c1
 
 
 
 
 
 
 
 
831a8c8
c9fa4c1
 
 
831a8c8
 
 
 
 
 
 
 
 
c9fa4c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f82773a
c9fa4c1
831a8c8
c9fa4c1
 
a11e8b5
c9fa4c1
a11e8b5
 
c9fa4c1
 
 
 
f82773a
a11e8b5
 
c9fa4c1
f82773a
 
 
 
 
 
 
 
 
 
 
c9fa4c1
 
 
 
 
 
 
 
 
 
 
 
 
 
bf58c8d
fcb2d84
 
 
 
 
 
 
 
 
 
 
 
 
 
c9fa4c1
 
831a8c8
c9fa4c1
 
 
 
 
 
 
 
831a8c8
 
c9fa4c1
 
 
 
 
 
 
 
 
 
5aff1af
c9fa4c1
 
831a8c8
c9fa4c1
 
 
831a8c8
c9fa4c1
831a8c8
 
 
 
 
5aff1af
831a8c8
c9fa4c1
 
 
 
 
 
 
 
 
 
831a8c8
 
 
 
c9fa4c1
db40b48
c9fa4c1
 
831a8c8
 
5aff1af
831a8c8
 
c9fa4c1
 
 
 
 
 
 
5aff1af
831a8c8
 
c9fa4c1
831a8c8
c9fa4c1
 
 
 
 
5aff1af
c9fa4c1
 
831a8c8
c9fa4c1
 
831a8c8
c9fa4c1
 
831a8c8
c9fa4c1
831a8c8
 
 
 
 
c9fa4c1
 
 
831a8c8
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
# 从零开始部署 AutoTeam

本文档带你从一台全新的 VPS 或本地机器开始,完成 AutoTeam 的安装、配置、管理员登录、首次补号与日常使用。

## 前置条件

在开始之前,你需要准备好以下服务:

| 服务 | 说明 | 获取方式 |
|------|------|---------|
| **ChatGPT Team 订阅** | 管理员主号,需要有 Team 订阅 | [chatgpt.com](https://chatgpt.com) |
| **临时邮箱** | 自动注册与收验证码,二选一 | ① **`cf_temp_email`(默认)** = 自建 [dreamhunter2333/cloudflare_temp_email](https://github.com/dreamhunter2333/cloudflare_temp_email)<br>**`maillab`** = 自建 [maillab/cloud-mail](https://github.com/maillab/cloud-mail) |
| **CLIProxyAPI** | Codex 代理与认证文件同步目标 | 自建 [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) |
| **VPS / 本地机器** | 推荐 Ubuntu 22.04+;也支持 Windows / macOS | 任意云服务商 / 本地电脑 |
| **域名** | 用于 CloudMail 临时邮箱与 Verified Domains | 任意域名注册商 |

> 建议使用住宅 IP 或干净的 VPS IP,避免被 OpenAI / Cloudflare 标记。

## 准备工作

### 1. 搭建临时邮箱后端(二选一)

> **【重要】先决定后端,再决定填哪一组配置。** 两个后端 API 完全不兼容:`CLOUDMAIL_*` 字段对应 `dreamhunter2333/cloudflare_temp_email`,**不是** `maillab/cloud-mail`(社区里另一个同名项目)。**必须** 在 `.env` 里显式声明 `MAIL_PROVIDER=cf_temp_email` 或 `MAIL_PROVIDER=maillab`,否则可能撞 [issue#1](configuration.md#-协议错配排查issue-1) 错配。

#### 选项 A:`maillab`(**推荐**,中文社区活跃)

适配 [maillab/cloud-mail](https://github.com/maillab/cloud-mail)(参考 [官方文档](https://doc.skymail.ink/guide/dashboard))。一键 Docker / Cloudflare Workers,内置管理后台。

部署完成后,在 `.env` 中显式设置:

```dotenv
MAIL_PROVIDER=maillab
MAILLAB_API_URL=https://your-maillab.example.com
MAILLAB_USERNAME=admin@example.com
MAILLAB_PASSWORD=your_password
MAILLAB_DOMAIN=@your-domain.com
```

#### 选项 B:`cf_temp_email`(经典选项)

适配 [dreamhunter2333/cloudflare_temp_email](https://github.com/dreamhunter2333/cloudflare_temp_email),基于 Cloudflare Workers,搭建简单。

按官方文档完成部署后你会得到:
- API 地址(如 `https://your-domain.com/api`)→ `CLOUDMAIL_BASE_URL`
- 管理员密码(`x-admin-auth`)→ `CLOUDMAIL_PASSWORD`
- 邮箱域名(如 `@your-domain.com`)→ `CLOUDMAIL_DOMAIN`

```dotenv
MAIL_PROVIDER=cf_temp_email
CLOUDMAIL_BASE_URL=https://your-domain.com/api
CLOUDMAIL_PASSWORD=your_password
CLOUDMAIL_DOMAIN=@your-domain.com
```

> 切换后业务调用方零改动,工厂会按 `MAIL_PROVIDER` 自动 dispatch。详见 [配置说明](configuration.md#mail-provider-切换)。

### 2. 设置 OpenAI Verified Domains

由于重复邀请有概率触发 `"unable to invite user due to an error."` 错误([参考](https://community.openai.com/t/email-invite-error-in-chatgpt-business/1378252)),需要设置域名验证让账号自动加入 Team:

1. 打开 ChatGPT → Settings → Account
2. 找到 **Verified Domains**,点击 **Verify new domain**
3. 输入你的域名(如 `your-domain.com`)
4. 在 Cloudflare(或你的 DNS 服务商)添加 OpenAI 要求的 DNS 记录
5. 回到 ChatGPT 点击 **Check**,验证通过后状态变为 verified
6. 进入 Workspace → Identity & Access,打开 **Automatic account creation**

这样使用该域名邮箱注册的 ChatGPT 账号会自动加入 Team workspace,不需要手动邀请。

> 域名验证只针对 ChatGPT 侧,与你选哪个临时邮箱后端无关 — `cf_temp_email` 和 `maillab` 都需要。

### 3. 搭建 CLIProxyAPI

参考 CPA 项目文档完成搭建:https://github.com/router-for-me/CLIProxyAPI

搭建完成后你会得到:
- CPA 地址(如 `http://127.0.0.1:8317`)
- 管理密钥(`secret-key`)

## 第一步:安装

### 方式一:直接部署

```bash
# 克隆项目
git clone https://github.com/cnitlrt/AutoTeam.git
cd AutoTeam

# Linux 一键安装(uv、依赖、Playwright、pre-commit)
bash setup.sh
```

Windows / macOS 可直接执行:

```bash
uv sync
uv run playwright install chromium
```

> Windows / macOS 不需要 xvfb。Linux 无图形环境时项目会自动处理虚拟显示。

### 方式二:Docker 部署

```bash
git clone https://github.com/cnitlrt/AutoTeam.git
cd AutoTeam
mkdir -p data
docker compose up -d
```

## 第二步:配置

### 直接部署

启动任何命令时会自动进入配置向导:

```bash
uv run autoteam api
```

**推荐使用 Web 面板配置**(SetupPage 已支持 provider 选择 + 一站式校验,见下文 §2.5);CLI 向导仍可用,以默认的 `cf_temp_email` 后端为例:

```text
=== AutoTeam 首次配置 ===

  Mail Provider [cf_temp_email]:                 ← 回车用默认,或填 maillab
  CloudMail API 地址: https://your-cloudmail.com/api
  CloudMail 管理员密码: your_password
  邮箱域名(如 @example.com): @your-domain.com
  CPA 管理密钥: your_cpa_key
  API 鉴权密钥 [回车自动生成]:
```

选 `maillab` 时,SetupPage 会按 provider 动态切换需要填的字段(`MAILLAB_API_URL` / `MAILLAB_USERNAME` / `MAILLAB_PASSWORD` / `MAILLAB_DOMAIN`),CLI 向导也会按 `MAIL_PROVIDER` 跳过无关字段。

配置会自动验证临时邮箱后端和 CPA 的连通性,失败会提示具体原因。

### 2.5 邮箱后端归属验证

Web 面板的 SetupPage 把邮箱后端配置拆成 4 步状态机,每一步必须前一步通过才能解锁:

1. **后端类型** — 在「cf_temp_email」/「maillab」中选一个;切换会重置后续状态。
2. **服务器连接** — 填入 `*_BASE_URL` / `MAILLAB_USERNAME`(maillab 才需要)/ `*_PASSWORD`,点击「测试连接」会同时跑指纹嗅探(防止 issue#1 错配)+ 凭据校验。
3. **域名归属** — 后端探到 `domain_list` 时显示下拉,否则手动输入。点击「验证归属」会创建 `probe-{ts}{uuid}` 探测邮箱并立即删除,确认管理员持有该域名。
4. **保存配置** — 域名验证通过后才能保存,Settings 页面同样支持后续切换并提示「重启服务后生效」。

错误码与修复方向见 [配置说明 → 错误码对照表](configuration.md#错误码对照表apimail-providerprobe)。

### Docker 部署

方式一:编辑配置文件

```bash
cp .env.example data/.env
nano data/.env   # 填入实际配置
docker compose restart
```

方式二:Web 页面配置

直接打开 `http://your-server:8787`,会显示配置向导页面,在浏览器中填写。

如果你需要让浏览器流量走宿主机 SOCKS5 代理,请先确认容器内可以解析并访问宿主机代理地址(例如 `host.docker.internal`,或你自己提供的宿主机网关别名)。

然后在 `data/.env` 中加入:

```dotenv
PLAYWRIGHT_PROXY_URL=socks5://host.docker.internal:1080
PLAYWRIGHT_PROXY_BYPASS=localhost,127.0.0.1
```

如果代理需要认证,可以写成:

```dotenv
PLAYWRIGHT_PROXY_URL=socks5://username:password@host.docker.internal:1080
```

## 第三步:管理员登录

配置完成后,需要先用 ChatGPT Team 管理员账号登录。

### 通过 Web 面板

1. 打开 `http://your-server:8787`
2. 输入 API Key 进入面板
3. 进入「设置」页
4. 输入管理员邮箱,点击「开始登录」
5. 按提示输入密码或邮箱验证码
6. 选择 Team workspace(如 `Idapro`)
7. 登录成功后会自动保存到 `state.json`

### 通过命令行

```bash
uv run autoteam admin-login --email your-admin@example.com
```

## 第四步:首次轮转

```bash
uv run autoteam rotate 3
```

或在 Web 面板「账号池操作」页点击「智能轮转」。

首次运行会:
1. 同步 Team 实际成员到本地
2. 检查所有 active 账号额度
3. 移出额度低于阈值的账号
4. 优先复用 standby 中额度已恢复的旧号
5. 不够时自动创建新账号
6. 同步 active 认证文件到 CPA

> **注意:**
> `rotate 3` / `fill 3` 中的 `3` 指的是 **Team 总人数目标**,不是“本地管理账号数量”。当前运行契约最多为 `1 owner + 2 managed children`。
> 如果 Team 中已经有 owner / 外部成员,它们也会计入总数。

## 第五步:日常使用

### 方式一:API 模式(推荐)

```bash
uv run autoteam api
```

API 模式下:
- Web 面板集中管理日常操作
- 后台自动巡检(默认每 5 分钟)
- 可在「同步中心」中做对账与双向同步
- 可在「OAuth 登录」页手动导入账号

### 方式二:手动执行

```bash
uv run autoteam status      # 查看状态
uv run autoteam check       # 检查额度
uv run autoteam rotate 3    # 智能轮转
uv run autoteam sync        # 同步到 CPA
uv run autoteam pull-cpa    # 从 CPA 拉回本地
```

## 常见流程

### 添加更多账号

```bash
uv run autoteam rotate 3   # 补满到 3 个总席位
# 或
uv run autoteam add        # 自动注册并添加一个
# 或
uv run autoteam manual-add # 手动 OAuth 导入一个账号
```

### 清理多余账号

```bash
uv run autoteam cleanup 3  # 保留 3 个总席位
```

### 从 CPA 恢复认证文件到本地

```bash
uv run autoteam pull-cpa
```

或在 Web 面板「同步中心」页点击「拉取 CPA」。

该操作会:
- 从 CPA 下载 `codex-*.json`
- 清理同账号重复文件
- 按本地命名规范重写到 `auths/`
- 将新导入账号补进 `accounts.json`(默认标记为 `standby`## 下一步

- [配置详解](configuration.md)
- [工作原理](architecture.md)
- [API 文档](api.md)
- [常见问题](troubleshooting.md)