first commit

This commit is contained in:
admin committed 2026-11-05 14:35:04 +08:00
commit 669f49b1d6
342 files changed
+320811

No files matched your search

@@ -0,0 +1,505 @@
# Android Studio C 盘空间清理
> 适用系统:Windows 10/11,PowerShell。
> 本文结合 2026-06-30 本机实测结果整理,重点服务 Android Studio、Gradle、Android SDK 占用排查和安全清理。
---
## 一、问题背景
Android Studio 开发环境会在 C 盘积累大量文件,常见来源包括:
| 现象 | 常见原因 | 影响 |
|---|---|---|
| C 盘空间不足 | Android SDK、Gradle 缓存、Android Studio 缓存持续增长 | 无法安装新软件或更新系统 |
| 构建速度变慢 | 缓存损坏、旧版本依赖堆积 | 编译失败或反复下载依赖 |
| IDE 启动变慢 | 索引、插件、日志、缓存过多 | Android Studio / VS Code 响应变慢 |
| 模拟器占用大 | system-images、AVD 镜像、快照文件堆积 | C 盘快速膨胀 |
本机实测:
| 时间 | C 盘剩余空间 | 说明 |
|---|---:|---|
| 清理前 | `10.63 GB` | C 盘接近紧张 |
| 第一批安全缓存清理后 | `15.40 GB` | 释放 `4.77 GB` |
| 第二批 Gradle 缓存清理后 | `22.05 GB` | 追加释放 `6.65 GB` |
---
## 二、清理原则
### 2.1 先扫描,后清理
清理前必须先确认:
1. 当前 C 盘剩余空间。
2. 哪些目录占用最高。
3. 目标目录是否是缓存、临时文件或可重新下载的数据。
4. 是否需要备份。
5. 是否会影响当前 Android / Gradle 项目构建。
### 2.2 删除前确认备份
本地删除操作执行前必须明确询问:
```text
是否先备份?
```
如果用户明确回复“不备份”,再执行清理。
如果目录可能包含账号数据、聊天记录、工程源码、SDK 必需组件,不应直接删除。
### 2.3 清理风险分级
| 等级 | 类型 | 示例 | 建议 |
|---|---|---|---|
| 低风险 | 临时文件、下载缓存、可再生安装包缓存 | `Temp`、`npm-cache`、VS Code 扩展安装包缓存 | 可直接清理 |
| 中低风险 | 构建缓存 | `.gradle\caches`、`.gradle\daemon`、`.gradle\wrapper` | 可清理,但下次构建会重新下载 |
| 中风险 | SDK 可选组件 | NDK、system-images、旧版 build-tools | 需要确认开发需求 |
| 高风险 | 配置、账号、聊天、项目数据 | Tencent、kingsoft、Android Studio 配置、工程目录 | 不建议手动删除 |
---
## 三、常见占用目录
### 3.1 Android 开发相关目录
| 目录 | 变量表示 | 说明 | 本机实测 |
|---|---|---|---:|
| Android SDK | `%LOCALAPPDATA%\Android\Sdk` | SDK、平台、构建工具、模拟器镜像 | `7.72 GB` |
| Android Studio 缓存 | `%LOCALAPPDATA%\Google\AndroidStudio2025.2.2` | IDE 索引、插件、缓存 | `4.92 GB` |
| Gradle 缓存 | `%USERPROFILE%\.gradle` | Gradle 依赖、Wrapper、Daemon | 清理前约 `6.5 GB` |
| Android Studio 程序 | `%ProgramFiles%\Android` | IDE 安装目录 | `3.09 GB` |
| Android 配置 | `%USERPROFILE%\.android` | AVD 配置、adb key 等 | 本机较小 |
### 3.2 本机当前高占用目录
清理两批缓存后,C 盘主要占用如下:
| 路径 | 占用 | 判断 |
|---|---:|---|
| `C:\Users` | `52.19 GB` | 用户数据最大头 |
| `C:\Program Files` | `22.38 GB` | 程序安装目录 |
| `C:\Windows` | `22.06 GB` | 系统目录,不建议手动动 |
| `C:\Program Files (x86)` | `5.22 GB` | 32 位程序 |
| `C:\ProgramData` | `4.28 GB` | 程序公共数据 |
`Administrator\AppData` 仍是重点:
| 路径 | 占用 | 说明 |
| ------------------------------ | --------: | ----------------------- |
| `AppData\Local\Android` | `7.72 GB` | Android SDK |
| `AppData\Local\Google` | `7.43 GB` | Chrome + Android Studio |
| `AppData\Roaming\Tencent` | `3.05 GB` | 微信/企微/腾讯相关数据 |
| `AppData\Local\Packages` | `2.28 GB` | Windows 应用数据 |
| `AppData\Local\Microsoft` | `2.28 GB` | Edge、WinGet、系统应用缓存等 |
| `AppData\Roaming\kingsoft` | `2.06 GB` | WPS 相关数据 |
| `AppData\Roaming\TDAppDesktop` | `1.74 GB` | 腾讯文档 |
---
## 四、PowerShell 扫描命令
### 4.1 查看 C 盘总空间
```powershell
Get-PSDrive -Name C |
Select-Object `
@{Name='UsedGB';Expression={[math]::Round($_.Used/1GB,2)}}, `
@{Name='FreeGB';Expression={[math]::Round($_.Free/1GB,2)}}, `
@{Name='TotalGB';Expression={[math]::Round(($_.Used+$_.Free)/1GB,2)}} |
Format-List
```
### 4.2 扫描 C 盘根目录占用
```powershell
$rows = @()
Get-ChildItem -LiteralPath 'C:\' -Force -ErrorAction SilentlyContinue |
Where-Object { -not ($_.Attributes -band [IO.FileAttributes]::ReparsePoint) } |
ForEach-Object {
$sum = 0
if ($_.PSIsContainer) {
$sum = (Get-ChildItem -LiteralPath $_.FullName -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
} else {
$sum = $_.Length
}
if ($null -eq $sum) { $sum = 0 }
$rows += [PSCustomObject]@{
Path = $_.FullName
SizeGB = [math]::Round(($sum / 1GB), 2)
}
}
$rows | Sort-Object SizeGB -Descending | Select-Object -First 25 | Format-Table -AutoSize
```
### 4.3 扫描 Android / Gradle 相关目录
```powershell
$paths = @(
"$env:LOCALAPPDATA\Android\Sdk",
"$env:LOCALAPPDATA\Google\AndroidStudio2025.2.2",
"$env:USERPROFILE\.gradle",
"$env:USERPROFILE\.android",
"$env:ProgramFiles\Android"
)
$rows = @()
foreach ($p in $paths) {
if (Test-Path -LiteralPath $p) {
$sum = (Get-ChildItem -LiteralPath $p -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
if ($null -eq $sum) { $sum = 0 }
$rows += [PSCustomObject]@{
Path = $p
SizeGB = [math]::Round(($sum / 1GB), 2)
}
}
}
$rows | Sort-Object SizeGB -Descending | Format-Table -AutoSize
```
### 4.4 扫描 SDK 子目录
```powershell
$sdk = "$env:LOCALAPPDATA\Android\Sdk"
Get-ChildItem -LiteralPath $sdk -Force -ErrorAction SilentlyContinue |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$sum = (Get-ChildItem -LiteralPath $_.FullName -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
if ($null -eq $sum) { $sum = 0 }
[PSCustomObject]@{
Path = $_.FullName
SizeGB = [math]::Round(($sum / 1GB), 2)
}
} |
Sort-Object SizeGB -Descending |
Format-Table -AutoSize
```
### 4.5 扫描 Gradle 子目录
```powershell
$gradle = "$env:USERPROFILE\.gradle"
Get-ChildItem -LiteralPath $gradle -Force -ErrorAction SilentlyContinue |
ForEach-Object {
$sum = 0
if ($_.PSIsContainer) {
$sum = (Get-ChildItem -LiteralPath $_.FullName -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
} else {
$sum = $_.Length
}
if ($null -eq $sum) { $sum = 0 }
[PSCustomObject]@{
Path = $_.FullName
SizeGB = [math]::Round(($sum / 1GB), 2)
}
} |
Sort-Object SizeGB -Descending |
Format-Table -AutoSize
```
---
## 五、安全清理清单
### 5.1 第一批:低风险缓存
本机已执行,实际释放 `4.77 GB`。
| 路径 | 清理前 | 清理后 | 风险 |
|---|---:|---:|---|
| `%LOCALAPPDATA%\Temp` | `1.40 GB` | `0.05 GB` | 低 |
| `%APPDATA%\npm-cache` | `1.09 GB` | `0 GB` | 低 |
| `%APPDATA%\Code\CachedExtensionVSIXs` | `1.12 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\tdappdesktop-updater` | `0.43 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\timetrack-ui-updater` | `0.29 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\obsidian-updater` | `0.28 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\@getpaseodesktop-updater` | `0.21 GB` | `0 GB` | 低 |
### 5.2 第二批:Gradle 缓存
本机已执行,实际释放 `6.65 GB`。
| 路径 | 清理前 | 清理后 | 风险 |
|---|---:|---:|---|
| `%USERPROFILE%\.gradle\caches` | `4.81 GB` | `0 GB` | 中低 |
| `%USERPROFILE%\.gradle\daemon` | `0.30 GB` | `0 GB` | 低 |
| `%USERPROFILE%\.gradle\wrapper` | `1.39 GB` | `0 GB` | 中低 |
影响:
- 下次 Android / Gradle 项目构建会重新下载 Gradle 发行包和依赖。
- 第一次构建会明显变慢。
- 依赖重新下载完成后恢复正常。
---
## 六、安全清理脚本
### 6.1 第一批低风险缓存
执行前请先确认:已决定不备份,且目标路径与清单一致。
```powershell
$targets = @(
"$env:LOCALAPPDATA\Temp",
"$env:APPDATA\npm-cache",
"$env:APPDATA\Code\CachedExtensionVSIXs",
"$env:LOCALAPPDATA\tdappdesktop-updater",
"$env:LOCALAPPDATA\timetrack-ui-updater",
"$env:LOCALAPPDATA\obsidian-updater",
"$env:LOCALAPPDATA\@getpaseodesktop-updater"
)
foreach ($target in $targets) {
if (-not (Test-Path -LiteralPath $target)) { continue }
$resolved = (Resolve-Path -LiteralPath $target -ErrorAction Stop).ProviderPath.TrimEnd('\')
$expected = $target.TrimEnd('\')
if ($resolved -ne $expected) {
throw "Refusing to clean unexpected path: $resolved"
}
Get-ChildItem -LiteralPath $resolved -Force -ErrorAction SilentlyContinue |
ForEach-Object {
Remove-Item -LiteralPath $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
```
### 6.2 第二批 Gradle 缓存
```powershell
$targets = @(
"$env:USERPROFILE\.gradle\caches",
"$env:USERPROFILE\.gradle\daemon",
"$env:USERPROFILE\.gradle\wrapper"
)
foreach ($target in $targets) {
if (-not (Test-Path -LiteralPath $target)) { continue }
$resolved = (Resolve-Path -LiteralPath $target -ErrorAction Stop).ProviderPath.TrimEnd('\')
$expected = $target.TrimEnd('\')
if ($resolved -ne $expected) {
throw "Refusing to clean unexpected path: $resolved"
}
Get-ChildItem -LiteralPath $resolved -Force -ErrorAction SilentlyContinue |
ForEach-Object {
Remove-Item -LiteralPath $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
```
### 6.3 清理后复查
```powershell
Get-PSDrive -Name C |
Select-Object `
@{Name='UsedGB';Expression={[math]::Round($_.Used/1GB,2)}}, `
@{Name='FreeGB';Expression={[math]::Round($_.Free/1GB,2)}}, `
@{Name='TotalGB';Expression={[math]::Round(($_.Used+$_.Free)/1GB,2)}} |
Format-List
```
---
## 七、Android SDK 按需清理
Android SDK 不建议直接整目录删除,应优先通过 Android Studio 的 SDK Manager 管理。
菜单路径:
```text
Tools -> SDK Manager
```
### 7.1 可按需删除的 SDK 组件
| 组件 | 路径 | 是否可删 | 判断标准 |
|---|---|---|---|
| NDK | `%LOCALAPPDATA%\Android\Sdk\ndk` | 按需 | 不做 JNI/C/C++/Rust/Flutter Native 时可删 |
| system-images | `%LOCALAPPDATA%\Android\Sdk\system-images` | 按需 | 只用真机调试时可删 |
| 旧版 platforms | `%LOCALAPPDATA%\Android\Sdk\platforms` | 按需 | 不维护旧 Android 版本时可删 |
| 旧版 build-tools | `%LOCALAPPDATA%\Android\Sdk\build-tools` | 按需 | 项目未指定旧版本时可删 |
| sources | `%LOCALAPPDATA%\Android\Sdk\sources` | 可选 | 不需要查看源码时可删 |
### 7.2 不建议手动删除的 SDK 组件
| 组件 | 原因 |
|---|---|
| `platform-tools` | 包含 `adb`,真机调试必需 |
| 当前项目使用的 `platforms` | 编译目标依赖 |
| 当前项目使用的 `build-tools` | 构建依赖 |
| 当前项目使用的 NDK 版本 | Native 编译依赖 |
### 7.3 SDK Manager 清理步骤
1. 打开 Android Studio。
2. 进入 `Tools -> SDK Manager`。
3. 在 `SDK Platforms` 中取消不需要的旧 Android 版本。
4. 在 `SDK Tools` 中勾选 `Show Package Details`。
5. 取消不需要的旧版 Build Tools、NDK、Command-line Tools。
6. 点击 `Apply`,由 Android Studio 执行卸载。
---
## 八、Android Studio 缓存处理
### 8.1 IDE 缓存目录
本机 Android Studio 缓存目录:
```text
%LOCALAPPDATA%\Google\AndroidStudio2025.2.2
```
实测占用约 `4.92 GB`。
不建议直接删除整个目录,因为它可能包含:
- IDE 索引缓存
- 插件缓存
- 本地历史
- 项目打开记录
- 配置状态
### 8.2 推荐操作
优先使用 Android Studio 内置功能:
```text
File -> Invalidate Caches...
```
适用场景:
- 索引异常。
- IDE 明显卡顿。
- 频繁出现缓存相关构建问题。
影响:
- Android Studio 会重建索引。
- 首次重新打开项目会慢。
- 比手动删除整个目录安全。
---
## 九、不建议直接清理的目录
| 路径 | 原因 |
|---|---|
| `%LOCALAPPDATA%\Android\Sdk` 整目录 | 会破坏 Android 开发环境 |
| `%LOCALAPPDATA%\Google\AndroidStudio*` 整目录 | 可能丢配置和索引状态 |
| `%APPDATA%\Tencent` | 可能包含微信/企微聊天和账号数据 |
| `%APPDATA%\kingsoft` | 可能包含 WPS 文档、账号、模板数据 |
| `%APPDATA%\TDAppDesktop` | 可能包含腾讯文档本地数据 |
| `%ProgramFiles%\WindowsApps` | Windows 应用系统目录 |
| `C:\Windows\WinSxS` | 系统组件存储,本机 DISM 显示不推荐清理 |
| `C:\Program Files\Android` | Android Studio 程序目录,清理应通过卸载器 |
---
## 十、清理决策流程
```text
1. 先扫描 C 盘空间
|
v
2. 找到占用最高目录
|
v
3. 判断目录类型
|-- 临时文件 / 缓存 / 安装残留 -> 可列入低风险清理
|-- Gradle 缓存 -> 可清理,但提醒下次构建会变慢
|-- SDK 可选组件 -> 询问是否需要 Native / 模拟器 / 旧版本
|-- 聊天、账号、配置、工程源码 -> 不直接清理
|
v
4. 删除前确认是否备份
|
v
5. 精确校验目标路径后执行清理
|
v
6. 复查 C 盘剩余空间和目标目录残留
```
---
## 十一、常见问题 FAQ
### Q1:清理 Gradle 后项目无法立即编译?
原因:依赖和 Gradle Wrapper 被清理,需要重新下载。
处理:
```powershell
cd <项目目录>
.\gradlew.bat build
```
如果下载慢,检查代理、Gradle 镜像源和网络。
### Q2:清理后模拟器无法启动?
原因:可能删除了 system-images 或 AVD 镜像。
处理:
```text
Tools -> SDK Manager -> SDK Platforms / SDK Tools
```
重新安装对应系统镜像。
### Q3:Native 项目编译失败?
原因:NDK 被删除或版本不匹配。
处理:
1. 查看项目 `local.properties`、`build.gradle` 或 `gradle.properties` 中指定的 NDK 版本。
2. 通过 SDK Manager 重新安装对应 NDK。
### Q4:能不能直接删除整个 Android SDK?
不建议。除非确定不再做 Android 开发,或者准备完整重装 Android Studio 和 SDK。
### Q5:能不能清理 `WindowsApps` 或 `WinSxS`?
不建议手动清理。
- `WindowsApps` 是 Microsoft Store / Windows 应用目录。
- `WinSxS` 是系统组件存储,应通过系统工具或 DISM 判断。
- 本机 DISM 结果显示:`推荐使用组件存储清理:否`。
---
## 十二、下一步建议
当前本机已清理低风险缓存和 Gradle 缓存,C 盘剩余空间从 `10.63 GB` 提升到 `22.05 GB`。
后续如果还要继续释放空间,建议顺序:
1. 用 SDK Manager 检查 Android SDK 是否存在不用的旧版平台、Build Tools、NDK、system-images。
2. 检查是否仍需要本机所有 Android Studio / Java / WSL / 360 / 腾讯文档程序。
3. 对 Tencent、kingsoft、TDAppDesktop 只做软件内清理,不直接删目录。
4. 对 Android Studio 执行 `Invalidate Caches`,不要手动删除整个配置目录。
---
## 十三、关联记录
- 本次实际清理:低风险缓存释放 `4.77 GB`,Gradle 缓存释放 `6.65 GB`。
- 当前 C 盘:总计 `118.24 GB`,剩余 `22.05 GB`。
- 整理依据:本机 PowerShell 扫描结果、Windows 删除安全确认流程、Android Studio / Gradle 常见缓存机制。
+134
View File
@@ -0,0 +1,134 @@
# CPA(CLIProxyAPI)部署全流程
把 Google AI Pro 订阅转成 API,给 Codex / Claude Code 用。
实测时间:2026-11-05,VPS:腾讯云新加坡 Ubuntu 24.04(43.156.118.130)。
最终链路:
- 直连:Codex → `localhost:8317`(SSH 隧道)→ CPA → Google
- 经 NewAPI:Codex → `https://api.trivoo.website` → NewAPI → CPA → Google
---
## 一、前置条件
1. VPS 上已有 Docker、NewAPI(`new-api` 容器在跑)
2. Google AI Pro 订阅有效
3. 本地有 `deploy-cpa.sh` 和 `tunnel.bat`(放同一目录,如 `F:\AI\docker\cpa-deploy\`)
---
## 二、部署 CPA
### 1. 开隧道
双击 `tunnel.bat`,输入 VPS 的 ubuntu 用户密码(输入时不显示字符,输完回车)。
**"没反应"是正常的**——隧道建好就是静默挂着。窗口保持开着。
### 2. 跑部署脚本
新开 PowerShell:
```powershell
(Get-Content F:\AI\docker\cpa-deploy\deploy-cpa.sh) -join "`n" | ssh ubuntu@43.156.118.130 "sudo bash -s"
```
### 3. 检查输出
- `cli-proxy-api | Up`,6 个端口全绑 `127.0.0.1`(8317/8085/1455/54545/51121/11451)
- 无 key → HTTP 401,有 key → HTTP 200
- 输出两把钥匙,收好(也在服务器 `/opt/cpa/KEYS.txt`):
- `MGMT_KEY`:进管理面板用
- `CPA_API_KEY`(`sk-cpa-` 开头):给 NewAPI 渠道 / 直连用
---
## 三、面板登录排障(必看,有坑)
浏览器开 `http://localhost:8317/management.html`(隧道必须开着),输 MGMT_KEY。
### 坑 1:403 "remote management disabled"
原因是部署脚本生成的 `config.yaml` 里 `management.allow-remote: false` 把管理 API 整个关了。
修复(SSH 到服务器,root):
```bash
sed -i 's/allow-remote: false/allow-remote: true/' /opt/cpa/config.yaml
cd /opt/cpa && docker compose restart
```
**安全性**:端口本来就只绑了 `127.0.0.1`(`docker ps` 可验证),公网连不进来,改成 `true` 也只有隧道能进。
### 坑 2:别用 `grep -v 'key'` 看配置
配置里的 `secret-key` 存的是 bcrypt 哈希,`grep -v 'key'` 会把它过滤掉,让你误以为没配。看完整配置直接 `cat`。
### 坑 3:不要手动往配置里加明文 secret-key
CPA 启动时会自动把明文哈希后写回,手动加会导致 `mapping key "secret-key" already defined` 重复键,容器起不来(restart 循环)。
---
## 四、OAuth 登录(Antigravity)
1. 面板左侧 **OAuth 登录**
2. 找到 **Antigravity**,点 `+`,弹窗里点 **打开链接**
3. Google 授权页选 Pro 账号 → 允许
4. 跳回 `localhost:1455` 显示 **Authentication successful!** 即成功
5. 面板 **认证文件** 页能看到 Antigravity 凭证
---
## 五、Codex 直连 CPA(同事的野路子,最快)
ccswitch → Codex 供应商 → 新建:
- 名称:`cpa.gemini`
- API 请求地址:`http://localhost:8317/v1`
- API Key:`CPA_API_KEY`
- 模型列表:点"获取模型列表",选 `gemini-3-flash` / `gemini-3.8-flash-high` 等真名
**前提**:tunnel.bat 一直开着。
### 排障
- Codex 报 `404 (no body)`:模型名不对。浏览器开 `http://localhost:8317/v1/models`,返回 `{"error":"Missing API key"}` 说明端点正常,只是缺 key;然后去 ccswitch 里重新拉模型列表。
- `429 Too Many Requests`:Google 限流,等几分钟再试,别连续刷。
---
## 六、走 NewAPI(公网,不用开隧道)
### 1. NewAPI 建渠道
渠道 → 添加渠道 → 选 **OpenAI** 类型(Codex 说 OpenAI 协议):
- 名称:`CPA-Gemini-OpenAI`
- API 地址:`http://cli-proxy-api:8317`(**不要加 `/v1`**,页面有提示)
- API 密钥:`CPA_API_KEY`
- 模型:**从上游获取**,会拉到 8 个(2 个 Claude + 5 个 Gemini 真名 + 1 个 OpenAI),勾选 5 个 Gemini
- 分组 `default`,启用,创建 → 测试
> 注意:Anthropic 类型的渠道拉到的是混淆过的 Claude 壳名字(`claude-fable-5-dd-...`),OpenAI 类型拉到的是 Gemini 真名。给 Codex 用选 OpenAI 类型。
### 2. ccswitch 加供应商
- 名称:`newapi-gemini`
- API 请求地址:`https://api.trivoo.website/v1`
- API Key:你的 NewAPI token(`sk-` 开头,之前配 DeepSeek 用的那个)
- 模型:获取列表,选 gemini 模型
### 3. 验证
NewAPI → 使用日志,能看到成功的调用记录(模型、Token、耗时)即跑通。
---
## 七、两条路怎么选
| | 直连 CPA | 经 NewAPI |
|---|---|---|
| 地址 | `localhost:8317/v1` | `api.trivoo.website/v1` |
| 隧道 | 必须一直开 | 不用 |
| 延迟 | 少一跳 | 多一跳 |
| 管理 | 无 | NewAPI 统一看日志/计费 |
不冲突,可并存,ccswitch 里切换供应商就行。
---
## 八、跟 Claude Code 的关系
本流程是给 **Codex** 用的(OpenAI 协议)。如果也要给 Claude Code 用:
- NewAPI 里再建一个 **Anthropic** 类型渠道,API 地址 `http://cli-proxy-api:8317`(不加 `/v1`),模型从上游拉(会是 Claude 壳名字,全选)
- ccswitch 里 Claude Code 供应商指向 `https://api.trivoo.website`
---
## 九、一句话总结
部署(隧道+脚本)→ 面板 `allow-remote: true` → OAuth 登录 Antigravity → Codex 直连 `localhost:8317/v1` 或经 NewAPI(OpenAI 类型渠道)。429 等几分钟,404 检查模型名。
@@ -0,0 +1,101 @@
当使用 `git clone` 遇到 `Permission denied` 或一直提示输入密码时,通常是因为本地没有配置 SSH 密钥。请按以下步骤操作:
## 1. 检查并生成 SSH 密钥
### 检查现有密钥
```bash
ls -al ~/.ssh
```
查看是否有 `id_ed25519` 或 `id_rsa` 等文件。
### 生成新密钥
```bash
ssh-keygen -t ed25519 -C "your_email@example.com"
```
**注意:**
- 执行后全程按回车键即可
- 不要随意输入其他字符作为文件名
- 如果使用自定义用户目录,路径会是 `/personal/你的用户名/.ssh/id_ed25519`
## 2. 获取公钥内容
```bash
cat ~/.ssh/id_ed25519.pub
```
**关键步骤:**
- 打印出以 `ssh-ed25519` 开头的公钥内容
- 完整复制整行内容(包括开头和结尾)
- 如果路径不同,请使用实际路径
## 3. 添加公钥到远程 Git 服务器
### 操作步骤:
1. 登录公司的 Git 平台(如 GitLab、Gitea 等)
2. 进入个人设置 -> **SSH Keys (SSH 公钥)**
3. 将第2步复制的整行内容粘贴进去
4. 保存设置
## 4. 启动代理并加载私钥
```bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
```
**注意事项:**
- 如果使用自定义路径,需要指定完整绝对路径
- 例如:`/personal/donghongzhi/.ssh/id_ed25519`
- 如果遇到代理连接问题,先执行 `eval "$(ssh-agent -s)"`
## 5. 测试与克隆
### 测试连接(可选)
```bash
ssh -T git@<公司Git服务器IP>
```
### 正常拉取代码
```bash
git clone git@<公司Git服务器IP>:<项目路径>.git
```
## 常见问题处理
### 问题1:代理连接失败
**错误信息:** `Could not open a connection to your authentication agent`
**解决方案:**
```bash
eval "$(ssh-agent -s)"
```
### 问题2:权限被拒绝
**错误信息:** `Permission denied (publickey)`
**排查步骤:**
1. 确认公钥已正确添加到Git服务器
2. 检查私钥是否已加载:`ssh-add -l`
3. 验证SSH配置:`ssh -v git@<服务器IP>`
## 小贴士
- **换电脑/重装系统时:** 只需重新走一遍这套流程
- **密钥管理:** 建议为不同设备生成不同的密钥对
- **安全性:** 私钥文件请妥善保管,不要泄露
- **路径问题:** 注意检查实际的用户目录路径
+64
View File
@@ -0,0 +1,64 @@
# 会话记录总结:大模型 API 中转与 Docker 部署指南
本文件记录了关于开源大模型 API 网关(`new-api`)、相关生态工具、Docker 部署环境选择以及如何在 Linux 上进行操作的完整对话过程。
---
## 1. 核心仓库分析:New API 与 Sub2API 的区别
- **QuantumNous/new-api (New API)**:
- **定位**:专业、通用的企业级/团队级自托管 AI API 网关。
- **核心**:基于官方 API Key 进行路由分发、负载均衡、高可用及精细化计费/额度管理。几乎无封号风险。
- **Wei-Shaw/sub2api (Sub2API)**:
- **定位**:主打订阅池化(拼车共享)的一站式 AI API 中转服务。
- **核心**:将网页端包月账号(如 ChatGPT Plus、Claude Pro)通过协议逆向转为标准 API 共享使用。极易触发风控封号。
---
## 2. 边缘工具生态链(5个开源仓库分析)
- **`farion1231/cc-switch`**:跨平台的桌面端 API 调度与外壳管理工具,用于一键切换命令行工具的 API 供应商及 MCP 插件。
- **`totec448-spec/chat-on-steroids`**:将网页版 ChatGPT 结合浏览器扩展与本地 MCP 协议,赋予其读写本地代码和执行终端命令能力的本地编程助手。
- **`fb0sh/MCPod`**:用于打包、运行和管理本地 MCP Server 的容器化或后端轻量环境。
- **`router-for-me/CLIProxyAPI`**:底层的协议转译与中转核心,将各大厂命令行工具或免费测试通道包装为标准的 OpenAI/Claude API。
- **`linguo2625469/workbuddy2api-panel`**:腾讯 CodeBuddy 的逆向网关与自动化任务管理面板(内置自动做任务脚本,现已停更)。
---
## 3. 部署环境与操作系统选择
- **系统核心原则**:Docker 的核心技术强依赖 Linux 内核。
- **服务器系统建议**:
- **强烈反对**:在旧版 Windows Server 2012 上强行部署。
- **强烈推荐**:**Ubuntu 24.04 LTS** 或 Debian 12。如果购买的是 Windows 系统服务器,可在腾讯云后台免费一键重装为 Linux。
- **硬件替代方案**:使用同事的 **Mac mini** 运行 Docker Desktop 也是极佳且稳定的本地服务器选择。
---
## 4. New API 服务器端部署全流程(Linux + Docker)
1. **配置域名解析**:
- 在域名注册商处添加 A 记录,将子域名(例如 `api.trivoo.online`)解析至服务器公网 IP。
2. **安装 Docker 基础环境**:
```bash
curl -fsSL https://get.docker.com | bash
sudo systemctl enable --now docker
```
3. **拉取代码并配置密钥**:
```bash
git clone https://github.com/QuantumNous/new-api.git
cd new-api
openssl rand -hex 32
```
修改 `docker-compose.yml`,设置 `SESSION_SECRET`、HTTPS 信任域名及数据库/Redis 密码。
4. **启动后台容器**:
```bash
docker compose up -d
```
5. **配置 Nginx 与 HTTPS**:
- 安装 Nginx 和 Certbot,配置反向代理将流量转发至 `http://127.0.0.1:3000` 并签发 SSL 证书。
6. **后台初始化与调用**:
- 访问域名创建管理员账号,添加上链渠道(官方 API Key),生成分发令牌即可在客户端调用。
---
## 5. 远程访问与 Linux 运维互动
- **访问方式**:Linux 服务器通常通过命令行操作。初学者可直接使用腾讯云后台自带的 **Workbench(网页终端)**,无需在本地下载复杂软件。
- **AI 运维模式**:用户只需负责打开终端,将报错或需求交由 AI,“复制粘贴”AI 提供的标准命令,即可轻松实现无痛部署。
@@ -0,0 +1,320 @@
# New API 专属大模型网关搭建与 HTTPS 上线全流程实战指南
> **实战环境记录**
> - **云服务器**:腾讯云新加坡轻量应用服务器(Ubuntu 24.04 LTS,2核 2G 内存,公网 IP:`43.156.118.130`)
> - **共存服务**:Xray Shadowsocks 代理服务(端口 `8388`,全程独立运行,互不干扰)
> - **域名提供商**:Spaceship(根域名:`trivoo.website`,网关二级子域名:`api.trivoo.website`)
> - **网关核心**:New API(官方镜像 `calciumion/new-api:latest`,Docker 容器化 + 内置 SQLite 持久化)
> - **反代与加密**:Nginx 反向代理 + Let's Encrypt 权威 SSL 证书(Certbot 自动化定时续期)
---
## 目录
- [一、全局架构与准备工作](#一全局架构与准备工作)
- [二、第一阶段:域名注册与 DNS 解析配置](#二第一阶段域名注册与-dns-解析配置)
- [三、第二阶段:云服务器防火墙安全配置](#三第二阶段云服务器防火墙安全配置)
- [四、第三阶段:New API 容器化部署](#四第三阶段new-api-容器化部署)
- [五、第四阶段:Nginx 反向代理与 SSL 证书自动化](#五第四阶段nginx-反向代理与-ssl-证书自动化)
- [六、第五阶段:New API 初始化与渠道配置](#六第五阶段new-api-初始化与渠道配置)
- [七、第六阶段:客户端接入与高频踩坑排错手册](#七第六阶段客户端接入与高频踩坑排错手册)
- [八、第七阶段:日常运维、安全加固与一键清理](#八第七阶段日常运维安全加固与一键清理)
---
## 一、全局架构与准备工作
本方案采用**“单容器 SQLite + Nginx 本地反代 + Certbot 自动化证书”**的生产级架构:
```
[ 客户端 (Cline / Cherry Studio / 代码) ]
│ HTTPS (端口 443)
▼
[ Nginx 反向代理 (api.trivoo.website) ] ── (自动申请/更新 Let's Encrypt 证书)
│ HTTP (仅监听 127.0.0.1:3000,外部无法直连)
▼
[ New API 容器 (calciumion/new-api:latest) ]
│
┌─────────┴─────────┐
▼ ▼
[ 官方 DeepSeek API ] [ 自定义第三方聚合上游 ]
```
### 核心设计优势:
1. **轻量省资源**:相比 PostgreSQL + Redis 的重型部署,内置 SQLite 单容器仅占几十兆内存,完美兼容 2G 内存低配服务器,与已有代理服务(如 Xray)和谐共存。
2. **端口安全性**:New API 容器端口严格绑定在 `127.0.0.1:3000`,外部网络无法绕过 HTTPS 直接访问,防止明文直连与未授权嗅探。
3. **流式传输优化**:Nginx 明确关闭 `proxy_buffering`,保障大模型打字机流式输出(SSE)流畅无卡顿。
---
## 二、第一阶段:域名注册与 DNS 解析配置
### 1. 域名选购(以 Spaceship 为例)
1. 访问 [Spaceship 官网](https://www.spaceship.com/) 并注册/登录账号;
2. 搜索低成本优质后缀(如 `.website`、`.top`、`.xyz` 等,首年特价通常仅约 6~10 元人民币);
3. 选定域名(本次实战选定 `trivoo.website`,首年仅 7.88 元含 ICANN 认证工本费);
4. 通过绑定的 **支付宝(Alipay)** 扫码付款完成购买。
5. **重要防扣费设置**:购买完成后,在域名列表的 `Auto-renew` 列将开关拨至 **Off**,避免次年按原价自动续费。
### 2. 添加 DNS A 记录解析
1. 在 Spaceship 控制台点击域名右侧的 **Advanced DNS ↗**;
2. 点击 **Add Record**(或点击下方小圆圈 `A`):
- **Type**:`A`
- **Host**:`api`(即二级子域名,完整网址为 `api.trivoo.website`)
- **Value / Target IP**:`43.156.118.130`(你的云服务器公网 IP)
- **TTL**:保持默认或选择 `30 min` / `1 min`
3. 点击 **Add / Save** 保存,等待右侧出现绿色的 `ADDED` 提示。
---
## 三、第二阶段:云服务器防火墙安全配置
登录 [腾讯云轻量服务器控制台](https://console.cloud.tencent.com/lighthouse) -> 点击目标实例 -> **防火墙**,确保以下规则已放行:
| 应用类型 | 协议 | 端口 | 策略 | 作用说明 |
| :--- | :--- | :--- | :--- | :--- |
| Linux 登录 | TCP | 22 | 允许 | SSH 远程登录维护 |
| HTTP | TCP | 80 | 允许 | Certbot 申请 SSL 证书及 HTTP-01 验证 |
| HTTPS | TCP | 443 | 允许 | 安全加密 Web 访问及客户端 API 调用 |
| 自定义 | TCP | 8388 | 允许 | 已有的 Xray / Shadowsocks 梯子服务 |
> **安全注意**:不要在公网防火墙中开放 `3000` 端口。生产环境下 3000 端口只走服务器内部回环转发,所有外网流量统一由 443 端口接入。
---
## 四、第三阶段:New API 容器化部署
### 1. 登录服务器并切换 root 权限
在本地终端执行:
```bash
ssh ubuntu@43.156.118.130
sudo -i
```
*(必须通过 `sudo -i` 确保提示符为 `root@...:~#`,避免因普通权限导致 Permission Denied)*
### 2. 初始化目录并生成专属随机密钥
```bash
# 创建持久化数据与日志目录
mkdir -p /opt/new-api/data /opt/new-api/logs
cd /opt/new-api
# 生成 64 位密码级随机安全会话密钥
echo "SESSION_SECRET=$(openssl rand -hex 32)" > .env
chmod 600 .env
```
### 3. 编写安全生产型 docker-compose.yml
```bash
cat > /opt/new-api/docker-compose.yml <<'EOF'
services:
new-api:
image: calciumion/new-api:latest
container_name: new-api
restart: unless-stopped
command: --log-dir /app/logs
# 严格绑定回环地址,禁止公网直连 3000
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./data:/data
- ./logs:/app/logs
environment:
- TZ=Asia/Shanghai
- ERROR_LOG_ENABLED=true
- BATCH_UPDATE_ENABLED=true
- NODE_NAME=new-api-sg-1
- STREAMING_TIMEOUT=300
- "SESSION_SECRET=${SESSION_SECRET:?未设置 SESSION_SECRET,请检查 .env}"
- SESSION_COOKIE_SECURE=true
- SESSION_COOKIE_TRUSTED_URL=https://api.trivoo.website
- TRUSTED_PROXIES=127.0.0.1,172.17.0.0/16
# 内存保护上限(防止高并发下拖垮同机代理服务)
mem_limit: 800m
EOF
```
### 4. 启动容器与状态检查
```bash
cd /opt/new-api
docker compose up -d
docker ps
```
回显中显示 `new-api` 状态为 `Up` 且端口为 `127.0.0.1:3000->3000/tcp` 即代表容器启动成功。
---
## 五、第四阶段:Nginx 反向代理与 SSL 证书自动化
### 1. 安装 Nginx 与 Certbot 证书套件
```bash
apt update && apt install -y nginx certbot python3-certbot-nginx
```
### 2. 写入 Nginx 站点配置
创建反向代理配置文件 `/etc/nginx/sites-available/api.trivoo.website`:
```bash
cat > /etc/nginx/sites-available/api.trivoo.website <<'EOF'
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name api.trivoo.website;
# 允许大文件上传(如语音转录、多模态图片)
client_max_body_size 100m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 协议支持(Realtime / Responses 升级通道)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 核心:关闭缓冲以支持打字机流式响应(SSE)
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 1800s;
proxy_send_timeout 1800s;
}
}
EOF
```
### 3. 启用站点并检查语法
```bash
ln -sf /etc/nginx/sites-available/api.trivoo.website /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
```
*(必须看到 `syntax is ok` 与 `test is successful`)*
### 4. 一键自动签发 Let's Encrypt 证书并启用 HTTPS
```bash
certbot --nginx -d api.trivoo.website --non-interactive --agree-tos -m admin@trivoo.website --redirect
```
执行完毕后出现:
`Congratulations! You have successfully enabled HTTPS on https://api.trivoo.website`
此时证书已自动安装,并已创建 systemd 自动续期定时器。
---
## 六、第五阶段:New API 初始化与渠道配置
### 1. 首次访问与系统向导
浏览器访问:`https://api.trivoo.website`
1. **数据库检查**:自动检测出 SQLite,直接点击「下一步」;
2. **管理员账户**:设定管理员用户名和高强度密码;
3. **完成初始化**:进入控制台主界面。
### 2. 接入官方渠道(以 DeepSeek 官方为例)
1. 左侧菜单栏点击 **「渠道」** -> 右上角 **「创建渠道」**;
2. **类型**:选择 `DeepSeek`;
3. **API 密钥**:填入 DeepSeek 官方以 `sk-` 开头的 API Key;
4. **模型**:点击快捷操作中的 **「填入相关模型」**,框内自动出现 `deepseek-chat` 与 `deepseek-reasoner` 标签;
5. 点击最底部 **「提交」**;
6. 在渠道列表中点击该卡片右上角的 **仪表盘图标(测速)**,出现绿色延迟(如 `554ms`)代表渠道通信成功。
### 3. 接入第三方自定义渠道(以 `apikey.fan` 聚合服务为例)
1. 点击 **「创建渠道」** -> 类型选 **`高级自定义`**(或 OpenAI 兼容);
2. **API 地址**:填入服务商的基础网关地址(如 `https://api.apikey.fan`);
3. **API 密钥**:填入该服务商提供的密钥;
4. **模型**:手动输入该上游支持的具体模型名(如 `gpt-5.6-terra`),**按回车确认生成标签**;
5. 点击提交并点击测试图标,验证连通性。
### 4. 生成调用令牌(分发密钥)
1. 左侧菜单栏点击 **「常规」 -> 「API 密钥」**(或「令牌」);
2. 点击右上角 **「创建密钥」**;
3. 设定名称(如 `default-token`),额度设为无限或指定额度;
4. 提交后在列表中点击 **「复制」**,获取专属于该网关的 `sk-xxxx` 令牌。
---
## 七、第六阶段:客户端接入与高频踩坑排错手册
### 1. 客户端标准配置示例
在任何支持第三方 API 的客户端(如 Cline、NextChat、Cherry Studio、Chatbox 等)中配置:
- **接口地址 / Base URL**:`https://api.trivoo.website/v1`
- **API Key**:填入后台生成的 `sk-xxxx` 令牌
- **模型名称**:填入渠道中已有的有效模型(如 `deepseek-chat` 或 `gpt-5.6-terra`)
---
### 2. 实战高频报错与精准排错对照
#### ❌ 错误 1:`404 Invalid URL (POST /v1/v1/messages)`
* **现象**:客户端报错 404,请求路径出现重复的 `/v1/v1`。
* **原因**:部分遵循 Anthropic / Claude 协议的客户端(如某些版本的 Cline),内部会自动为地址补全 `/v1/messages`。如果你在配置的 Base URL 中包含了 `/v1`,拼接后就会变成 `/v1/v1/messages`。
* **解决方案**:将客户端的 API 地址末尾的 `/v1` 删掉,改为 `https://api.trivoo.website`。
#### ❌ 错误 2:`503 No available channel for model xxx under group default`
* **现象**:客户端发起调用,返回 `model_not_found`。
* **原因**:客户端发送的模型请求名称(例如 `gpt-5.6-terra`),在 New API 的所有可用渠道模型列表中都不存在。
* **解决方案**:
- **方案 A(改客户端)**:将客户端的模型名称改为渠道真实支持的名字(如 `deepseek-chat`);
- **方案 B(改网关重定向)**:在 New API 对应渠道编辑页中,点击「设置模型重定向」,将外部请求的 `gpt-5.6-terra` 重定向映射到后端的 `deepseek-chat`。
#### ❌ 错误 3:`Permission denied` / `No such file or directory`
* **现象**:在服务器终端执行 Docker 或 Nginx 配置命令时报错。
* **原因**:新开的 SSH 会话默认处于普通用户 `ubuntu` 权限。
* **解决方案**:执行命令前务必先输入 `sudo -i` 切换到 `root` 账户。
#### ❌ 错误 4:Spaceship 登录报 `Invalid username or password`
* **现象**:明明输入了正确邮箱和密码,却无法登录 Spaceship。
* **原因**:Spaceship 强制要求在第一栏输入当初注册时设置的 **Username(用户名,如 `Beyond`)**,不支持直接使用邮箱登录。
* **解决方案**:在注册邮件中查找用户名,使用纯用户名登录。
---
## 八、第七阶段:日常运维、安全加固与一键清理
### 1. 生产环境安全加固(必做)
* **关闭公开注册**:
进入后台 `https://api.trivoo.website` -> **「系统设置」 -> 「登录注册」** -> 将 **「允许新用户注册」彻底关闭**。
*(防止域名暴露在公网后被爬虫扫描并注册账号白嫖接口额度)*
* **SSL 自动续期确认**:
Certbot 已经注册了 systemd 定时任务,可通过以下命令测试自动续期机制:
```bash
certbot renew --dry-run
```
### 2. 日常启停与重启
```bash
# 暂停 New API 网关(保留所有数据,释放 CPU/内存占用)
cd /opt/new-api && docker compose stop && systemctl stop nginx
# 重新启动 New API 网关
cd /opt/new-api && docker compose start && systemctl start nginx
# 查看实时运行日志
cd /opt/new-api && docker compose logs -f --tail=100 new-api
```
### 3. 一键卸载与彻底清理(恢复纯净服务器)
如果后续需要腾空服务器,执行以下步骤可在 1 分钟内完全清理痕迹,且**完全不影响服务器原有的代理与 SSH 服务**:
```bash
# 1. 停止并销毁容器及持久化目录
cd /opt/new-api && docker compose down
rm -rf /opt/new-api
# 2. 卸载 Nginx 站点配置
rm -f /etc/nginx/sites-enabled/api.trivoo.website /etc/nginx/sites-available/api.trivoo.website
systemctl reload nginx
# 3. 删除 Let's Encrypt 证书记录(可选)
certbot delete --cert-name api.trivoo.website
```
同时登录 Spaceship 域名控制台,将 `api.trivoo.website` 的 A 记录直接点击删除即可。
+66
View File
@@ -0,0 +1,66 @@
# Git 常用命令
> 开发中最常用的命令,简洁实用
---
## 日常操作
| 场景 | 命令 |
|------|------|
| **拉取代码** | `git pull` |
| **查看状态** | `git status` |
| **添加修改** | `git add .` |
| **提交** | `git commit -m "说明"` |
| **推送** | `git push` |
---
## 分支操作
| 场景 | 命令 |
|------|------|
| **查看分支** | `git branch -a` |
| **创建分支** | `git checkout -b <分支名>` |
| **切换分支** | `git checkout <分支名>` |
| **合并分支** | `git merge <分支名>` |
| **删除分支** | `git branch -d <分支名>` |
---
## 撤销操作
| 场景 | 命令 |
|------|------|
| **撤销修改** | `git restore <文件>` |
| **取消add** | `git restore --staged <文件>` |
| **回退上次提交** | `git reset --soft HEAD~1` |
| **暂存工作** | `git stash` |
| **恢复暂存** | `git stash pop` |
---
## 查看信息
| 场景 | 命令 |
| ------------ | ---------------------------- |
| **提交历史** | `git log --oneline` |
| **最近5条** | `git log -5 --oneline` |
| **文件修改历史** | `git log -p <文件>` |
| **查看差异** | `git diff` |
| 指定提交者 查看提交记录 | git log --author=lihai --all |
| | |
---
## 一句话流程
```
每天开始:git pull
完成任务:git add . && git commit -m "说明" && git push
切换任务:git stash && git checkout <分支>
```
---
> 💡 不记得命令用 `git help` 查看
+214
View File
@@ -0,0 +1,214 @@
# 工时填写
## 下次怎么叫 AI 填写
推荐直接这样说:
```text
填写工时,时间从 6月26日 到 6月30日,不备份,填完提交审核。
日志按工时考核月取 Obsidian 日志文件,内容按日期下面编号行原样填写,不带日期标题。
```
如果不确定是否备份,可以这样说:
```text
填写工时,时间从 7月26日 到 7月30日。先问我要不要备份。
```
## 固定路径
- Obsidian 根目录:`F:\AI\Obsidian`
- 工时日志目录:`F:\AI\Obsidian\日志\2026`
- 工时工具:`D:\softWare\timetrack-ui\项目工时管理.exe`
- 长期记录:`F:\AI\Obsidian\agent.md`
换电脑后如果路径变了,先告诉 AI 新路径。
## 日志文件选择规则
工时系统按考核月统计,周期通常是:
- 上月 26 日到本月 25 日,属于本月考核月。
因此日志文件按考核月取:
- `2026-05-26` 到 `2026-06-25`:取 `日志6月.md`
- `2026-06-26` 到 `2026-07-25`:取 `日志7月.md`
- `2026-07-26` 到 `2026-08-25`:取 `日志8月.md`
例如用户说“填写 6月26日到6月30日”,应取:
```text
F:\AI\Obsidian\日志\2026\日志7月.md
```
## 工作内容提取规则
日志格式示例:
```text
06.13 周六:
1.流转:
2.解决: 、
3.新增语音可见即可说功能
4.车控模块添加可见即可说的功能
5.分析鱼快倒车来电声音会从车机发出
```
提交到工时系统时只填日期标题下面的编号内容:
```text
1.流转:
2.解决: 、
3.新增语音可见即可说功能
4.车控模块添加可见即可说的功能
5.分析鱼快倒车来电声音会从车机发出
```
注意:
- 不填写 `06.13 周六:` 这种日期标题。
- 保留 `1.流转:`。
- 保留 `2.解决:`,即使后面为空或只有符号。
- 保留编号行原始顺序。
- 去掉日期段落之间多余空行。
- 不要自己改写、总结或删减工作内容。
## 填写原则
只提交同时满足以下条件的日期:
- HR 系统有考勤工时。
- 日志内容非空。
- 工时系统当前未登记或未提交。
跳过以下日期:
- HR 工时为空或系统提示“没有考勤工时”。
- 日志为空。
- 已提交审核或已审核通过。
默认填写:
- 项目名称:固定选择 `座舱类迭代项目集`。
- 比例:`100%`
- 单日一条明细。
- 工作内容:取日志中对应日期编号行。
- 提交后点击或调用“提交审核”。
项目注意事项:
- 用户已明确要求项目名称必须选择 `座舱类迭代项目集`。
- 如果系统配置或接口逻辑会把项目自动校正到其他项目,应先停止提交并告诉用户,不要继续按错误项目提交。
- 提交后必须查询详情确认项目名称或项目 ID 对应的是 `座舱类迭代项目集`。
## 工时工具连接方式
优先使用 Electron 调试接口,比坐标点击稳定。
如果工时工具已打开但调试端口不可用,可以重启并带调试端口:
```powershell
$exe = 'D:\softWare\timetrack-ui\项目工时管理.exe'
Get-Process | Where-Object { $_.Path -eq $exe } | Stop-Process -Force
Start-Sleep -Seconds 2
Start-Process -FilePath $exe -ArgumentList '--remote-debugging-port=9222','--remote-allow-origins=*'
```
检查调试端口:
```powershell
Invoke-RestMethod -Uri 'http://127.0.0.1:9222/json/version'
Invoke-RestMethod -Uri 'http://127.0.0.1:9222/json/list'
```
页面通常类似:
```text
file:///D:/softWare/timetrack-ui/resources/app.asar/dist/index.html#/home
```
## 常用接口线索
在页面上下文中调用接口,使用工具已有登录态,不要打印 token、密码或刷新令牌。
常用接口:
```text
GET /act/xmProjectWorktime/getHomeCalendarWorkTime/{考核月}
GET /act/xmProject/xmProjectList?userId={userId}&workDate={YYYY-MM-DD}
GET /act/hrUserWorktime/detail?userId={userId}&workDate={YYYY-MM-DD}
GET /act/xmProjectWorktime/{id}
POST /act/xmProjectWorktime/save
```
注意:
- 真正提交审核使用 `POST /act/xmProjectWorktime/save`。
- 不要直接用 `/act/xmProjectWorktime/checkSubmitTask` 代替提交,之前直接调用会返回权限不足。
- 如果接口返回“用户凭证已过期”,优先让工具刷新登录态,或让用户重新登录;不要记录或展示密码/token。
## 提交 Payload 参考
字段形状参考:
```json
{
"id": "",
"state": "",
"userId": "1399",
"deptId": 0,
"workDate": "2026-06-26",
"hrHours": "8",
"totalHours": "",
"agentFlag": 0,
"detailList": [
{
"id": "",
"workId": "",
"projectId": "项目ID",
"hours": "",
"ratio": 100,
"workContent": "日志编号内容",
"remark": ""
}
],
"createdBy": "",
"createdTime": "",
"updatedBy": "",
"updatedTime": "",
"appVersion": 1
}
```
## 提交后校验
提交后必须重新查日历和详情:
- `checkFlag: 3` 表示等待审核/已提交审核。
- 有 `id`、`lastTaskId`、`procInstId` 说明流程已生成。
- 再查详情确认 `workContent`、`projectId`、`ratio` 写入正确。
最终回复用户时列出:
- 总共提交几条。
- 成功日期。
- 跳过日期和原因。
- 每天实际提交的工作内容。
- 每天实际选择的项目名称、比例和 HR 工时。
- 明确告诉用户“填写了什么”,包括实际写入系统的工作内容。
- 如果发现系统自动校正项目或内容与预期不一致,要说明并标记为风险。
## 已知经验
- 2026-06-25 已提交审核,`checkFlag=3`。
- 2026-06-26 到 2026-06-30 已提交审核,共 5 条。
- 2026-07 考核月系统配置曾将项目从 `座舱类迭代项目集` 自动校正为 `基于国产高性能SOC边缘算力的设备自主诊断与预警系统`。用户后续明确要求项目名称必须选择 `座舱类迭代项目集`,如果再次出现自动校正,应先停止并告知用户。
## 安全要求
- 操作开始前先确认是否备份,除非用户已明确说“不备份”。
- 不在文档中保存密码、token、refresh token、验证码。
- 不覆盖用户已有日志内容。
- 不删除或回退用户文件。
- 完成后把关键结果追加到 `agent.md`。
+191
View File
@@ -0,0 +1,191 @@
# 梯子搭建流程(实测可用)
> 服务器:腾讯云新加坡轻量服务器,Ubuntu 24.04,IP:`43.156.118.130`
> 方案:手动安装 Xray + Shadowsocks(不用 3x-ui 面板)
> 实测:Clash 延迟 122ms,ip.sb 显示新加坡 IP,可正常上网
---
## 一、服务器购买(详细)
- **购买地址**:腾讯云国内站轻量服务器 https://cloud.tencent.com/product/lighthouse
- **地域**:新加坡(必须选海外地域;上海/北京/广州等国内地域做不了梯子)
- **镜像**:Ubuntu 24.04 LTS
- **套餐**:入门型,2核CPU / 2GB内存 / 40GB SSD / 20Mbps峰值带宽 / 每月0.5TB流量,**30元/月**
- **购买时长**:先买 **1个月**试用(30元),好用再续年付
- **避坑**:
- 别买"锐驰型"(35元/月那档,2核1G,不带流量包说明,不合适)
- 秒杀页的国内地域套餐(上海/北京/广州)再便宜也不能买
- 国际站(tencentcloud.com)注册需要+852号码,收不到验证码,走不通,直接用国内站
- **SSH 登录**:腾讯云 Ubuntu 镜像默认禁 root 登录,用 `ubuntu` 用户:`ssh ubuntu@服务器IP`,密码是购买时设的那个,进去后再 `sudo -i` 切 root
> 本次实测服务器 IP:`43.156.118.130`,1个月试用到期约 2026-12-03,到期前评估是否续费。
---
## 二、云服务商防火墙放行端口
腾讯云控制台 → 服务器 → 防火墙 → 添加规则:
| 端口 | 协议 | 策略 |
|------|------|------|
| 22 | TCP | 允许 |
| 8388 | TCP | 允许 |
| 8388 | UDP | 允许 |
来源空着不填(默认所有 IP)。
---
## 三、SSH 连上服务器
本地打开 PowerShell:
```powershell
ssh ubuntu@43.156.118.130
```
输入密码后,再切换到 root:
```bash
sudo -i
```
> 如果家里直连 SSH 超时,改用腾讯云网页控制台里的登录方式,效果一样。
---
## 四、生成密码并写 Xray 配置
**第 1 步:生成密码**(自己记下来,别发给别人):
```bash
PASS=$(openssl rand -base64 16); echo "你的密码是:$PASS"
```
忘记密码时可随时查看:
```bash
cat /root/xray-ss.json | grep password
```
**第 2 步:写配置文件**(整段复制粘贴回车):
```bash
cat > /root/xray-ss.json <<EOF
{
"log": {"loglevel": "warning"},
"inbounds": [
{
"port": 8388,
"protocol": "shadowsocks",
"settings": {
"method": "aes-256-gcm",
"password": "$PASS",
"network": "tcp,udp"
}
}
],
"outbounds": [{"protocol": "freedom"}]
}
EOF
```
> 注意:第 1 步和第 2 步要在同一个 SSH 窗口里做,否则 `$PASS` 变量对不上。
**第 3 步:下载 Xray**(如果还没有):
```bash
mkdir -p /usr/local/x-ui/bin
cd /tmp
curl -Ls -o xray.zip https://github.com/XTLS/Xray-core/releases/latest/download/Xray-linux-64.zip
unzip -o xray.zip xray -d /usr/local/x-ui/bin/
chmod +x /usr/local/x-ui/bin/xray-linux-amd64
```
> 本次实测用的是 Xray v26.6.27(从 3x-ui 安装包里直接拿的二进制文件)。
---
## 五、设为开机自启(systemd)
```bash
cat > /etc/systemd/system/xray-ss.service <<EOF
[Unit]
Description=Xray Shadowsocks
After=network.target
[Service]
ExecStart=/usr/local/x-ui/bin/xray-linux-amd64 -c /root/xray-ss.json
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable xray-ss
systemctl start xray-ss
sleep 2; systemctl is-active xray-ss
```
最后输出 `active` 就是成功。验证端口在监听:
```bash
ss -tlnp | grep 8388
```
---
## 六、Clash 客户端配置
Clash Verge → 订阅 → 新建本地配置文件,粘贴以下内容(`password` 换成你自己的密码):
```yaml
proxies:
- name: SS-Manual
type: ss
server: 43.156.118.130
port: 8388
cipher: aes-256-gcm
password: "填你的密码"
udp: true
proxy-groups:
- name: PROXY
type: select
proxies:
- SS-Manual
rules:
- MATCH,PROXY
```
保存 → 选中该配置 → 代理页测速,能出延迟数字就是通了。
---
## 七、验证真正可用
1. Clash 首页打开**系统代理**开关
2. 浏览器打开 `google.com`,能打开即成功
3. 打开 `ip.sb`,显示 `43.156.118.130 / 新加坡` 即确认流量走了服务器
---
## 八、常见问题
- **Clash 测速超时**:先对密码(服务器 `/root/xray-ss.json` 里的必须和 Clash 里一字不差),再查云防火墙 8388 有没有放行
- **SSH 连不上**:换腾讯云网页控制台登录
- **服务器重启后节点没了**:检查 `systemctl is-active xray-ss`,不是 active 就 `systemctl start xray-ss`
- **想改密码**:改 `/root/xray-ss.json` 里的 password,然后 `systemctl restart xray-ss`,Clash 里同步改
---
## 九、备注:为什么不用 3x-ui
3x-ui v3.11.0 面板装完后,VLESS+Reality(443)和 Shadowsocks(8388)都调不通:TCP 端口能连上,但协议层握手超时,服务器日志无报错。尝试过的排查:
- 确认防火墙放行、Xray 在监听、密钥成对匹配
- Xray 从 v26.10.21 降级到 v26.6.27(排除 ML-KEM 兼容问题)
- 重启服务器、换 v2rayN 客户端交叉验证、重建入站
全部无效。绕开 3x-ui、手动跑 Xray 后一次就通,判定为 3x-ui v3.x 的 bug。如需面板,慎用 v3.11.0。