使用 Docker 搭建个人私有化 Git 服务:Gitea + SSH 配置实践
本文介绍了如何使用 Docker 搭建轻量级的私有 Git 服务 Gitea,适合个人或小团队使用。内容涵盖 Gitea 的资源优势、容器化部署步骤、端口映射与数据挂载方法,并重点讲解了 SSH 配置中的常见问题及解决方案,确保 clone 和 push 操作顺畅。适合对代码托管安全性和资源控制有较高要求的开发者参考。
一、为什么选择私有化 Git?
在日常开发中,使用 GitHub、Gitee 等平台虽然便捷,但也有以下局限:
- 代码隐私无法保障,尤其在内网环境或私密项目中
- 对第三方平台的依赖强,稳定性和政策风险不可控
- 多数平台对私有仓库数量、协作人数存在限制
因此,选择一个轻量级的私有 Git 服务,搭建在本地或私有云上,是一种更灵活、安全的方式。
二、选择 Gitea 的原因
Gitea 是一个开源的、自托管的 Git 服务平台,拥有以下优点:
1. 极轻量资源占用
项目 | 占用情况 |
---|---|
内存 | ~60MB 空闲启动 |
CPU | 几乎为零,除非大规模并发 |
存储 | 主要占用仓库与日志,按需扩展 |
相比 GitLab(动辄几百 MB 内存起步),Gitea 更适合个人或小团队部署。
2. 功能覆盖完整
- 支持代码仓库管理、Pull Request、Issue、Wiki、CI/CD(集成 Drone)
- 支持 SSH 和 HTTPS 两种 clone/push 模式
- 提供 API 和 Webhooks,便于与其他系统集成
三、Docker Compose 部署 Gitea
容器化部署直接使用官方给的文件就行,按需自行修改:https://docs.gitea.com/zh-cn/installation/install-with-docker
部署非常简单,通过如下 docker-compose.yml
文件即可完成:
version: "3"
networks:
gitea:
external: false
services:
server:
image: docker.gitea.com/gitea:1.23.7
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- /data/gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "13000:3000"
- "222:22"
文件说明:
/data/gitea:/data
:Gitea 所有数据,包括仓库、配置文件、用户信息等13000:3000
:本地访问 Gitea 的 Web 管理界面 http://localhost:13000222:22
:将容器内 SSH 服务映射到宿主机 222 端口
启动方式:
docker-compose up -d
四、配置 SSH 支持(重要)
Gitea 默认认为 SSH 使用的是 22 端口,但我们容器中实际映射的是 222,因此需要额外配置。
如果不进行配置,那么在页面中提供的 ssh 地址是不带端口的,这样默认就是使用 22 端口,会导致连接不了,改了配置的效果是这样的:
1. 修改 Gitea 的 app.ini 配置
宿主机中 /data/gitea/gitea/conf/app.ini
(容器内为 /data/gitea/conf/app.ini
),加入或修改以下内容:
[server]
DOMAIN = 100.88.88.203
SSH_DOMAIN = 100.88.88.203
SSH_PORT = 222
START_SSH_SERVER = false
SSH_LISTEN_PORT = 22
字段说明:
SSH_DOMAIN
:Web 页面展示的 clone 地址使用的主机名SSH_PORT
:Web 页面展示的 SSH 端口(就是你映射的 222)SSH_LISTEN_PORT=22
:容器内部仍监听 22 端口START_SSH_SERVER=false
:关闭 Gitea 内置 SSH Server(使用容器内 sshd)
配置完成后,重启容器:
docker restart gitea
2. 验证 SSH 地址
刷新 Gitea Web 页面,点击仓库的“Clone”按钮,应该显示:
git clone ssh://git@100.88.88.203:222/your_user/your_repo.git
3. 客户端配置 SSH(可选)
为避免每次 push 时指定端口,可以在开发机的 ~/.ssh/config
中添加:
Host gitea
HostName 100.88.88.203
Port 222
User git
这样就可以使用别名:
git clone gitea:your_user/your_repo.git
五、总结
通过 Gitea + Docker + SSH 的组合,可以非常高效地搭建起个人私有 Git 服务,具有如下优势:
- ✅ 资源占用低,可运行在轻量主机或虚拟机中
- ✅ 支持完整 Git 流程和常用 DevOps 功能
- ✅ 容器化部署,快速、可维护
- ✅ SSH 方式安全高效,适配各种开发场景
非常适合追求极简与效率的开发者进行自托管实践。