vault backup: 2026-11-05 14:57:55

This commit is contained in:
admin committed 2026-11-05 14:57:56 +08:00
1 parent 8a356eb5c7
commit b1531a1763
4 files changed
+184 -326

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@
"autoCommitMessage": "vault backup: {{date}}", "autoCommitMessage": "vault backup: {{date}}",
"commitMessageScript": "", "commitMessageScript": "",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss", "commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 1, "autoSaveInterval": 10,
"autoPushInterval": 0, "autoPushInterval": 0,
"autoPullInterval": 0, "autoPullInterval": 0,
"autoPullOnBoot": false, "autoPullOnBoot": false,
+5 -5
View File
@@ -13,12 +13,12 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "工具相关/NewAPI搭建与上线完整实战指南.md", "file": "日常文档/obsidian学习.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "NewAPI搭建与上线完整实战指南" "title": "obsidian学习"
} }
}, },
{ {
@@ -216,10 +216,12 @@
}, },
"active": "bf2a0beebbd3d1e9", "active": "bf2a0beebbd3d1e9",
"lastOpenFiles": [ "lastOpenFiles": [
"日常文档/AI Agent发展趋势分析:Coding Agent成为AGI突破口.md",
"工具相关/NewAPI搭建与上线完整实战指南.md",
"工具相关/Gitea部署与Obsidian自动备份.md",
"工具相关/www.md", "工具相关/www.md",
"项目文档/徐工/蓝牙/徐工项目软件烧录文档.pdf.ldenc", "项目文档/徐工/蓝牙/徐工项目软件烧录文档.pdf.ldenc",
"工具相关/CPA部署全流程.md", "工具相关/CPA部署全流程.md",
"工具相关/NewAPI搭建与上线完整实战指南.md",
"AI/AI应用开发.md", "AI/AI应用开发.md",
"日志/2026/日志11月.md", "日志/2026/日志11月.md",
"工具相关/NEWapi.md", "工具相关/NEWapi.md",
@@ -252,8 +254,6 @@
"项目文档/徐工/语音.md", "项目文档/徐工/语音.md",
"项目文档/徐工/优化开机速度.md", "项目文档/徐工/优化开机速度.md",
"项目文档/徐工/蓝牙/bluetooth_git_summary.md", "项目文档/徐工/蓝牙/bluetooth_git_summary.md",
"项目文档/徐工/蓝牙/蓝牙模块流程概览.md",
"项目文档/徐工/蓝牙/蓝牙模块开发熟悉手册.md",
"42d68e79e0122117fc941868202bfc9d.png", "42d68e79e0122117fc941868202bfc9d.png",
"项目文档/犀重/升级流程图.jpg", "项目文档/犀重/升级流程图.jpg",
"工具学习/redmine_stats/tongli_stats.png", "工具学习/redmine_stats/tongli_stats.png",
@@ -0,0 +1,178 @@
# Gitea 部署与 Obsidian 自动备份
> 完成时间:2026-11-05
> 服务器:腾讯云新加坡 43.156.118.130(Ubuntu 24.04)
> 用途:私人代码仓库 + Obsidian 笔记自动备份,替代被封的 GitHub 账号
---
## 一、Gitea 是什么
自己服务器上的私人 GitHub:存代码、记版本、能回滚。开源免费(MIT 协议),全部功能不收费。数据在自己手里,没人能封。
---
## 二、部署(Docker,一条命令)
> 注意:NewAPI 已占用 3000 端口,Gitea 改走 **3001**。
SSH 上服务器(`ssh ubuntu@43.156.118.130`,再 `sudo -i`),跑:
```bash
mkdir -p /opt/gitea
docker run -d \
--name gitea \
-p 127.0.0.1:3001:3000 \
-v /opt/gitea:/data \
--restart unless-stopped \
gitea/gitea:latest
```
检查:
```bash
docker ps --filter 'name=gitea' --format '{{.Status}} {{.Ports}}'
```
看到 `Up` 和 `127.0.0.1:3001->3000` 即成功。
**现状**:容器名 `gitea`,数据卷 `/opt/gitea`,数据库 SQLite(默认),开机自启,管理员账号 `admin`。
---
## 三、访问方式:SSH 隧道
Gitea 只绑了 `127.0.0.1`,必须走隧道访问,浏览器开 `http://localhost:3001`。
`tunnel.bat`(位于 `F:\AI\docker\cpa-deploy\tunnel.bat`)已加入 3001 转发,现有 7 个端口:
| 端口 | 用途 |
| --- | --- |
| 8317 | CPA 主 API + 管理面板 |
| 8085 / 1455 / 54545 / 51121 / 11451 | Google OAuth 授权回调端口 |
| **3001** | **Gitea** |
双击 tunnel.bat,保持窗口开着。单独开隧道时用:
```powershell
ssh -N -L 3001:127.0.0.1:3001 ubuntu@43.156.118.130
```
---
## 四、初始化(只做一次)
浏览器开 `http://localhost:3001`,安装页保持默认(数据库 SQLite3),往下翻到**管理员账号**,填用户名、密码、邮箱,点**安装 Gitea**,跳转到登录页即完成。
---
## 五、推代码:第一次踩过的两个坑
### 坑 1:Git 没设用户名,提交失败
现象:`git commit` 后提示 `nothing added to commit but untracked files present`,随后 `git push` 报 `error: src refspec main does not match any`。
原因:新电脑 Git 没配身份,提交被拦,根本没产生提交。
解决(先设身份再提交):
```powershell
git config --global user.name "admin"
git config --global user.email "beyond1008@gmail.com"
git add .
git commit -m "first commit"
```
### 坑 2:本地分支不叫 main
现象:`git push -u origin main` 报 `error: src refspec main does not match any`(提交已成功时)。
原因:本地默认分支是 `master`,不是 `main`。
解决(改名再推):
```powershell
git branch -M main
git push -u origin main
```
### 正常推送流程(以后每次)
```powershell
git add .
git commit -m "改了什么"
git push
```
**现有仓库**:`test`(F:\AI\docker 首次推送)、`Obsidian`(笔记库)。
---
## 六、Obsidian 自动备份(Obsidian Git 插件)
### 1. 建仓库
Gitea 里点右上角 `+` → 新建仓库,名 `Obsidian`。
### 2. 装插件
Obsidian → 设置(左下角齿轮)→ 第三方插件 → 关掉**安全模式** → 浏览 → 搜 `Vinzent` → 点 **Git**(作者 Vinzent,3.4M 下载)→ 安装 → 启用。
### 3. 笔记库初始化并推送
笔记库位置:`F:\AI\Obsidian`。在 PowerShell 里跑(隧道保持开着):
```powershell
cd F:\AI\Obsidian
git init
git add .
git commit -m "first commit"
git remote add origin http://localhost:3001/admin/Obsidian.git
git branch -M main
git push -u origin main
```
推时填 admin 和 Gitea 密码。
### 4. 开自动备份
关掉 Obsidian 再重开 → 设置 → 第三方插件 → Git:
- **Automatic** → **Auto commit-and-sync interval (minutes)** 由 `0` 改成 `10`(0 = 关闭)
- **Sync** 里确认 **Push on commit-and-sync** 和 **Pull on commit-and-sync** 都是开着的
此后每 10 分钟自动提交并推送,写笔记不用管。
> 注意:自动推送走 `localhost:3001`,隧道必须开着。隧道关了推不上去,下次开隧道后会自动补推。
---
## 七、另一台电脑怎么下载笔记
1. 装 Git(git-scm.com)。
2. 开隧道(新建 `gitea-tunnel.bat`,双击运行,窗口保持开着):
```bat
@echo off
ssh -N -L 3001:127.0.0.1:3001 ubuntu@43.156.118.130
pause
```
3. 克隆(进想放笔记的文件夹):
```powershell
git clone http://localhost:3001/admin/Obsidian.git
```
填 admin 和 Gitea 密码。
4. Obsidian 里点"打开文件夹作为仓库",选克隆下来的文件夹。
5. 同样装 Obsidian Git 插件、开 Auto commit-and-sync,即可双向自动备份。
---
## 八、服务器上现在跑的东西(2026-11-05)
| 服务 | 位置/端口 | 状态 |
| --- | --- | --- |
| Xray + Shadowsocks(梯子) | 8388,systemd 服务 `xray-ss` | 正常 |
| CPA(Gemini Pro 转 API) | Docker,127.0.0.1:8317 | 正常 |
| NewAPI | Docker,127.0.0.1:3000 | 正常 |
| Nginx | 域名 api.trivoo.website | 正常 |
| **Gitea** | **Docker,127.0.0.1:3001** | **正常** |
| 3x-ui | 已停用(`systemctl stop x-ui`),但仍开机自启 | 待处理:`sudo systemctl disable x-ui` |
-320
View File
@@ -1,320 +0,0 @@
# 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 记录直接点击删除即可。