270 lines
9.1 KiB
Markdown
270 lines
9.1 KiB
Markdown
# 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`。
|
||
|
||
---
|
||
|
||
## 三、访问方式:域名(2026-11-06 已配好)+ SSH 隧道
|
||
|
||
**域名**:**https://g.trivoo.website**,直接打开就能登录,不用开隧道。
|
||
|
||
**隧道**(备用):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
|
||
```
|
||
|
||
---
|
||
|
||
## 四、域名是怎么配的(2026-11-06,下次照抄)
|
||
|
||
域名:**https://g.trivoo.website**。故意没用 `git` 开头——`git` 太招摇,证书透明日志一查就知道这是个 git 服务;`g` 低调一点。
|
||
|
||
**1. DNS 解析(Spaceship)**:`trivoo.website` → Advanced DNS → 加一条 A 记录,Host `g`,Value `43.156.118.130`,TTL 30 min。
|
||
|
||
**2. Nginx 反代(服务器上)**:新建 `/etc/nginx/sites-available/g.trivoo.website`,照着 `api.trivoo.website` 的结构写,`proxy_pass` 改成 `http://127.0.0.1:3001`,只留 `listen 80`:
|
||
|
||
```bash
|
||
ln -s /etc/nginx/sites-available/g.trivoo.website /etc/nginx/sites-enabled/
|
||
nginx -t && systemctl reload nginx
|
||
```
|
||
|
||
**3. 证书**:
|
||
|
||
```bash
|
||
certbot --nginx -d g.trivoo.website
|
||
```
|
||
|
||
证书有效期到 2027-02-04,Certbot 已设自动续期。
|
||
|
||
**4. 改 Gitea 的对外地址**:Gitea 配置里还记着旧地址,克隆链接会显示错。改掉并重启:
|
||
|
||
```bash
|
||
sed -i 's|ROOT_URL = http://localhost:3001/|ROOT_URL = https://g.trivoo.website/|' /opt/gitea/gitea/conf/app.ini
|
||
docker restart gitea
|
||
```
|
||
|
||
验证:浏览器打开域名能看到登录页,仓库页面的克隆地址变成 `https://g.trivoo.website/admin/仓库名.git`。
|
||
|
||
### 安全提醒
|
||
|
||
配了域名之后,登录页就挂在公网了,不再是以前的"隐身"状态。安全靠两条:**管理员密码够强**(长、随机),以及**保持更新**(Gitea 出安全补丁就及时升,Docker Copilot 一键更新)。仓库默认是私有的,不登录看不到。
|
||
|
||
### 不想用了怎么关
|
||
|
||
随时能关回隧道模式:
|
||
|
||
```bash
|
||
# 服务器上删 Nginx 配置
|
||
rm /etc/nginx/sites-enabled/g.trivoo.website
|
||
rm /etc/nginx/sites-available/g.trivoo.website
|
||
systemctl reload nginx
|
||
```
|
||
|
||
再去 Spaceship 删掉 `g` 那条解析。关完 Gitea 就回到只有隧道能进的状态,证书不用管,过期自动作废。
|
||
|
||
---
|
||
|
||
## 五、初始化(只做一次)
|
||
|
||
浏览器开 `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`,隧道必须开着。现在有了域名,可以把远程地址改成域名,**不用开隧道也能推**:
|
||
>
|
||
> ```powershell
|
||
> cd F:\AI\Obsidian
|
||
> git remote set-url origin https://g.trivoo.website/admin/Obsidian.git
|
||
> ```
|
||
>
|
||
> 改完验证一次:`git push`,能推上去就说明通了。另一台电脑克隆时也可以直接用域名地址,不用开隧道。
|
||
|
||
---
|
||
|
||
## 八、另一台电脑怎么下载笔记
|
||
|
||
现在有了域名,最简单的是直接用域名克隆,不用开隧道:
|
||
|
||
```powershell
|
||
git clone https://g.trivoo.website/admin/Obsidian.git
|
||
```
|
||
|
||
填 admin 和 Gitea 密码。然后 Obsidian 里点"打开文件夹作为仓库",选克隆下来的文件夹,同样装 Obsidian Git 插件、开 Auto commit-and-sync,即可双向自动备份。
|
||
|
||
还想走隧道的话(备用):
|
||
|
||
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,即可双向自动备份。
|
||
|
||
---
|
||
|
||
## 九、常见问题:打不开 Gitea 怎么办
|
||
|
||
### 隧道窗口"不动了"是正常的
|
||
|
||
`ssh -N` 的意思是"只建隧道、不给命令行"。输完密码后窗口停住不动、没有提示符,**就是隧道通了的样子**。窗口保持开着别关,关了隧道就断了。
|
||
|
||
### 打不开 `http://localhost:3001` 的排查顺序
|
||
|
||
1. **隧道开着吗?**——tunnel.bat 窗口或单独的 3001 隧道窗口,哪个关了 3001 就断了。重新双击 tunnel.bat(新版已含 3001)。
|
||
2. **端口冲突**——如果单独的 3001 隧道窗口还开着,tunnel.bat 里的 3001 就绑不上(`bind: address already in use`)。先把所有隧道窗口都关掉,再只开一个。
|
||
3. **容器在跑吗?**——SSH 上服务器跑:
|
||
```bash
|
||
docker ps --filter 'name=gitea' --format '{{.Status}} {{.Ports}}'
|
||
```
|
||
看不到 `Up` 就是容器停了,跑 `docker start gitea`。
|
||
|
||
### 记住一条
|
||
|
||
**Gitea 现在有两条路**:域名 `https://g.trivoo.website` 直接进(不用隧道),或者隧道 `localhost:3001` 进。域名打不开时先看隧道那条能不能进,分清是反代问题还是 Gitea 本身的问题。
|
||
|
||
---
|
||
|
||
## 十、服务器上现在跑的东西(2026-11-06)
|
||
|
||
| 服务 | 位置/端口 | 状态 |
|
||
| --- | --- | --- |
|
||
| Xray + Shadowsocks(梯子) | 8388,systemd 服务 `xray-ss` | 正常 |
|
||
| CPA(Gemini Pro 转 API) | Docker,127.0.0.1:8317 | **已死:Google 403 ToS 停用(2026-11-06)** |
|
||
| NewAPI | Docker,127.0.0.1:3000 | 正常(DeepSeek 渠道可用) |
|
||
| Nginx | 域名 api.trivoo.website | 正常 |
|
||
| **Gitea** | **Docker,127.0.0.1:3001;域名 https://g.trivoo.website** | **正常** |
|
||
| Docker Copilot | Docker,127.0.0.1:8080→12712;域名 https://docker.trivoo.website | 正常(2026-11-06 新装) |
|
||
| 3x-ui | 已停用(`systemctl stop x-ui`),但仍开机自启 | 待处理:`sudo systemctl disable x-ui` |
|