📚 Termux 无root学习系列
阶段一:环境搭建与终端基础 ✅ 已完成
01-05 Termux 安装 → 包管理 → 文件管理 → Vim/tmux
阶段二:编程开发环境 ✅ 已完成
06-09 Python → C/C++ → Node.js → Git
阶段三:网络与远程操作 ✅ 已完成
10-12 SSH → 网络工具 → 代理与安全通信
阶段四:Termux:API 与自动化 ✅ 已完成
13-14 硬件调用 → 定时任务自动化
阶段五:proot-distro 完整 Linux ✅ 已完成
15-17 proot-distro → Jupyter → 桌面环境 VNC
阶段六:AI 与 AIGC 实战 ✅ 已完成
18-20 LLM API → llama.cpp 本地推理 → RAG 知识库
阶段七:安全工具实战 ✅ 已完成
21-23 信息收集 → sqlmap/hydra → 哈希破解与取证
阶段八:自托管服务与综合实战(进行中)
24 Gitea 私有 Git 服务器与静态站托管(当前篇)
25 Telegram Bot 开发部署
26 Web 爬虫与数据采集管道
阶段九:综合项目与运维(共 2 篇,后续持续更新)

24 Gitea 私有 Git 服务器与静态站托管

难度:高级 · 阶段八 自托管服务与综合实战 · 前序知识:proot-distro + Git
读完本篇你将能:在 proot Ubuntu 中部署 Gitea 1.27.3 私有 Git 服务器,通过局域网与电脑协作开发,搭建静态网站托管,并利用 Git Hook 实现 push 后自动部署,让手机成为一台 24 小时在线的轻量代码托管平台。
📑 本文目录
01为什么在手机上搭建私有 Git 服务器
02Gitea 安装与初始化配置
03Gitea 基础使用:仓库、Wiki 与 Issues
04局域网共享:电脑与手机协作开发
05静态站点托管
06Git Hook 自动化部署
07持久化运行与监控
08分级练习
09知识回顾与下一篇预告

01 为什么在手机上搭建私有 Git 服务器

提到代码托管,大多数人第一反应是 GitHub、Gitee 这些公有云平台。但在某些场景下,你可能更希望代码完全掌握在自己手里:私密项目不愿上传第三方、内网环境没有公网、想学习自托管技术——这时候一台随身的手机就能充当轻量 Git 服务器。

Gitea 是一个用 Go 语言编写的轻量级 Git 托管平台,单二进制文件部署,内存占用仅几十 MB,非常适合在手机这种资源有限的设备上运行。它的功能涵盖仓库管理、Wiki、Issues、Pull Request、Webhook 等,界面风格与 GitHub 类似,上手几乎零成本。

💡 小贴士
把手机当作私有 Git 服务器的核心价值不在于性能,而在于随身性和零成本——你不需要额外购买云服务器或树莓派,口袋里的手机就是一台随时可用的开发协作节点。配合 proot Ubuntu,Gitea 在 ARM64 架构上运行稳定,完全能满足个人或小团队的轻量使用需求。

Gitea vs GitHub vs Gitee

三者的定位不同,不存在谁替代谁。下表从几个关键维度对比:

维度 Gitea(手机自托管) GitHub / Gitee
数据控制权 完全自主,代码只在本地 第三方托管,受平台政策约束
运行成本 零成本(利用闲置手机) 免费版有功能/容量限制
访问范围 默认局域网,需穿透才能外网 公网可访问,全球可达
性能 手机级,适合个人/小团队 企业级 CDN + 分布式
学习价值 高,完整掌握自托管全流程 低,开箱即用

可以把手机上的 Gitea 理解为一个"随身的代码保险箱"——你不会把所有家当都放进去,但私密项目、学习笔记、实验代码放在这里,既安全又方便随时取用。需要对外协作时,再推送到 GitHub 等公共平台。

02 Gitea 安装与初始化配置

Gitea 提供 ARM64 架构的预编译二进制文件,在 proot Ubuntu 中可以直接下载运行,无需编译。当前稳定版本为 1.27.3(2026 年 8 月发布)。

2.1 下载 ARM64 二进制

先确保已安装 proot-distro 的 Ubuntu 环境(见第 15 篇),进入 Ubuntu 后执行:

Ubuntu / proot
# 更新系统并安装依赖
apt update && apt install -y wget git sqlite3
# 下载 Gitea 1.27.3 ARM64 二进制
wget https://dl.gitea.com/gitea/1.27.3/gitea-1.27.3-linux-arm64
# 赋予执行权限
chmod +x gitea-1.27.3-linux-arm64
# 移动到系统路径并重命名
mv gitea-1.27.3-linux-arm64 /usr/local/bin/gitea
# 验证安装
gitea --version

验证成功会输出版本信息:

输出
Gitea version 1.27.3 built with Go 1.23

2.2 创建工作目录与配置

Gitea 需要一个工作目录存放仓库数据、配置文件和日志。建议在用户主目录下创建专门的文件夹:

Ubuntu / proot
# 创建工作目录结构
mkdir -p ~/gitea/{custom,data,log}
# 创建配置文件目录
mkdir -p ~/gitea/custom/conf
# 编写基础配置文件 app.ini
cat > ~/gitea/custom/conf/app.ini << 'EOF'
[server]
HTTP_PORT = 3000
ROOT_URL = http://localhost:3000/
DOMAIN = localhost
[database]
DB_TYPE = sqlite3
PATH = /root/gitea/data/gitea.db
[repository]
ROOT = /root/gitea/data/repositories
[security]
INSTALL_LOCK = false
EOF

配置文件中几个关键参数说明:

📋 关键配置项
HTTP_PORT:Gitea Web 服务监听端口,默认 3000,因无 root 不能用 80 端口
DB_TYPE:数据库类型,手机上用 SQLite 3 足够,无需额外安装数据库服务
INSTALL_LOCK:设为 false 时首次访问会进入安装向导,配置完自动改为 true
ROOT:仓库存储路径,所有 Git 仓库数据都存在这里

2.3 启动并完成初始安装

Ubuntu / proot
# 启动 Gitea(前台运行,方便看日志)
cd ~/gitea && gitea web

启动后,在手机浏览器中访问 http://localhost:3000,首次打开会看到安装向导页面:

1️⃣ 确认数据库类型为 SQLite3
2️⃣ 设置管理员账号(用户名 + 密码 + 邮箱)
3️⃣ 确认站点名称和 URL(http://localhost:3000)
4️⃣ 点击「立即安装」,等待 10 秒左右完成
⚠️ 常见错误
在 Termux 原生环境直接运行 Gitea 二进制 — Gitea 官方 ARM64 二进制是为 glibc 编译的,Termux 使用 bionic libc,直接运行会报 No such file or directory
✓ 正确:在 proot Ubuntu 中运行,Ubuntu 使用 glibc,与官方二进制完全兼容

03 Gitea 基础使用:仓库、Wiki 与 Issues

安装完成后,Gitea 的 Web 界面和 GitHub 高度相似。本节介绍最常用的三个功能:创建仓库、SSH 克隆、以及 Wiki/Issues 协作工具。

3.1 创建第一个仓库

登录 Gitea 后,点击右上角「+」→「新建仓库」,填写仓库名称(如 my-project)、描述,选择是否私有。创建后会得到仓库地址,支持 HTTP 和 SSH 两种协议。

在 proot Ubuntu 中,用 Git 命令推送第一个项目:

Ubuntu / proot
# 创建测试项目
mkdir my-project && cd my-project
echo "# My Project" > README.md
# 初始化 Git 并提交
git init
git add README.md
git commit -m "initial commit"
# 添加远程仓库并推送
git remote add origin http://localhost:3000/yourname/my-project.git
git push -u origin main

推送时会提示输入用户名和密码。输入刚才注册的管理员账号密码即可。刷新 Gitea 页面就能看到刚刚提交的代码了。

3.2 配置 SSH 免密推送

每次 push 都输密码很麻烦,配置 SSH Key 后可以免密操作。注意 Gitea 默认 SSH 端口是 22,但 proot Ubuntu 里没有权限绑定 22 端口,需要在 Gitea 中修改 SSH 端口:

Ubuntu / proot
# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "termux-gitea"
# 连续按回车,不设密码
# 查看公钥并复制
cat ~/.ssh/id_ed25519.pub

复制公钥内容,在 Gitea 页面右上角头像 → 设置 → SSH / GPG 密钥 → 添加密钥,粘贴公钥并保存。

然后在 app.ini 中修改 SSH 端口为 2222(避开 1024 以下的特权端口):

app.ini
[server]
SSH_PORT = 2222
START_SSH_SERVER = true
💡 小贴士
Gitea 内置了 SSH 服务器(START_SSH_SERVER = true),不需要依赖系统 sshd。这也是为什么 Gitea 可以在非 root 环境下提供 SSH Git 访问的原因——它自己管理 SSH 端口和密钥认证。

3.3 Wiki 与 Issues

除了代码托管,Gitea 还内置了 Wiki 和 Issues 功能,足够个人项目使用:

📖 Wiki 文档

每个仓库自带 Wiki,支持 Markdown 编辑,适合写项目文档、学习笔记。可以用 Git 方式克隆和编辑 Wiki 页面。

🐛 Issues 任务

Bug 跟踪、任务管理、功能建议,支持标签分类、里程碑、指派负责人,个人项目用来做 TODO 清单也很好用。

04 局域网共享:电脑与手机协作开发

Gitea 只在手机本地运行意义有限——真正的价值在于局域网内多设备协作。手机和电脑连同一个 WiFi,电脑就能访问手机上的 Gitea,进行代码 clone、push、pull 等操作。

4.1 获取手机局域网 IP

首先需要知道手机在局域网中的 IP 地址。在 Termux 中执行:

Termux
ip addr show wlan0 | grep inet
输出示例
inet 192.168.1.105/24 brd 192.168.1.255 scope global wlan0

这里 192.168.1.105 就是手机的局域网 IP。接着需要修改 Gitea 的 ROOT_URL 和 DOMAIN,让 Gitea 生成的链接使用局域网 IP 而非 localhost:

app.ini
[server]
HTTP_PORT = 3000
DOMAIN = 192.168.1.105
ROOT_URL = http://192.168.1.105:3000/
SSH_DOMAIN = 192.168.1.105
SSH_PORT = 2222

修改配置后重启 Gitea,然后在电脑浏览器访问 http://192.168.1.105:3000,就能看到 Gitea 界面。

4.2 电脑端配置与协作

在电脑上生成 SSH Key 并添加到 Gitea,然后就可以用 SSH 协议 clone 仓库了。因为 SSH 端口是 2222,需要在 clone 地址中显式指定端口:

电脑终端
# SSH 方式克隆(注意端口 2222 写在 git@ 前面用 ssh:// 格式)
git clone ssh://git@192.168.1.105:2222/yourname/my-project.git
# 或者 HTTP 方式
git clone http://192.168.1.105:3000/yourname/my-project.git
💡 小贴士
家庭路由器分配的 IP 是动态的,重启 WiFi 后可能变化。可以在路由器管理页面给手机设置静态 IP 地址(DHCP 静态分配),这样每次连接 WiFi 手机 IP 都不变。或者在手机 Termux 中安装 avahi-daemon(proot Ubuntu),用 termux.local 这种 mDNS 域名访问,无需记 IP。

4.3 典型协作工作流

一个常见的使用场景是:手机作为 Git 服务器,电脑写代码并 push,手机上随时可以查看代码、运行测试、自动部署。整个流程如下:

💻 电脑写代码
→
git push
→
📱 手机 Gitea
→
自动部署

下一节就来实现最后一步——push 代码后自动部署静态网站。

05 静态站点托管

有了 Gitea 托管代码,下一步自然是把代码变成可访问的网站。静态站点(纯 HTML/CSS/JS)不需要后端运行环境,部署最简单,也最适合在手机上运行。

5.1 用 Python 快速启动静态服务

Python 自带的 http.server 模块是最快的静态文件服务器,一行命令就能启动:

Ubuntu / proot
# 准备站点目录
mkdir -p ~/sites/my-site && cd ~/sites/my-site
# 创建一个测试页面
cat > index.html << 'EOF'
My Site

Hello from Termux!

This site is hosted on my phone.

EOF
# 启动静态服务器,监听 8000 端口
python3 -m http.server 8000 --bind 0.0.0.0

--bind 0.0.0.0 参数让服务监听所有网络接口,这样局域网内其他设备也能访问。手机浏览器访问 http://localhost:8000,电脑访问 http://手机IP:8000 即可看到页面。

5.2 用 Node.js serve 获得更好体验

Python http.server 功能简单,没有 SPA 路由支持、没有 gzip 压缩。如果需要更好的静态服务,可以用 Node.js 的 serve 包:

Ubuntu / proot
# 全局安装 serve
npm install -g serve
# 启动静态服务
serve -l 8000 -l tcp://0.0.0.0:8000 ~/sites/my-site
💡 小贴士
对于个人学习和局域网使用,Python http.server 足够了,零依赖一行命令。如果你的站点是 React/Vue 等单页应用(SPA),需要前端路由 fallback 到 index.html,则建议用 serve -s(单页模式)。

06 Git Hook 自动化部署

手动更新网站文件太麻烦了。Git Hook 可以让你在 git push 之后自动执行脚本,把最新代码部署到静态站点目录——实现「push 即发布」。

6.1 裸仓库与 post-receive Hook

Gitea 的仓库以裸仓库(bare repository)形式存储在服务器上,只有 Git 数据没有工作目录。要实现自动部署,我们需要创建一个 post-receive Hook,当 push 完成后,自动检出代码到站点目录。

Ubuntu / proot
# 找到 Gitea 仓库的 Hook 目录
cd ~/gitea/data/repositories/yourname/my-site.git/hooks
# 创建 post-receive 脚本
cat > post-receive << 'EOF'
#!/bin/bash
# 自动部署到静态站点目录
TARGET_DIR="/root/sites/my-site"
GIT_DIR="/root/gitea/data/repositories/yourname/my-site.git"
BRANCH="main"
while read oldrev newrev refname; do
    if [ "$refname" = "refs/heads/$BRANCH" ]; then
        echo "Deploying $BRANCH to $TARGET_DIR..."
        mkdir -p "$TARGET_DIR"
        git --work-tree="$TARGET_DIR" --git-dir="$GIT_DIR" checkout -f "$BRANCH"
        echo "Deploy complete."
    fi
done
EOF
# 赋予执行权限
chmod +x post-receive

这个脚本的核心是 git --work-tree=... --git-dir=... checkout -f 命令:它从裸仓库中把指定分支的代码检出到目标目录,相当于一次「强制发布」。

6.2 测试自动化部署

在电脑上修改代码并 push,就能看到自动部署的效果:

电脑终端
# 修改 index.html
echo "

Updated at $(date)

"
 >> index.html
# 提交并推送
git add index.html
git commit -m "update index"
git push
push 输出(包含 Hook 输出)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 267 bytes | 267.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Deploying main to /root/sites/my-site...
remote: Deploy complete.
To ssh://192.168.1.105:2222/yourname/my-site.git
   abc1234..def5678  main -> main

看到 remote: Deploy complete. 就说明 Hook 脚本执行成功了。刷新浏览器访问站点,就能看到最新的修改。

⚠️ 常见错误
Hook 脚本没生效 — 最常见的原因是忘记加执行权限,或者路径写错。检查 ls -l post-receive 是否有 x 权限,脚本内的路径是否存在
✓ 调试技巧:在脚本开头加 set -x,push 时会打印每一行执行过程,方便定位问题

07 持久化运行与监控

Gitea 前台运行的话,一旦关闭 Termux 或断开 SSH 连接,服务就停了。要让手机成为一台「真·服务器」,需要让 Gitea 在后台持久运行,并在异常退出时自动重启。

7.1 tmux 后台运行

最简单的方式是把 Gitea 放在 tmux 会话里运行,关掉 Termux 后再打开还能接回去:

Ubuntu / proot
# 创建一个名为 gitea 的 tmux 会话
tmux new -s gitea -d
# 在会话中启动 Gitea
tmux send-keys -t gitea "cd ~/gitea && gitea web" C-m
# 查看运行状态
tmux attach -t gitea
# 按 Ctrl+B 再按 D 脱离会话(服务继续运行)

7.2 进程守护脚本

tmux 只能保证「你不杀它它就运行」,但如果 Gitea 自身崩溃退出,tmux 不会自动重启。写一个简单的进程守护脚本,检测到进程退出就自动拉起:

gitea-watchdog.sh
#!/bin/bash
# Gitea 进程守护:进程退出自动重启
GITEA_DIR="/root/gitea"
LOG_FILE="/root/gitea/log/watchdog.log"
mkdir -p "$(dirname "$LOG_FILE")"
while true; do
    echo "[$(date)] Starting Gitea..." >> "$LOG_FILE"
    cd "$GITEA_DIR" && gitea web >> "$LOG_FILE" 2>&1
    echo "[$(date)] Gitea exited, restarting in 5s..." >> "$LOG_FILE"
    sleep 5
done

把这个脚本放到 tmux 会话里运行即可。Gitea 一旦异常退出,5 秒后会自动重启。

7.3 使用 termux-wake-lock 防休眠

手机屏幕关闭后,CPU 可能会进入休眠状态,导致 Gitea 响应变慢甚至断连。Termux 提供了唤醒锁工具来防止休眠:

Termux(原生环境)
# 安装 Termux:API 工具包
pkg install termux-api
# 获取唤醒锁(屏幕关闭后 CPU 保持运行)
termux-wake-lock
# 用完后释放唤醒锁
termux-wake-unlock
💡 小贴士
唤醒锁会增加耗电,如果只是偶尔使用 Gitea,用完释放即可。如果需要 24 小时运行,建议手机插着充电器使用,并在电池优化设置中将 Termux 设为「不受限制」,避免系统杀后台。

08 分级练习

🟢 基础验证
在 proot Ubuntu 中安装并启动 Gitea 1.27.3,完成初始配置,创建一个名为 hello-gitea 的仓库,通过 HTTP 方式 push 一个 README.md 文件,然后在手机浏览器中查看。
预期:5 分钟内完成,浏览器中能看到刚 push 的 README 内容
🟡 组合应用
配置 SSH 免密访问 Gitea,在电脑上 clone 仓库并创建一个简单的静态网页(含 index.html + style.css),push 到 Gitea,然后配置 post-receive Hook 实现 push 后自动部署到 ~/sites/demo 目录,用 Python http.server 提供访问,在电脑浏览器通过局域网 IP 访问该站点。
参考解法提示:SSH 端口用 2222,Hook 脚本使用 git --work-tree 方式检出
🔴 开放挑战
搭建一个完整的个人博客系统:在 Gitea 中创建博客仓库,使用 Markdown 写文章,编写一个部署脚本,push 后自动将 Markdown 转换为 HTML(可使用 pandoc 或自己写 Python 脚本),生成静态博客站点。要求支持文章列表页、文章详情页,并有自动生成的侧边导航。
扩展方向:加入搜索功能、RSS 订阅、文章标签分类
📖 知识回顾
Gitea 1.27.3 ARM64 二进制部署 SQLite3 数据库 内置 SSH 服务器 局域网协作开发 post-receive Hook git --work-tree 检出 静态站点托管 tmux 后台运行 进程守护脚本 termux-wake-lock
📡 下一篇预告
第 25 篇将进入 Telegram Bot 开发部署——在 Termux 上开发 24 小时在线的 Telegram 机器人,实现服务器监控、文件传输、AI 对话、定时推送和远程命令执行等功能,让 Telegram 成为手机 Termux 的远程控制界面。关注公众号,不错过更新。
点赞 · 在看 · 分享,支持持续更新