# 如何自己部署一个轻量级、自托管的 Git 服务：Gitea

> 本文开放前 70% 正文，剩余内容会员可见。

原文：https://utgd.net/article/21020

近期有一则新闻 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
```

比如：http\://192\.168\.1\.168\: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
```

---

[前往标准阅读页](https://utgd.net/article/21020?audience=web)
