如何在 Ubuntu 20.04 上使用 Docker 安装 Gitea

Gitea 是一个免费的开源软件包,用于自托管 Git 服务器。 它还提供协作功能,如错误跟踪、维基和代码审查。 Gitea 是一个社区驱动的轻量级代码解决方案,用 Go 编写。

开发人员在工作时需要定期将他们的代码更改合并到一个中央存储库中。 您可能需要为您的团队拥有一个私人中央存储库,您将自己托管和管理该存储库。 为此,您可以使用 Gitea。 它类似于 GitHub、Bitbucket 等。

在本教程中,我们将学习如何 使用 docker 安装 GiteaUbuntu 20.04.

先决条件

  • 一个安装了 Ubuntu 20.04 的节点
  • 一个用户 sudo 特权

第 1 步:在 Ubuntu 上安装 Docker

Gitea 从 Docker 中心提供其 Docker 镜像的最新稳定版本。 它可以从源代码、二进制文件以及作为包安装。 这里我们部署为 Docker 镜像。

要安装 docker,您需要安装一些先决条件:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

现在让我们添加 docker 存储库的 GP 密钥:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

现在将 Docker 添加到 APT 源。 它会自动更新缓存。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

现在使用以下命令安装 docker:

$ sudo apt install docker-ce

将用户添加到 docker 组,以便可以使用 docker 命令而无需 sudo 特权:

$ sudo usermod -aG docker username

第 2 步:运行 Nginx docker

要启用 HTTPS,您可以使用 TLS 终止代理,例如 Nginx、Apache2 或 Caddy。 在我们的例子中,我们将运行一个独立的容器作为我们的 Nginx 反向代理。

$ docker run -d --name nginx -p 80:80 -p 443:443 -v /etc/nginx/htpasswd:/etc/nginx/htpasswd -v /etc/nginx/vhost.d:/etc/nginx/vhost.d:ro -v /etc/nginx/certs:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro etopian/nginx-proxy

当您集成证书时,它将帮助我们将所有默认 HTTP 流量重定向到 HTTPS。 您应该注意到映射卷以集成您的证书 /etc/nginx/certs

现在在防火墙上打开端口 80 和 443:

$ sudo ufw allow 80,443/tcp

另外,请确保在启用 UFW 之前打开 ssh(如果尚未启用)

$ sudo ufw allow 'OpenSSH'

如果还没有,现在启用 UFW

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

第 3 步:运行 MySQL docker

Gitea 需要一个数据库来保存它的数据。 Gitea 支持 MySQL/MariaDB、PostgreSQL、SQLite 和 MSSQL。 在这里,我们将运行一个 MySQL 容器来保存所有数据。

$ docker run -d --name mysql-gitea -e [email protected] -v /opt/docker-volume/mysql-gitea:/var/lib/mysql mysql:5.7

我们可以检查我们的容器是否正在运行

$ docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED       STATUS          PORTS                                                                      NAMES 6d41fec8b0e4   mysql:5.7             "docker-entrypoint.s…"   2 hours ago   Up 2 hours      3306/tcp, 33060/tcp                                                        mysql-gitea ec9d83a3944e   etopian/nginx-proxy   "forego start -r"        3 days ago    Up 24 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx

默认情况下,Gitea 侦听端口 3000 上的连接以及 HTTP 和 HTTPS 端口上的反向代理。 如果您有防火墙,请确保打开端口以访问 Gitea Web 界面。

让我们看看我们的 MySQL 容器的一些细节,比如 IP 地址,因为我们稍后会需要它

$ docker inspect mysql-gitea
[     {         "Id": "6d41fec8b0e4b6ca465444d5cfea11913decddfd7586f4796702463cf08897fe",         "Created": "2021-10-21T23:48:20.709365573Z", ... ...         "Networks": {                         "bridge": {                             "IPAMConfig": null,                             "Links": null,                             "Aliases": null,                             "NetworkID": "3f0b32613606db9e0761af15b7fa5d7f7c3b86f4d3b4668d574c579b9468915f",                             "EndpointID": "f029fc1797c70d090da19d30cb31ca34c1b6baf4537a807397e931f87262f867",                             "Gateway": "172.17.0.1",                             "IPAddress": "172.17.0.3",                             "IPPrefixLen": 16,                             "IPv6Gateway": "",                             "GlobalIPv6Address": "",                             "GlobalIPv6PrefixLen": 0,                             "MacAddress": "02:42:ac:11:00:03",                             "DriverOpts": null                         } ... ...

现在让我们连接到 MySQL 容器

$ docker container exec -it mysql-gitea bash

然后访问MySQL命令行

# mysql -u root [email protected]

现在为 Gitea 创建数据库和用户

mysql> CREATE USER 'gitea-user'@'%' IDENTIFIED BY '[email protected][email protected]';
mysql> CREATE DATABASE giteadb;
mysql> GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea-user'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit;

现在也退出容器

# exit;

步骤 4:配置 SSL 证书

为了通过安全域名访问您的 Gitea,您需要将 SSL 证书复制到 Nginx 文件夹中。 您可以使用免费的 Let’s Encrypt 证书或来自证书颁发机构的证书。

复制证书

$ cp gitea.websitefortesting.com.crt /etc/nginx/certs/

复制密钥

$ cp gitea.websitefortesting.com.key /etc/nginx/certs/

第五步:运行Gitea docker

运行Gitea,我们需要指明之前已经启动的MySQL容器的一些信息,例如:

  • 数据库类型 mysql
  • mysql容器的地址ip
  • 数据库名称
  • 数据库用户名
  • 数据库用户密码
  • gitea 使用的端口
$ docker run -d --name gitea-selfhosted -v /opt/docker-volume/gitea-selfhosted:/data -p 3000:3000 -e VIRTUAL_HOST=gitea.websitefortesting.com -e VIRTUAL_PORT=3000 -e USER_UID=1001 -e USER_GID=1001 -e DB_TYPE=mysql -e DB_HOST=172.17.0.3:3306 -e DB_NAME=giteadb -e DB_USER=gitea-user -e [email protected][email protected] gitea/gitea:1.8

我们可以检查它是否正在运行

$ docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                      NAMES 321b870a0735   gitea/gitea:1.8       "/usr/bin/entrypoint…"   11 seconds ago   Up 10 seconds   22/tcp, 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                          gitea-selfhosted 6d41fec8b0e4   mysql:5.7             "docker-entrypoint.s…"   2 hours ago      Up 3 minutes    3306/tcp, 33060/tcp                                                        mysql-gitea ec9d83a3944e   etopian/nginx-proxy   "forego start -r"        3 days ago       Up 29 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx

现在您可以尝试使用 URL https://giteadomain.com 访问 Gitea

现在转到“登录”以继续安装过程。 您可以个性化一些信息,例如站点标题。

Gitea 网页界面数据库设置

确保在必要的地方指明域名。 还要指出管理员帐户的信息

Gitea Web 界面域和 admin 帐号设定

安装完成后,您将登录

吉泰仪表盘

您可以创建一个新的存储库

创建新的存储库

你有第一个仓库

Gitea第一个repo

结论

现在您知道在 Ubuntu 20.04 上使用 Docker 安装 Gitea 的所有步骤——您的代码的私有中央存储库。 您将能够根据您的需要管理它。