Files
paper/article.md
WarrenZhou 4cc47ecff7 初稿:我的代码托管在一台 Mate9 里
技术文章,介绍闲置手机 + Termux + Gitea 的低成本代码托管方案。
不含 AI 痕迹,方案真实可验证。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 16:32:48 +08:00

8.5 KiB
Raw Blame History

我的代码托管在一台 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 对我来说已经不是一台旧手机了。它是一个跑在我家里的、属于我自己的代码服务器。