如何在 Ubuntu 22.04 上使用 Docker 安装 Gitea
在此页
- 先决条件
- 安装和配置 Docker
- 设置 Gitea 部署环境
- 构建 Gitea 容器服务
- 将 Nginx 设置为 Gitea 的反向代理
- 开始配置 Gitea 安装
- 结论
Gitea 是一个免费的开源自托管 Git 服务,类似于 GitHub、BitBuacket 和 GitLab。它是 Gogs git 服务的社区分支,使用 Go 语言编写,并获得 MIT 许可。 Gitea 为协作开发和团队提供功能,例如错误跟踪、wiki 和代码审查。 Gita 是一个跨平台应用程序,可以安装在多个操作系统上,例如 Linux、macOS、Windows 和 ARM。
Gitea 的主要目标是提供在您的服务器上创建和部署 Git 服务的最简单、最快和最简单的方法。此外,Gitea 支持多种身份验证方法,例如 LDAP、PAM、SMTP 和 FreeIPA。对于 webhook 存储库事件,Gitea 支持 Slack、Discord、Microsoft Team、Telegram 等多种 webhook。
在本教程中,您将学习如何在最新的 Ubuntu 22.04 服务器上使用 Docker 安装和配置名为 Gitea 的自托管 Git 服务器。这还包括安装和配置 Nginx Web 服务器作为 Gitea 容器服务的反向代理。
先决条件
- Ubuntu 服务器 - 本教程使用最新的 Ubuntu 22.04 服务器。
- 具有 root 权限的非 root 用户 - 或者您也可以使用 root 用户。
安装和配置 Docker
您要做的第一步是在您的 Ubuntu 机器上安装和配置 Docker。对于本教程,您将从官方 Docker 存储库安装 Docker,因此您需要将 Docker GPG 密钥和存储库添加到您的系统。
在开始之前,运行下面的 apt 命令来安装基本的包依赖项,例如 gnupg2 和 curl。
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
安装完成后,运行以下命令下载 GPG 密钥并将其添加到 Docker 存储库。 GPG 密钥将存储在 /etc/apt/keyrings 目录中。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
接下来,使用以下命令添加 Docker 存储库。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
之后,使用以下命令更新和刷新您的 Ubuntu 存储库。
sudo apt update
在下面的屏幕截图中,您可以看到添加了 Ubuntu 22.04 的 Docker 存储库。

最后,您可以使用以下命令将 Docker 引擎安装到您的 Ubuntu 系统。 docker-compose 插件包是 Docker Compose 的替代品,现在可以用作 Docker 的插件。
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
输入 Y 确认安装,然后按 ENTER 继续。 Docker 安装将开始。

现在运行下面的 docker 命令来验证你的 Docker 安装。
sudo docker run hello-world
如果您的 Docker 安装成功,您将看到来自 Docker 的 Hello World 消息。

设置 Gitea 部署环境
成功安装 Docker 后,您现在将设置 Gitea 安装环境。在此示例中,Gitea 容器服务将以非 root 用户身份运行,因此您需要在系统上创建一个新用户并将该用户添加到组 docker 以允许该用户执行和运行 Docker 容器。
运行以下命令以添加名为 gitea 的新用户。这里的选项 -m 用于为用户 gitea 自动创建一个新的主目录,新用户的默认 shell 是 /bin/bash 。
useradd -m -s /bin/bash gitea
接下来,使用以下命令将用户 gitea 添加到 docker 组。现在用户 gitea 将能够运行 Docker 容器。
usermod -aG docker gitea
要验证,请使用以下命令以用户 gitea 身份登录。
su - gitea
现在运行下面的 docker 命令以使用图像“hello-world\”启动一个新容器。
docker run hello-world
您应该看到来自 Docker 的 Hello-world 消息,这意味着您已准备好开始为 Gitea 安装配置新项目。

构建 Gitea 容器服务
添加运行 Gitea 容器服务的新用户后,您现在将设置 Gitea 项目安装。本节中的所有命令都在新用户 gitea 下运行。
首先,创建一个名为 \myapp\ 的新项目目录,并将工作目录更改为该目录。
mkdir -p myapp; cd myapp/
使用 nano 编辑器创建一个新的 docker-compose.yml 文件。
nano docker-compose.yml
将以下配置添加到 docker-compose.yml 文件中。
version: "2"
volumes:
gitea-data:
driver: local
gitea-config:
driver: local
services:
server:
image: gitea/gitea:1.16.8-rootless
environment:
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
volumes:
- ./data:/var/lib/gitea
- gitea-data:/var/lib/gitea
- ./config:/etc/gitea
- gitea-config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2222:2222"
depends_on:
- db
db:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
volumes:
- ./postgres:/var/lib/postgresql/data
完成后保存并关闭文件。
使用这些配置,您将创建以下资源:
- 两个 Docker 卷 gitea-data 和 gitea-config 用于存储 Gitea 用户数据和配置文件。
- 名称为“server”和“db”的两个服务。
- Gitea 容器服务将基于 Docker 镜像 \gitea/gitea:1.16.8-rootless\ 以名称 \server\ 运行,并导出 TCP 端口 <3000 和 2222。
- Gitea 容器服务将与名为“db\”的 PostgreSQL 数据库服务一起运行。
- \db\ 服务将作为 Gitea 服务的数据库运行,默认 Docker 镜像 PostgreSQL \postgres:14\。所有与“db”服务相关的数据都将本地存储在名为“postgres”的目录中。
接下来,运行下面的 docker 命令开始构建和启动 Gitea 容器服务。
docker compose up -d
下面可以看到Gitea所需的Docker镜像的下载过程。

完成所有过程后,您将看到类似以下屏幕截图的输出。

现在运行下面的 docker 命令来检查 gitea 容器服务。
docker compose ps
在下面的屏幕截图中,您可以看到名为“server”和“db”的服务正在运行,这意味着 Gitea 容器服务部署已完成并成功。
Gitea 服务在本地主机上运行,端口为 3000。端口 2222 可用于 SSH 连接。

如果在安装过程中出现错误,请始终使用以下命令检查容器服务的日志。
检查所有容器服务的日志。
docker compose logs
检查每个容器服务数据库和服务器的日志。
docker compose logs db
docker compose logs server
设置 Nginx 作为 Gitea 的反向代理
您已经完成了 Gitea 容器服务的安装,现在您将安装和配置 Nginx Web 服务器作为在默认端口 3000 上运行的 Gitea 容器服务的反向代理。
在此示例中,Gitea 容器服务将在域名 git.hwdomain.io 和启用 SSL Letsencrypt 的情况下运行。所以在你设置 nginx 反向代理之前,请确保你有域名和为你的域名生成的 SSL Letsencrypted。
现在使用下面的 apt 命令安装 Nginx 包。
sudo apt install nginx
输入 Y 确认安装,然后按 ENTER 继续。

接下来,使用 nano 编辑器创建一个新的 SSL 配置 /etc/nginx/snippets/ssl.conf。
sudo nano /etc/nginx/snippets/ssl.conf
将以下配置添加到文件中。此外,您还需要更改 SSL 证书路径。
ssl_certificate /etc/letsencrypt/live/git.hwdomain.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.hwdomain.io/privkey.pem;
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
#ssl_stapling on;
#ssl_stapling_verify on;
#resolver 8.8.8.8 8.8.4.4 valid=300s;
#resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
完成后保存并关闭文件。
接下来,使用 nano 编辑器为 Gitea 反向代理 /etc/nginx/sites-available/gitea.conf 创建一个新的 Nginx 服务器块配置。
sudo nano /etc/nginx/sites-available/gitea.conf
将以下配置添加到文件中,并确保将域名 git.hwdomain.io 更改为您的域。
server {
server_name git.hwdomain.io;
listen 443 ssl http2;
include snippets/ssl.conf;
# Log files
access_log /var/log/nginx/gitea.access.log;
error_log /var/log/nginx/gitea.error.log;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
完成后保存并关闭文件。
现在运行以下命令来激活服务器块配置 gitea.conf 并验证 Nginx 配置。
sudo ln -s /etc/nginx/sites-available/gitea.conf /etc/nginx/sites-enabled/
sudo nginx -t
如果您的配置正确,您将看到诸如“语法正确 - 测试成功”之类的输出消息。
最后,重启 nginx 服务以应用新的 Nginx 服务器块配置 gitea.conf 和 SSL 配置 ssl.conf。
sudo systemctl restart nginx
现在你已经完成了 Nginx 配置作为 Gitea 容器服务的反向代理,它现在运行在域名 https://git.hwdomain.io 上,并在其之上启用了 SSL。
开始配置 Gitea 安装
要开始 Gitea 安装和配置,请打开您的 Web 浏览器并访问安装的 gitea 域名(例如 https://git.hwdomain.io)。现在您将看到 Gitea 安装页面。
在 Initial configuration 部分,将其保留为默认值,因为它会自动使用 docker-compose.yml 文件中的 PostgreSQL 数据库凭据填充。

现在使用您的域安装更改 Gitea \Server Domain\ 和 \Gitea base URL\。在这个例子中,域名是 https://git.hwdomain.io。

在“可选设置”部分,单击“管理员帐户设置”上的箭头。现在为您的 Gitea 服务器输入新的管理员用户名、密码和电子邮件地址,然后单击“安装 Gitea”按钮。

安装过程完成后,您将被重定向到 Gitea 主页并以您刚刚创建的新用户身份登录。

Gitea with Docker 在最新的Ubuntu 22.04上安装配置完成并成功。
结论
恭喜!您现在已经在最新的 Ubuntu 22.04 服务器上完成了一个名为 Gitea 的自托管 git 服务器的安装。此外,您还了解了用于创建容器服务的 docker-compose.yml 的基本配置。此外,您还学习了如何将 Nginx 设置为容器应用程序的反向代理,在本例中是 Gitea 容器服务。