Введение
Gitea – это репозиторий исходного кода, основанный на системе контроля версий Git. Хотя существует несколько самохостинговых решений, таких как GitLab и Gogs, Gitea имеет преимущество быть легковесным, что означает, что он может работать на относительно небольшом сервере.
Однако иметь небольшой сервер, особенно в области VPS, часто означает ограничение места. К счастью, многие поставщики хостинга также предлагают дополнительное хранилище в виде внешних томов, блочного хранилища или сетевого файлового хранилища (NFS). Это дает пользователям возможность экономить на более мелких хостах VPS для своих приложений без потери хранилища.
С Gitea и возможностью выбора места хранения вашего исходного кода вы можете обеспечить расширение ваших проектов и файлов. В этом руководстве вы подключите внешний том хранения к точке монтирования и убедитесь, что Gitea читает соответствующую информацию с этого тома. К концу вы получите установку Gitea, которая сохраняет репозитории и другую важную информацию на отдельном томе хранения.
Предварительные требования
Прежде чем начать, вам понадобится следующее:
- Сервер Ubuntu 20.04 настроен в соответствии с нашим руководством по начальной настройке сервера для Ubuntu 20.04, с не-root пользователем с привилегиями sudo и включенным брандмауэром.
- Внешний том, такой как NFS или том блочного хранилища. Если вы хотите настроить том блочного хранилища от DigitalOcean, следуйте нашей документации по продукту.
- Установка Gitea на этом сервере с доступом через доменное имя. В этом руководстве предполагается, что вы установили Gitea в Docker, как описано в нашем учебнике Как установить Gitea на Ubuntu 20.04. Обратите внимание, что для этого потребуется установить Docker и Docker Compose на ваш сервер. Вы можете установить эти инструменты, следуя инструкциям в этих учебниках:
Обратите внимание, что если вы установили Gitea с использованием другого метода, чем указано в этих предварительных требованиях, имена и местоположения определенных файлов и каталогов на вашей системе могут отличаться от того, что упоминается в этом руководстве. Однако концепции, изложенные в этом учебнике, должны быть применимы к любой установке Gitea.
Шаг 1 — Монтирование тома блочного хранилища
A volume can take many different forms. It could be an NFS volume, which is storage available on the network provided via a file share. Another possibility is that it takes the form of block storage via a service such as DigitalOcean’s Volumes. In both cases, storage is mounted on a system using the mount
command.
Такие тома будут видны как файлы устройств, хранящиеся в каталоге /dev
. Эти файлы используются ядром для связи с самими устройствами хранения; файлы на самом деле не используются для хранения. Чтобы иметь возможность хранить файлы на устройстве хранения, вам нужно будет примонтировать их с помощью команды mount
.
Сначала вам нужно создать точку монтирования — то есть папку, которая будет ассоциирована с устройством, так что данные, хранящиеся в ней, окажутся хранящимися на этом устройстве. Точки монтирования для таких устройств хранения обычно находятся в каталоге /mnt
.
Создайте точку монтирования с именем gitea
, как вы создавали бы обычный каталог с помощью команды mkdir
:
Отсюда вы можете примонтировать устройство в этот каталог, чтобы использовать его для доступа к этому пространству хранения. Используйте команду mount
для монтирования устройства:
Опция строки ext4
указывает тип файловой системы, в данном случае ext4, хотя в зависимости от типа файловой системы вашего тома это может быть что-то вроде xfs
или nfs
; чтобы проверить, какой тип использует ваш том, выполните команду mount
без опций:
Это выведет вам строку вывода для каждой примонтированной файловой системы. Поскольку вы только что примонтировали вашу, она, вероятно, будет последней в списке:
Output. . .
/dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)
Это показывает, что тип файловой системы – ext4
.
Эта команда монтирует устройство, указанное по его ID, в /mnt/gitea
. Опция -o
указывает параметры, используемые при монтировании. В данном случае вы используете параметры по умолчанию, которые позволяют монтировать файловую систему для чтения и записи, а опция noatime
указывает, что ядро не должно обновлять время последнего доступа к файлам и каталогам на устройстве, чтобы быть более эффективным.
Теперь, когда вы примонтировали ваше устройство, оно останется примонтированным до тех пор, пока система работает. Однако, как только система перезагрузится, оно больше не будет примонтировано (хотя данные останутся на томе), поэтому вам нужно будет сообщить системе примонтировать том сразу после запуска, используя файл /etc/fstab
(«таблица файловых систем»). Этот файл перечисляет доступные файловые системы и их точки монтирования в формате, разделенном табуляцией.
Используя echo
и tee
, добавьте новую строку в конец файла /etc/fstab
:
Эта команда добавляет строку /dev/disk/by-uid/идентификатор_вашего_диска
в файл fstab
и выводит его на экран. Как и предыдущая команда mount
, она монтирует устройство на точку монтирования с использованием опций defaults
, nofail
и noatime
.
После внесения изменений в файл /etc/fstab
ядро будет монтировать ваш том при загрузке.
Примечание: Накопители на Linux очень гибкие и представлены во всех различных типах, от сетевой файловой системы (NFS) до обычного жесткого диска. Чтобы узнать больше о блочном хранилище и устройствах в Linux, вы можете прочитать больше о концепциях хранения в нашем Введении в терминологию и концепции хранения в Linux.
Шаг 2 — Настройка Gitea для хранения данных на блочном томе хранения
Gitea поддерживает все свои репозитории в центральном месте. Это включает репозитории всех пользователей и организаций. Если не сконфигурировано иначе, вся информация хранится в одном каталоге. Этот каталог называется data
в установках по умолчанию. Для целей этого руководства мы будем использовать версию Gitea, работающую на Docker, как в связанном выше руководстве.
Сначала давайте поймем, что содержится в этом каталоге данных. Вы можете сделать это, переместившись в каталог данных и запустив команду ls
. Использование формата -l
даст нам больше информации о файлах:
Это предоставит список, подобный следующему:
Outputtotal 20
drwxr-xr-x 5 root root 4096 Jun 23 22:34 ./
drwxrwxr-x 3 sammy sammy 4096 Jun 26 22:35 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 12 git git 4096 Jun 26 22:35 gitea/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Давайте разберем вывод этой команды. Он перечисляет один файл или каталог на каждой строке. В этом случае он перечисляет пять каталогов. Запись для .
является специальной записью, которая означает текущий каталог, а ..
означает каталог на один уровень вверх. Этот вывод показывает, что текущий каталог принадлежит пользователю root, что является случаем в данном примере, потому что Docker запускается от имени привилегированного пользователя, а каталог на один уровень вверх принадлежит пользователю sammy.
Каталог git
важен для нас, потому что содержит все репозитории, которые мы можем хотеть сохранить на отдельном томе. Выведите содержимое каталога:
Это предоставит длинный список каталога:
Outputtotal 24
drwxr-xr-x 5 git git 4096 Jun 23 22:42 ./
drwxr-xr-x 6 root root 4096 Jun 27 14:21 ../
-rw-r--r-- 1 git git 190 Jun 23 22:42 .gitconfig
drwxr-xr-x 2 root root 4096 Jun 23 22:34 .ssh/
drwxr-xr-x 2 git git 4096 Jun 23 22:42 lfs/
drwxr-xr-x 5 git git 4096 Jun 30 20:03 repositories/
Внутри находятся два интересных каталога: каталог repositories
, который содержит репозитории Git, управляемые Gitea и отсортированные по пользователю/организации, и каталог lfs
, содержащий данные для функционала Git Large File Storage. Каталог gitea
содержит информацию, которую использует Gitea в фоновом режиме, включая архивы старых репозиториев, а также базу данных, содержащую информацию, такую как пользователи и информация о репозиториях, используемая веб-сервисом. Каталог ssh
содержит различные ключевые пары SSH, которые использует Gitea.
Учитывая, что вся информация, хранящаяся в этом каталоге, важна, вам следует включить все содержимое каталога на нашем прикрепленном томе.
Существует два пути, которые можно выбрать отсюда, в зависимости от того, работаете ли вы с новой установкой Gitea и завершаете ли вы этот учебник в процессе установки. На первом пути вы сможете указать местоположения до завершения установки, а на втором вы узнаете, как переместить существующую установку.
Настройка новой установки Gitea
Если вы начинаете с совершенно новой установки Gitea, вы можете указать, где хранится вся ваша информация в процессе конфигурации. Например, если вы настраиваете Gitea с использованием Docker Compose, вы можете отобразить тома на ваш прикрепленный том.
Откройте файл docker-compose.yml
с помощью выбранного вами текстового редактора. В следующем примере используется nano
:
Когда файл открыт, найдите запись volumes
в файле compose и измените отображение слева от :
, чтобы указать соответствующие местоположения на вашем блочном накопителе для каталога данных Gitea
Когда вы закончите установку информации, сохраните и закройте файл. Если вы используете nano
, вы можете сделать это, нажав CTRL + X
, Y
, а затем ENTER
.
Предупреждение: SSH-серверы ищут каталог .ssh
в домашнем каталоге пользователя Git (git, в данном случае). Этот каталог содержит все SSH-ключи, которые будет использовать Gitea, поэтому не рекомендуется перемещать монтирование для этого тома Docker. Для того чтобы иметь возможность резервного копирования этого расположения на вашем томе, лучше использовать другое решение, такое как cron
-задача для резервного копирования каталога. Чтобы узнать больше, ознакомьтесь с этим руководством по использованию cron
для управления запланированными задачами.
Когда вы запускаете docker-compose
и устанавливается Gitea, он будет использовать ваш том блочного хранилища для хранения своих данных.
Если вы не используете Docker-тома для управления расположением ваших данных — например, если вы устанавливаете Gitea на свой сервер с помощью двоичных релизов в соответствии с этими инструкциями от Gitea — то вам нужно будет изменить расположения в файле конфигурации (обычно /etc/gitea/app.ini
) при установке всех значений и перед выполнением окончательных шагов установки в браузере. Например, вы можете установить их следующим образом:
Примечание: Убедитесь, что ваш пользователь git имеет права на запись в это местоположение. Вы можете ознакомиться с разрешениями Linux здесь.
Перенос существующей установки Gitea
Если у вас уже установлен и работает экземпляр Gitea, вы все равно сможете хранить свои данные на отдельном томе, но это потребует некоторых мер предосторожности для обеспечения безопасности и доступности всех ваших данных для Gitea.
Примечание: Как и в любой операции с вашими данными, важно убедиться, что у вас есть актуальная резервная копия всего. В этом случае это означает резервную копию всех файлов в вашем каталоге данных (файлы SSH, каталоги gitea-repositories
и lfs
, база данных и так далее) в безопасное местоположение.
Существует два способа перемещения ваших данных на новый том. Первый способ – скопировать данные Gitea во второе местоположение, затем превратить исходное местоположение в точку монтирования для вашего тома. Когда вы скопируете свои данные обратно в это местоположение, вы будете копировать их на этот том, и изменения в Gitea не потребуются; он просто будет продолжать работу так же, как и раньше. Если же вы не хотите монтировать весь накопитель в это место назначения (например, если ваши данные Gitea не будут единственным на этом томе), то второй вариант – переместить все ваши данные Gitea в новое местоположение на этом томе и настроить сам Gitea использовать это местоположение.
Независимо от выбранного варианта, сначала остановите веб-сервис Gitea.
Если вы установили Gitea через Docker Compose, используйте команду docker-compose
для остановки сервиса. Находясь в той же директории, что и файл docker-compose.yml
, выполните:
Если вы установили его как службу systemd, используйте команду systemctl
:
После того как Gitea будет остановлен, переместите все содержимое каталога данных в точку монтирования, созданную на шаге 1:
Убедитесь, что все файлы были перемещены, перечислив содержимое текущего каталога:
Это вернет только записи текущего и родительского каталогов:
total 8
drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../
Когда все данные будут перемещены, перейдите в новый каталог данных:
Используя команду ls
, убедитесь, что все выглядит правильно:
Это покажет содержимое каталога:
Outputtotal 36
drwxr-xr-x 6 root root 4096 Jun 27 14:21 ./
drwxr-xr-x 3 root root 4096 Jun 27 14:21 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 13 git git 4096 Jul 11 08:25 gitea/
drwx------ 2 root root 16384 Jun 27 03:46 lost+found/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Как и ранее, он должен содержать каталоги ssh
, git
и gitea
. Если вы используете SQLite в качестве базы данных для управления Gitea, то в каталоге gitea
также будет файл с именем gitea.db
.
Когда вы уверены, что все данные были перемещены, пришло время подключить том к каталогу данных.
Сначала переместитесь в родительский каталог каталога данных, в котором вы находились ранее. В этом примере с установкой Gitea с использованием Docker Compose, описанной в учебнике, связанном с предварительными требованиями, это каталог, содержащий ваш файл docker-compose.yml
.
Как и ранее, используйте команду mount
, но на этот раз в качестве места назначения используйте только что очищенный каталог:
Теперь, когда вы перечислите содержимое этого каталога, все ваши файлы должны находиться на месте:
Эта команда выведет ожидаемую информацию. Обратите внимание, что в зависимости от типа файловой системы вашего тома, вы можете обнаружить дополнительный каталог с именем lost+found
; это нормально и часть ежедневного использования файловой системы:
total 36
drwxr-xr-x 6 root root 4096 Jun 27 13:58 ./
drwxrwxr-x 3 sammy sammy 4096 Jun 27 02:23 ../
drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/
drwxr-xr-x 12 git git 4096 Jun 27 00:00 gitea/
drwx------ 2 root root 16384 Jun 27 03:46 lost+found/
drwx------ 2 root root 4096 Jun 23 22:34 ssh/
Как упоминалось ранее, если вы хотите, чтобы Gitea использовала каталог внутри блочного тома, вам нужно выполнить дополнительный шаг перед повторным запуском Gitea. Например, предположим, что вы хотите использовать папку с именем scm
на вашем томе, смонтированном на /mnt/gitea
. После перемещения всех ваших данных Gitea в /mnt/gitea/scm
, вам нужно будет создать символическую ссылку из вашего старого каталога данных в новый. Для этого вы будете использовать команду ln
:
На данный момент вы можете перезапустить Gitea. Если вы используете Gitea как службу systemd, выполните:
Если вы запускаете Gitea в контейнере Docker с использованием Docker Compose, выполните:
Теперь, когда всё работает, посетите ваш экземпляр Gitea в браузере и убедитесь, что всё работает как ожидается. Вы должны иметь возможность создавать новые объекты в Gitea, такие как репозитории, задачи и т. д. Если вы настроили Gitea с SSH шлюзом, вы также сможете проверять и загружать репозитории с помощью git clone
и git push
.
Заключение
В этом учебном пособии вы переместили все ваши данные Gitea на блочное хранилище. Такие тома очень гибкие и предоставляют множество преимуществ, таких как возможность хранения всех ваших данных на более крупных дисках, объединенных в массив RAID, сетевых файловых системах или с использованием блочного хранилища, такого как DigitalOcean Volumes, для снижения расходов на хранение. Это также позволяет создавать снимки целых дисков для резервного копирования, чтобы восстановить их содержимое в случае катастрофического сбоя.