题记
由于之前的开发并不需要开源,也没有多人开发等使用 Git 的需求,所以以往的所有开发都没有用 Git 来管理代码。确实是不太便于部署还有版本管理,所有就开始试着用 Git 了,国内 Github 的使用体验众所周知是不太方便的,所以想着干脆搭一个私有化的仓库。据说 GitLab 比较吃性能,所以就不考虑。而 Gogs 呢据说是迭代较慢,生态一般。最终选择了 Gitea(v1.21.1)。

了解 Gitea 的技术栈

Gitea 是使用 Golang 编写的跨平台跨架构 Git 仓库管理程序。所以只要是能运行 Golang 的环境下,搭建 Gitea 是不成问题的。那么在 Docker 中部署 Gitea 也就不难了。Gitea 程序是包含了 Web 服务器的,缺少数据库,数据库是额外安装的。
根据官网「数据库准备」的介绍,以下是 Gitea 支持的数据库:

数据库类型版本
MySQL>=5.7
MariaDB-
AliSQL-
PostgreSQL>=10
MSSQL>=2008R2 SP3
SQLite-

使用 Docker 部署 Gitea

官网已经把使用 Docker Compose 部署的教程写得很详细了,但是我还不熟悉 Docker Compose。
若使用 Docker Compose 部署可以在同一容器内部署 Gitea 与数据库,详见「使用 Docker 安装」。
所以我这个安装方法应该不算是最佳实践。

在 Debian 中安装 Docker

apt install docker-ce docker-ce-cli containerd.io #docker-compose-plugin

安装完成后使用docker version可以检查是否安装成功。

设置 Docker 虚拟网络

我部署的做法是 Gitea 和数据库分开,分别在一个容器中运行,所以设置虚拟网络便于容器间相互访问
创建名为gitea的网络

docker network create gitea

部署 Gitea

拉取镜像

docker pull gitea/gitea

如果国内拉取镜像很慢可以使用国内的镜像源。

部署容器

docker run -d --privileged=true --restart=always --network gitea --name=gitea -p 5522:22 -p 8080:3000 -v /var/lib/gitea:/data gitea/gitea:latest

其中的-p 5522:22是把容器的 SSH 端口映射到主机的5522端口,-p 8080:3000是把 Gitea 的 Web 端口3000映射到主机的8080端口上。-v /var/lib/gitea:/data表示将容器的/data目录映射至主机的/var/lib/gitea目录,便于更改 Gitea 的配置文件。
部署完成后可以使用curl http://localhost:8080来检查 Gitea 是否可以访问。

在 Docker 中部署 MySQL

由于 Gitea 本身支持 SQLite 所以允许不额外安装数据库来运行,只要在配置数据库时选择 SQLite 即可。

拉取 MySQL 镜像

docker pull mysql

部署容器

docker run --network gitea --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=YOUR_MYSQL_PASSWORD \
-d mysql

YOUR_MYSQL_PASSWORD替换为自定义的数据库密码
使用 MySQL 工具访问容器中的数据库,创建一个名为gitea的数据库

CREATE DATABASE `gitea` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

再创建一个名为gitea的用户,并授予数据库编辑权限

CREATE USER `gitea`@`` IDENTIFIED BY 'YOUR_PASSWORD' PASSWORD EXPIRE NEVER;

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Grant Option, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `gitea`.* TO `gitea`@``;

其中YOUR_PASSWORD替换为自定义的用户密码

执行 Gitea 安装程序

在浏览器中打开 Gitea 的 Web 端地址,即YOUR_SERVER_IP:8080
数据库类型选择MySQL,数据库主机直接填写mysql:3306即可,因为两个同一网络下的容器直接访问可以直接使用容器名作为解析地址。
数据库名填写gitea,数据库密码填写自行设置的gitea用户密码即可,并非在创建容器时设置的root密码。
根据需要填写之后的设置项。

至此,Gitea 已安装完毕。
如若需要设置 Nginx 反向代理,同一个主机下的反向代理地址填写为http://localhost:8080即可,详见「反向代理」。
为了安全性,可以为 Gitea 设置 SSL 证书,以保证 Web 用户访问时的安全,详见「HTTPS配置」。