近期有一则新闻 GitLab 停止为中国大陆等地区用户提供服务。此事暂时只涉及到 Gitlab 的 SaaS 版本,本地部署版本不受影响。但考虑到 Gitlab 此前就对中国和俄罗斯抱有敌意,2019 年就发布过一则拒绝中国员工的“封锁令”。所以保险起见应该适当考虑一些其他 Git 平台作为替代方案。
去年的一篇文章《如何通过 Docker 搭建一个轻量 Git 服务端,并讲讲 Docker 的配置逻辑》已经介绍了如何部署轻量级的 Git 服务:Gogs,文中还包含了许多 Docker 的基础知识。Gogs 很适合个人部署在 NAS 上,也可以为 Obsidian 提供一个本地的 Git 服务作为同步平台。
而 Gitea 则是另一个更符合公司场景下的 Git 服务,具备更完善的权限控制、CI/CD 等功能,界面上也更美观更完善。
先了解一下 Gitea,Gitea 是一个由社区驱动的自托管 Git 服务,源自 Gogs 的分叉,主要有以下几个优点:
- 轻量高效:占用资源少,树莓派、NAS 甚至小型服务器都能轻松运行。
- 功能丰富:支持细粒度的权限控制、内置 CI/CD 等,满足个人开发者和小团队的需求。
- 社区活跃:开发者社区非常活跃,更新频繁,用户反馈也能快速得到响应。
相比于 GitLab,Gitea 对系统资源的要求要低得多,2GB 内存的小型服务器、NAS 或者树莓派都能稳稳地跑起来。无论是个人笔记同步,还是小团队项目协作,Gitea 都是一个非常不错的选择。
方法一:通过 1Panel 简易安装
1Panel 目前已经提供了 Gitea 的一键安装,如果你想用最简单的形式进行安装,可以先参考这篇文章部署 1Panel,安装过程完全可视化。
🔗 1Panel:开源 Linux 服务器运维管理面板,让你活动买的服务器都能用起来 | #UNTAG 在应用商店里搜索 Gitea 并安装,期间包含了 MySQL、PostgreSQL 的配置,最终也是以 Docker 方式进行安装的,不会搞乱现有的服务器环境。
完成安装后就可以通过 IP 地址 + 端口号就可以访问了。
方法二:用 Docker 安装 Gitea
如果你对 1Panel 这样的运维面板有顾虑,可以考虑直接通过 Docker 部署。(如果需要更细节的配置方法,你可以参考之前的文章简单了解下 Docker 的相关知识)
首先我们把 Gitea 的服务启动起来,这种方法会采用 SQLite 作为数据库,比较适合个人使用。
1. 配置数据目录
在启动容器之前,确保你的数据目录存在并具有读写权限:
sudo mkdir -p /var/gitea
sudo chmod -R 777 /var/gitea
2. 快速启动 Gitea 容器
打开终端,运行以下命令:
docker pull gitea/gitea:latest
docker run --name=gitea -p 3000:3000 -p 222:22 -v /var/gitea:/data gitea/gitea:latest
参数说明: - --name=gitea:给容器起个名字。 - -p 3000:3000:将容器的 Web 服务端口映射到宿主机的 3000 端口。 - -p 222:22:将容器的 SSH 端口映射到宿主机的 222 端口。 - -v /var/gitea:/data:将容器内的 /data 目录挂载到宿主机的 /var/gitea,保证数据持久化。
3. 访问 Gitea
在浏览器中输入以下地址,开始配置:
http://<宿主机IP>:3000
按照页面提示一步一步完成初始化,Gitea 就成功安装好了!
方法三:Docker Compose 安装 Gitea 并连接外部数据库
如果你希望将 Gitea 放到团队或者公司内部使用,建议补充配置 MySQL,多人使用的性能会更好一些。如果想连接到 MySQL 数据库,可以使用 Docker Compose 简化配置。
以下是一个简单的示例:
1. 创建 Docker Compose 配置文件
在你的工作目录下创建 docker-compose.yml:
version: "3"
networks:
gitea:
external: false
services:
db:
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: example_root_password
MYSQL_USER: gitea
MYSQL_PASSWORD: example_password
MYSQL_DATABASE: gitea
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
