NAS 搭建私有 Git 服务器:代码管理全攻略
对于开发者或小团队来说,代码管理是日常工作中不可或缺的一环。虽然 GitHub、GitLab 等公有云服务很方便,但代码托管在第三方服务器上,总让人有点不放心——尤其是涉及商业项目、私有算法或客户敏感数据时。更别说网络不稳定、仓库数量限制、每月费用等实际问题了。如果你家里或办公室正好有一台 NAS,为什么不把它变成你自己的私有 Git 服务器呢?这样既能享受 Git 的版本控制能力,又能把数据牢牢掌握在自己手里,还能省下一笔订阅费。
方案选择:Gitea 还是 GitLab?
在 NAS 上搭建 Git 服务,最主流的两个选择是 Gitea 和 GitLab。
Gitea 是一个极轻量级的 Git 服务,用 Go 语言编写,对硬件要求非常低,哪怕是入门级的 NAS(比如 2GB 内存)也能流畅运行。它启动速度快,界面简洁,功能足够日常使用,包括代码托管、Issue 跟踪、Pull Request、Web 编辑器等。如果你只是个人使用或者小团队协作,Gitea 是首选。
GitLab 功能更加强大,自带 CI/CD、容器镜像仓库、项目分析等高级特性,但相应地,它对内存和 CPU 的要求也高得多,官方建议至少 4GB 内存,实际跑起来 8GB 会更舒服。如果你的 NAS 配置较高,且需要完整的 DevOps 流水线,那么 GitLab 更适合你。
对于大多数 NAS 用户,我强烈推荐 Gitea——它足够用,且不会拖垮 NAS 的其他服务。
使用 Docker 安装 Gitea
绝大多数 NAS 系统(如群晖 DSM、威联通 QTS、绿联 UGOS)都支持 Docker,这是最干净的安装方式,不会污染系统环境,升级也方便。
以群晖为例,安装步骤非常简单:
- 打开套件中心,安装 Docker(或 Container Manager)。
- 在 Docker 中搜索镜像
gitea/gitea,下载最新版本。 - 创建容器时,需要做两件事:
- 映射端口:将容器的 3000 端口映射到 NAS 的某个空闲端口(比如 3000)。
- 挂载数据卷:将容器内的
/data目录挂载到 NAS 的存储空间,比如/volume1/docker/gitea。
如果你更喜欢命令行,也可以通过 SSH 在终端里执行:
docker run -d \
--name=gitea \
--restart=always \
-p 3000:3000 \
-v /volume1/docker/gitea:/data \
gitea/gitea:latest
启动后,浏览器访问 http://你的NAS_IP:3000,就会进入 Gitea 的初始化页面。
初始化配置与 SSH 访问
首次打开 Gitea,需要填写一些基础配置。这里有几个关键点需要注意:
- 站点名称:随便填,比如“我的代码仓库”。
- 数据库类型:默认的 SQLite 就够用,除非你预期有大量并发用户,否则不必用 MySQL。
- SSH 服务器端口:如果你打算用 SSH 协议推送代码,这里要填一个 NAS 上未被占用的端口,比如 2222。记得在路由器上做端口转发(如果外网访问需要)。
- HTTP 端口:保持 3000 即可,或者改成你映射的端口。
配置完成后,注册一个管理员账号,就可以开始创建仓库了。
接下来,为了让本地电脑能通过 SSH 免密推拉代码,需要把客户端的公钥添加到 Gitea。
在本地电脑上生成密钥(如果已有可跳过):
ssh-keygen -t ed25519 -C "[email protected]"
然后查看公钥内容:
cat ~/.ssh/id_ed25519.pub
复制这段公钥,登录 Gitea,点击右上角头像 → 设置 → SSH 公钥,粘贴保存。
创建仓库并推送代码
一切就绪后,在 Gitea 界面上点击“新建仓库”,填写仓库名称,选择公开或私有,然后就可以在本地的项目目录中初始化并推送了。
假设你在本地已经有一个项目文件夹:
cd my-project
git init
git add .
git commit -m "Initial commit"
然后添加远程地址并推送。注意,这里的端口是你在 Gitea 中配置的 SSH 端口(比如 2222),而不是默认的 22:
git remote add origin ssh://git@你的NAS_IP:2222/用户名/仓库名.git
git push -u origin master
如果一切顺利,代码就会上传到 NAS 上的 Gitea 仓库中了。之后,你可以像使用 GitHub 一样,正常进行分支管理、合并请求、Issue 跟踪等操作。
外网访问与安全加固
如果你希望在外面也能访问自己的 Git 服务器,可以考虑两种方式:
- 端口转发:在路由器上把 NAS 的 3000 端口(HTTP)和 2222 端口(SSH)映射到公网。但这种方式有风险,因为暴露了 NAS 的端口,容易被扫描攻击。
- 内网穿透:使用 Tailscale、ZeroTier 或 frp 等工具,将 NAS 的 Git 服务安全地暴露到外网。其中 Tailscale 最简单,安装后会自动组网,你在任何地方都能通过虚拟 IP 访问 NAS,且通信加密,不暴露公网端口。
无论用哪种方式,安全都不可忽视。建议你在 Gitea 中强制启用两步验证(2FA),并定期更新镜像版本。另外,如果 NAS 有防火墙功能,尽量只放行必要的端口。
总结
通过 Docker 在 NAS 上搭建 Gitea,整个流程不到半个小时就能完成。你拥有的是一个完全自主可控的私有 Git 服务器,不依赖任何第三方平台,数据永远在自己手里。对于个人开发者或小团队来说,这不仅是省钱的问题,更是一种安全感和自由度的提升。现在就去试试吧,把代码管理这件事彻底掌握在自己手中。
暂无评论,来说两句吧