如何在独立卷上存储 Gitea 仓库

介绍

Gitea是一个基于版本控制系统的源代码存储库, Git虽然有几种自托解决方案,如GitLab和Gogs,但Gitea具有轻量级的优势,这意味着它可以在相对较小的服务器上运行。

然而,拥有一个小服务器,尤其是在VPS领域,通常意味着空间有限。 幸运的是,许多托管提供商还提供外部卷,区块存储或网络文件存储(NFS)的形式的额外存储。

借助Gitea和决定您的源代码存储位置的能力,您可以确保您的项目和文件有空间来扩展。在本教程中,您将将外部存储量安装到安装点,并确保Gitea正在从该卷中阅读适当的信息。

前提条件

在你开始之前,你需要以下几点:

  • Ubuntu 20.04 服务器根据我们的 初始服务器安装指南 Ubuntu 20.04设置,非root用户具有 sudo 特权和启用防火墙。
  • 外部卷,如 NFS 或区块存储量。 如果您想从 DigitalOcean 设置一个区块存储量,请遵循我们的 产品文档
  • 在该服务器上安装 Gitea 可以通过域名访问。 此指南假定您已在 Docker 上安装 Gitea,如我们在教程中描述的那样 [如何在 Ubuntu 20.04 上安装 Gitea 和使用 Docker ]. 请注意,这将要求您在您的服务器上安装 Docker 和 Docker Compose。 您可以根据这些教

请注意,如果您使用不同的方法安装 Gitea,而不是这些先决条件中描述的,您的系统上的某些文件和目录的名称和位置可能与本指南中的示例所提到的不同。

步骤 1 – 安装一个区块存储量

一个卷可以采取许多不同的形式。它可能是NFS卷,这是通过文件共享提供的网络上可用的存储。另一种可能性是它通过DigitalOcean的卷等服务采取了区块存储的形式。

像这些类型的卷将被视为设备文件存储在 /dev 中。这些文件是内核与存储设备本身通信的方式;这些文件实际上不是用于存储。

首先,您需要创建一个 mount point --- 即将与设备相关联的文件夹,以便其内存的数据最终存储在该设备上。

创建一个名为gitea的安装点,因为你会使用mkdir命令创建一个正常的目录:

1sudo mkdir /mnt/gitea

从这里,您可以将设备安装在该目录中,以便使用它来访问该存储空间。

1sudo mount -t ext4 -o defaults,noatime /dev/disk/by-id/your_disk_id /mnt/gitea

字符串ext4选项指定了文件系统类型, ext4 在这种情况下,虽然取决于您的卷的文件系统类型,它可能是xfsnfs;要检查您的卷使用的类型,请运行mount命令没有选项:

1mount

这将为您提供每个安装的文件系统的输出线,因为您刚刚安装了您的文件系统,它很可能会是列表中的最后一个:

1[secondary_label Output]
2. . .
3/dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)

这表明文件系统类型为ext4

此命令将其 ID 指定的设备设置为 /mnt/gitea. -o 选项指定了安装时使用的选项. 在这种情况下,您正在使用允许安装读写文件系统的默认选项,而 `noatime' 选项指定了内核不应该更新设备上的文件和目录的最后访问时间,以便更高效。

但是,一旦系统重新启动,它将不再安装(尽管数据将保留在音量上),因此您需要告诉系统在开始使用 /etc/fstab(文件系统表)文件后立即安装音量。

使用Echotee,将新行添加到/etc/fstab的末尾:

1echo '/dev/disk/by-id/your_disk_id /mnt/gitea ext4 defaults,nofail,noatime 0 0' | sudo tee /etc/fstab

此命令将字符串 /dev/disk/by-uid/your_disk_id 附加到 fstab 文件中,并将其打印到您的屏幕上。 与之前的 mount 命令一样,它会使用 defaultsnofailnoatime 选项将设备安装在安装点上。

一旦你的更改已在 /etc/fstab,内核将安装你的音量在启动。

<$>[注] 注: Linux 上的存储设备非常灵活,有各种不同类型的存储设备,从网络文件系统(NFS)到简单的旧硬盘。

步骤 2 — 配置 Gitea 以存储数据在区块存储量上

Gitea在一个中央位置维护所有存储库,包括所有用户和组织的存储库。除非配置不同,否则所有信息都保存在一个单一的目录中。此目录在默认安装中被命名为数据。为本教程的目的,我们将使用在Docker上运行的Gitea版本,如上文所链接的教程中所示。

首先,让我们了解一下这个数据目录包含了什么。 您可以通过移动到数据目录并运行ls命令来做到这一点。 使用-l格式将告诉我们有关这些文件的更多信息:

1cd gitea
2ls -l

这将提供如下列表:

1[secondary_label Output]
2total 20
3drwxr-xr-x 5 root root 4096 Jun 23 22:34 ./
4drwxrwxr-x 3 sammy sammy 4096 Jun 26 22:35 ../
5drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
6drwxr-xr-x 12 git git 4096 Jun 26 22:35 gitea/
7drwx------  2 root root 4096 Jun 23 22:34 ssh/

在这种情况下,它列出了五个目录.对 . 的输入是一个特殊的输入,它只是指当前目录,而 . 代表一个级别的目录. 这个输出显示当前目录是由 root用户所有,这在这种情况下是因为 Docker 作为特权用户运行,而一个级别的目录是由 sammy所有。

git目录对我们来说很重要,因为它包含我们可能希望存储在一个单独的卷中的所有存储库。

1ls -l git

这将提供该目录的长列表:

1[secondary_label Output]
2total 24
3drwxr-xr-x 5 git git 4096 Jun 23 22:42 ./
4drwxr-xr-x 6 root root 4096 Jun 27 14:21 ../
5-rw-r--r-- 1 git git 190 Jun 23 22:42 .gitconfig
6drwxr-xr-x 2 root root 4096 Jun 23 22:34 .ssh/
7drwxr-xr-x 2 git git 4096 Jun 23 22:42 lfs/
8drwxr-xr-x 5 git git 4096 Jun 30 20:03 repositories/

其中有两个目录:包含由Gitea管理的Git存储库的存储库和包含Git大文件存储功能的数据的lfs存储库。

鉴于此目录中存储的所有信息都很重要,您将希望将整个目录的内容纳入附件卷中。

从这一点开始,有两条路径,取决于您是否正在使用新的Gitea安装,并在安装过程中完成本教程,在第一条路径中,您可以在完成安装之前指定位置,在第二条路径中,您将学习如何移动现有安装。

设置一个新的Gitea安装

如果您正在开始使用全新的 Gitea 安装,您可以指定在配置过程中存储所有信息的位置,例如,如果您使用 Docker Compose 设置 Gitea,您可以将卷到附加的卷中。

使用您喜爱的文本编辑器打开docker-compose.yml文件. 下面的示例使用nano:

1nano docker-compose.yml

一旦您打开了文件,请在复合文件中搜索的条目,并在:的左侧修改地图,以指向Gitea数据目录的区块存储量中的适当位置。

 1[label docker-compose.yml]
 2...
 3
 4    volumes:
 5      - /mnt/gitea:/data
 6      - /home/git/.ssh/:/data/git/.ssh
 7      - /etc/timezone:/etc/timezone:ro
 8      - /etc/localtime:/etc/localtime:ro
 9
10...

当您完成设置信息时,保存并关闭文件. 如果您使用nano,您可以通过按CTRL + X,Y,然后按ENTER来完成此操作。

<$>[警告] 警告: SSH 服务器在 Git 用户的主目录中搜索 .ssh 目录(git,在这种情况下)。该目录包含 Gitea 将使用的所有 SSH 密钥,因此不建议移动此 Docker 卷的安装。为了将此位置备份到您的目录中,最好使用另一种解决方案,例如一个 cron 工作来备份目录。

当您运行docker-compose并安装Gitea时,它将使用您的区块存储量来存储其数据。

如果您不使用 Docker 卷来管理数据的位置 - 例如,如果您正在通过 Gitea 的这些指令 --- 通过二进制版本在您的服务器上安装 Gitea,那么在您设置所有值并在浏览器中执行最终安装步骤之前,您需要修改配置文件中的位置(通常是 /etc/gitea/app.ini)。

 1[label app.ini]
 2...
 3
 4# If you are using SQLite for your database, you will need to change the PATH
 5# variable in this section
 6[database]
 7...
 8PATH = /mnt/gitea/gitea.db
 9
10[server]
11...
12LFS_CONTENT_PATH = /mnt/gitea/lfs
13
14[repository]
15ROOT = /mnt/gitea/gitea-repositories
16
17...

<$>[注] 注: 请确保您的 git 用户可以访问此位置。

移动现有 Gitea 安装

如果您已经安装并运行了 Gitea 实例,您仍然可以将数据存储在一个单独的卷上,但这将需要一些注意,以确保您的所有数据都保持安全和可访问的 Gitea。

<$>[注] 注: 与涉及您的数据的任何操作一样,重要的是要确保您拥有最新的备份,在这种情况下,这意味着将数据目录中的所有文件(SSH 文件、gitea 存储库和lfs 目录、数据库等)备份到安全位置。

有两种方法可以将数据移动到一个新的卷。第一种方法是将您的Gitea数据复制到次要位置,然后将原始位置转换为您的卷的安装点。当您将数据复制回该位置时,您将将其复制到该卷,并且在Gitea本身不需要任何更改;它将像以前那样继续。

无论您选择哪种选项,首先要停止Gitea网络服务。

如果您通过 Docker Compose 安装了 Gitea,请使用docker-compose来停止服务,同时在包含docker-compose.yml文件的相同目录中运行:

1docker-compose down

如果您已将其安装为 systemd 服务,请使用systemctl命令:

1sudo systemctl stop gitea

一旦 Gitea 已停止,将数据目录的全部内容移动到步骤 1 中所做的安装点。

1sudo mv * /mnt/gitea

通过列出当前目录的内容来确保所有文件都已移动:

1ls -la

这只会返回当前和主目录条目:

1total 8
2drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
3drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../

一旦所有数据都已移动,更改到新的数据目录:

1cd /mnt/gitea

使用ls,确保一切看起来是正确的:

1ls -l

这将显示目录的内容:

1[secondary_label Output]
2total 36
3drwxr-xr-x 6 root root 4096 Jun 27 14:21 ./
4drwxr-xr-x 3 root root 4096 Jun 27 14:21 ../
5drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
6drwxr-xr-x 13 git git 4096 Jul 11 08:25 gitea/
7drwx------  2 root root 16384 Jun 27 03:46 lost+found/
8drwx------  2 root root 4096 Jun 23 22:34 ssh/

与以往一样,它应该包含ssh,gitgitea目录. 如果您使用SQLite作为数据库来管理Gitea,它也会在gitea目录中包含一个名为gitea.db的文件。

当您确信所有数据都已移动时,是时候将体积集到数据目录。

在此示例中,使用使用使用 Docker Compose 的 Gitea 安装,如在前提条件中链接的教程中所描述的那样,这是包含您的 docker-compose.yml 文件的目录。

1cd ~/gitea/

和以前一样,使用安装命令,但这次,使用您刚刚空白的目录作为目的地:

1sudo mount -o defaults,noatime /dev/disk/by-id/your_disk_id gitea

现在,当你列出该目录的内容时,你的所有文件都应该在那里:

1ls -la gitea

请注意,根据您的文件系统类型,您可能会找到一个名为丢失+发现的额外目录;这是正常的,也是日常使用的文件系统的一部分:

1total 36
2drwxr-xr-x 6 root root 4096 Jun 27 13:58 ./
3drwxrwxr-x 3 sammy sammy 4096 Jun 27 02:23 ../
4drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
5drwxr-xr-x 12 git git 4096 Jun 27 00:00 gitea/
6drwx------  2 root root 16384 Jun 27 03:46 lost+found/
7drwx------  2 root root 4096 Jun 23 22:34 ssh/

如上所述,如果您希望Gitea在区块存储量中使用一个目录,则需要完成一个额外的步骤,以便在将Gitea备份起来,例如,假设您希望在您的目录上使用名为scm的文件夹,设置为/mnt/gitea

1sudo ln -s /mnt/gitea/scm gitea

在此时,您可以重新启动 Gitea. 如果您正在使用 Gitea 作为 systemd 服务,请运行:

1sudo systemctl restart gitea

如果您正在使用 Docker Compose 作为 Docker 容器运行 Gitea,请运行:

1docker-compose up -d

现在一切都在运行,请访问您的浏览器中的Gitea实例,并确保一切按预期工作. 您应该能够在Gitea中创建新的对象,如存储库,问题等。

结论

在本教程中,你将所有的Gitea数据迁移到一个区块存储量. 类似的卷非常灵活,并提供许多好处,例如允许你存储所有的数据在更大的磁盘,RAID卷,网络文件系统,或使用块存储,如DigitalOcean卷来减少存储成本。

Published At
Categories with 技术
comments powered by Disqus