Docker部署Gitea服务:轻量级Git仓库的搭建与迁移指南
前言
在日常开发中,我们经常需要一个私有的Git仓库服务来托管代码。虽然GitHub和Gitee都非常好用,但有时候出于数据隐私、网络速度或者完全掌控的需要,自建一个Git服务是很有必要的。
考虑到你可能面临服务器到期更换服务商的情况,数据的便携性和迁移的便利性成为了核心需求。同时,你也希望平台能完美支持中文。
综合这些需求,Gitea 是一个绝佳的选择。它是一个开源的、轻量级的Git服务,使用Go语言编写,运行速度快,资源占用低,且完美支持Docker部署。最重要的是,它的数据结构非常简单,迁移起来只需要打包几个目录即可。
本文将手把手教你如何使用Docker部署Gitea,并演示如何进行数据的备份与迁移。
环境准备
在开始之前,请确保你的服务器已经安装了Docker和Docker Compose。
针对中国大陆用户的特别提示:
由于网络原因,直接从Docker Hub拉取镜像可能会很慢甚至失败。建议配置国内的Docker镜像加速器。编辑
/etc/docker/daemon.json(如果不存在则创建),添加如下配置(使用国内常见的加速源):
1
2
3
4
5
6
7 {
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
}注:镜像源地址可能会随时间失效,建议搜索最新的可用加速源。
配置完成后重启Docker:sudo systemctl restart docker
部署步骤
1. 创建项目目录
首先,我们在服务器上创建一个目录来存放Gitea的配置和数据。
1 | mkdir -p /home/docker/gitea |
2. 编写 docker-compose.yml
为了保证数据的便携性,我们直接将容器内的数据映射到当前目录下的 data 文件夹中。这样,当你需要迁移时,只需要把整个 /home/docker/gitea 目录打包带走即可。
创建并编辑 docker-compose.yml 文件:
1 | version: "3" |
为什么映射 “12222:22”?
很多新手会问:为什么不直接用 22:22?
- 宿主机冲突:你的 Linux 服务器本身就需要通过 SSH(默认端口 22)来进行远程管理。如果容器也占用宿主机的 22 端口,会导致端口冲突,甚至让你无法远程连接服务器。
- 容器隔离:Gitea 容器内部需要通过 22 端口提供 Git over SSH 的服务。
- 解决方案:我们将宿主机的闲置端口(如 12222)转发到容器的 22 端口。这样,你管理服务器用
ssh root@ip -p 22,拉取代码用git clone ssh://git@ip:12222/...,互不干扰。
3. 启动服务
在 docker-compose.yml 所在目录下执行:
1 | docker-compose up -d |
等待片刻,使用 docker-compose logs -f 查看日志,看到 “Listen on :3000” 字样说明启动成功。
初始化配置
开启防火墙端口
为了能够从外部访问Gitea服务,我们需要开启防火墙端口。
- 假设你的服务器IP为
192.168.1.100,则需要开启13333和12222端口。 - 具体操作取决于你使用的防火墙软件。以下是一个示例(使用
ufw):
1 | # 开启13333端口 |
- Web 服务端口: 填写 13333 (对应docker-compose中映射的端口)。
- SSH 服务端口: 填写 12222 (对应docker-compose中映射的端口)。
- 基础URL:
http://你的域名或IP:13333/。
- 打开浏览器,访问
http://你的服务器IP:13333。 - 你会看到安装向导页面。Gitea会自动识别浏览器语言,如果显示英文,可以在右上角手动切换为简体中文。
- 数据库设置:
- 为了最极致的迁移便利性,建议选择 SQLite3。
- SQLite3 是一个文件型数据库,数据直接存储在我们在
docker-compose.yml中映射的data目录下。这意味着你不需要额外部署MySQL容器,备份时也少了一个步骤。对于中小团队或个人使用,性能完全足够。
- 一般设置:
- 服务器域名: 填写你的域名或服务器IP。
- SSH 服务端口: 填写 12222 (对应docker-compose中映射的端口)。
- 基础URL:
http://你的域名或IP:13333/(注意端口要和Web端口一致)。
- 可选设置:
- 建议在“管理员帐号设置”中创建一个管理员账户。如果不创建,注册的第一个用户将自动获得管理员权限。
点击“立即安装”,稍等片刻即可进入首页。
SSH 使用小贴士
由于使用了非标准 SSH 端口(12222),以后 clone 代码时地址会变成这样:git clone ssh://git@your-ip:12222/username/repo.git
如果你不想每次都输入端口,可以在本地电脑配置 ~/.ssh/config:
1 | Host my-gitea |
这样就可以直接写:git clone my-gitea:username/repo.git,非常方便。
数据迁移与备份
这是你最关心的部分。由于我们在 docker-compose.yml 中使用了 ./data:/data 映射,并且选择了 SQLite3 数据库,Gitea 的所有数据(包括代码仓库、用户数据、数据库文件、配置文件)都完整地保存在了宿主机的 /home/docker/gitea/data 目录下。
备份(打包)
当你的服务器到期,或者需要迁移到新服务商时,只需执行以下步骤:
停止服务(为了保证数据一致性,建议先停止容器):
1
2cd /home/docker/gitea
docker-compose down打包目录:
1
2
3cd /home/docker
# 将整个gitea目录打包为 gitea-backup.tar.gz
tar -czvf gitea-backup.tar.gz gitea/下载备份文件:使用SCP、SFTP等工具将
gitea-backup.tar.gz下载到本地或直接传输到新服务器。
恢复(迁移)
在新服务器上:
- 确保环境就绪:安装好 Docker 和 Docker Compose。
- 上传并解压:
将gitea-backup.tar.gz上传到/home/docker目录(或者你喜欢的任何位置)。1
2cd /home/docker
tar -xzvf gitea-backup.tar.gz - 启动服务:
1
2cd /home/docker/gitea
docker-compose up -d
就是这么简单!你的所有仓库、用户、甚至登录状态都完全恢复了。
总结
通过 Docker + Gitea + SQLite 的组合,我们实现了一个:
- 部署极快:几行配置搞定。
- 中文支持:原生完美支持。
- 迁移无忧:数据完全独立,打包即走。
这套方案非常适合个人开发者或中小团队构建私有的代码托管平台,再也不用担心服务器到期数据难移的问题了。










