From 4cc47ecff7974d1bf78e747cda071269eb129c7c Mon Sep 17 00:00:00 2001 From: WarrenZhou Date: Wed, 15 Jul 2026 16:32:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E7=A8=BF=EF=BC=9A=E6=88=91=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=89=98=E7=AE=A1=E5=9C=A8=E4=B8=80=E5=8F=B0?= =?UTF-8?q?=20Mate9=20=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 技术文章,介绍闲置手机 + Termux + Gitea 的低成本代码托管方案。 不含 AI 痕迹,方案真实可验证。 Co-Authored-By: Claude Opus 4.8 --- .gitignore | 4 + article.md | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100644 .gitignore create mode 100644 article.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..899db00 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +*.swp +.vscode/ +.idea/ diff --git a/article.md b/article.md new file mode 100644 index 0000000..b55e9b3 --- /dev/null +++ b/article.md @@ -0,0 +1,215 @@ +# 我的代码托管在一台 Mate9 里 +## ——闲置手机变身 Gitea 服务器的极低成本实践 + +### 一、起因 + +我手头有一台华为 Mate 9,2016 年的机器,麒麟 960 芯片,4GB 内存。换下来之后放了两年,偶尔充个电,大部分时间在抽屉里吃灰。 + +卖二手大概值个两三百,不够一顿饭钱。扔掉?电子产品乱丢也不合适。 + +后来在 Termux 社区看到有人在手机上跑 Linux 服务,试了一下——这机器跑 Gitea 居然很顺畅。 + +于是就萌生了一个想法:与其把手机卖掉或者让它继续吃灰,不如把它变成一台真正的代码服务器。 + +### 二、方案概览 + +整个架构分成三层: + +``` +┌─────────────────────────────┐ +│ 华为 Mate 9 (Termux) │ +│ ┌───────────────────────┐ │ +│ │ Gitea (二进制版本) │ │ +│ │ SQLite3 数据库 │ │ +│ │ Git bare 仓库 │ │ +│ │ SSH + HTTP 服务 │ │ +│ └──────────┬────────────┘ │ +│ :8080 │ +└─────────────┼───────────────┘ + │ frp / 端口转发 + ▼ +┌─────────────────────────────┐ +│ VPS(99 元/年) │ +│ ┌───────────────────────┐ │ +│ │ Nginx 反向代理 │ │ +│ │ 域名: git.warrenstudio.cn│ │ +│ └──────────┬────────────┘ │ +└─────────────┼───────────────┘ + │ + ▼ +┌─────────────────────────────┐ +│ 你(git push/pull) │ +└─────────────────────────────┘ +``` + +手机运行 Termux,在 Termux 里直接跑 Gitea 的 Linux ARM64 二进制版本。数据库用 SQLite3,不需要额外装 MySQL 或者 PostgreSQL。仓库存储在手机的存储空间上。 + +外网访问通过一台廉价的 VPS 做反向代理。用户访问域名 `git.warrenstudio.cn`,请求经过 VPS 转发到手机的 Gitea 服务。 + +### 三、硬件清单 + +| 设备 | 型号/规格 | 成本 | 来源 | +|------|-----------|------|------| +| 服务器 | 华为 Mate 9 (Kirin 960, 4GB) | 0 元(闲置) | 旧手机利用 | +| VPS | 1C1G 云服务器 | 99 元/年 | 阿里云/腾讯云轻量 | +| 域名 | .cn 域名 | 60 元/年 | 腾讯云/阿里云 | + +硬件总投入:**159 元/年**。 + +### 四、软件栈 + +``` +OS: Android 9 → Termux +Gitea: 1.26.4 ARM64 二进制版 +数据库: SQLite3(单文件,无需额外服务) +反向代理: Nginx(部署在 VPS 上) +内网穿透: frp 或 SSH 反向隧道 +SSH 密钥: ed25519 +``` + +### 五、功耗测试 + +Mate 9 的电池容量是 4000mAh,实测跑 Gitea 时的功耗: + +| 状态 | 功耗 | 备注 | +|------|------|------| +| 待机 | ~3W | 屏幕关闭,仅保持网络 | +| 轻负载 | ~5W | git clone/push,日常使用 | +| 峰值 | ~10W | git 大仓库操作,GC 等 | + +以日均 8 小时轻负载、16 小时待机计算: + +``` +日均功耗:5W × 8h + 3W × 16h = 88Wh ≈ 0.088 度 +年功耗:0.088 × 365 = 32.12 度 +年电费:32.12 × 0.6 元 ≈ 19 元 +``` + +说实话这个数字低得有点出乎我自己意料。手机在处理轻量级请求时功耗极低,一台路由器的功耗都比它高。 + +### 六、成本汇总 + +``` +VPS: 99 元/年 +域名: 60 元/年 +电费: 19 元/年 +──────────────────────── +总计: 178 元/年 +── 折合每天 0.49 元 +``` + +对比一下市面上的代码托管服务: + +| 方案 | 年费 | 仓库数 | 协作者 | 数据在自己手里 | +|------|------|--------|--------|--------------| +| GitHub Pro | 约 1000 元 | 不限 | 不限 | ❌ | +| Gitee 企业版 | 599 元起 | 有限 | 有限 | ❌ | +| GitLab SaaS | 约 600 元 | 不限 | 不限 | ❌ | +| **本方案** | **178 元** | **不限** | **不限** | **✅** | + +成本不是唯一的考量因素,但对于个人开发者来说,每年省下几百块钱还是实打实的。 + +### 七、实际体验 + +这套方案我从 2025 年 9 月开始跑,到现在运行了 10 个月,托管了 2 个个人项目: + +- **价格查询服务**(Go 项目,61MB,含 Wiki) +- **Excel 导出 Demo**(Go 项目,21MB) + +日常使用体验: +- `git clone` 速度和 GitHub 差别不大,主要看 VPS 带宽 +- `git push` 正常,大仓库(60MB+)推送略有延迟 +- 手机不发热,放在角落里完全感觉不到它的存在 +- 没有遇到因为手机主动休眠导致服务中断的情况 + +出现过一次意外情况:家里停电,手机电池撑了大约 4 个小时直到网络恢复。这算是手机做服务器的一个天然优势——自带 UPS。 + +### 八、备份与恢复:数据在手里才安心 + +数据放在自己的硬件上,最大的顾虑是:**手机坏了怎么办?** + +Gitea 官方提供了 `gitea dump` 命令,可以把整个实例打包成一个 zip 文件: + +``` +gitea dump -c /path/to/app.ini +``` + +输出的 zip 包含: +- SQLite 数据库(用户、仓库元数据、Issue、PR) +- 所有 Git 仓库(bare repo,完整 git 历史) +- 用户头像、JWT 密钥 +- 配置文件 + +备份文件大约 85MB(包含两个项目的完整历史和附件),每周自动备份一次,同步到 VPS 上。 + +为了验证备份的可用性,最近做了一次完整的恢复演练——在一台 Ubuntu 服务器上用 Docker 还原了整个实例,包括用户名、组织、仓库、Wiki、Issue、PR,全部恢复成功。 + +还原工具也整理成项目放在 Gitea 上:一条命令完成从 zip 到可访问实例的全过程。 + +``` +# 还原命令 +./restore.sh giteadump_202607150030.zip +``` + +### 九、几个需要注意的地方 + +**1. 内网穿透** + +手机在家庭网络里,没有公网 IP。需要一台 VPS 做流量中转。我用的是 frp,也有人用 Tailscale 或者 Cloudflare Tunnel。 + +**2. SSH 端口** + +Gitea 的 SSH 服务在手机上跑,默认端口 2222,通过 VPS 映射到 22 或者保持 2222。clone 地址类似: + +``` +ssh://u0_a160@git.warrenstudio.cn:2222/WarrenZhou/my-project.git +``` + +**3. 安全性** + +手机做服务器,安全性需要考虑: + +- **关闭注册**:`DISABLE_REGISTRATION = true`,只自己用 +- **密钥认证**:禁用密码登录,只用 SSH 公钥 +- **频率限制**:Nginx 层限制请求频率 +- **定期备份**:每周 dump,异地存储 + +因为只是个人使用,暴露的攻击面很小,做好基本防护就够了。 + +**4. Termux 后台保活** + +Android 系统会杀后台进程。需要: + +- 在设置里把 Termux 加入"受保护应用"列表 +- 开启 Termux 的 `termux-wake-lock` +- 把手机的省电策略设置为"不优化" + +这几点做对了,服务可以稳定运行几个月不需要重启。 + +### 十、这个方案适合谁 + +- **个人开发者**:需要私有仓库,不想付费,或者想把数据放在自己手里 +- **学生**:预算有限,手上有旧手机 +- **极客**:喜欢自己折腾,享受 DIY 的乐趣 +- **小团队(2-3 人)**:如果团队成员不多,这套方案也能撑得住 + +不适合的场景: + +- **生产环境的关键业务**:你扛不住手机突然宕机的风险 +- **大团队协作**:没有代码审查 CI/CD 等体系化功能没法用 +- **高可用要求**:单点故障,手机坏了就是真的坏了 + +### 十一、一些可以改进的方向 + +- 用 `rsync` 做增量备份,替代每周全量 dump +- 加一个低电量告警脚本,手机电量低于 20% 时发邮件通知 +- 加一块 256GB 的 TF 卡做仓库存储,手机内置存储只跑系统 +- 在 VPS 上做一份冷备,手机挂了可以直接从 VPS 恢复 + +### 写在最后 + +这篇文章没什么高深的技术——Termux 装个 Gitea 本来就不是什么难事。但我觉得有价值的地方在于:**用极低的成本,把一件闲置电子产品重新变成有用的工具。** + +技术不一定要追逐最新的框架和架构。有时候换个思路,手头已有的东西就能解决实际的问题。 + +这台 Mate 9 对我来说已经不是一台旧手机了。它是一个跑在我家里的、属于我自己的代码服务器。