Forgejo
Forgejo — это свободная и открытая платформа для хостинга Git-репозиториев, созданная как дружелюбный форк проекта Gitea в ответ на изменения в его управлении. Она предоставляет все ключевые функции для совместной разработки: управление репозиториями, отслеживание задач (issues), pull requests, встроенный CI/CD, вики, а также инструменты для управления проектами и командами.
https://packages.altlinux.org/ru/sisyphus/srpms/forgejo/
Установка Forgejo
apt-get install forgejoОстальные этапы установки производятся абсолютно также, как и при установке Gitea, единственное отличие, это расположение файла app.ini: /etc/forgejo/app.ini
Фишки из документации, которые не описаны в Gitea
LXC
Если указывается lxc как label type, то остальная ее часть интерпретируется как template[:release[:lxc-helper config]]где:
template[:release] — это шаблон и версия для использования. lxc-helper config — это значение параметра —config lxc-helper, используемого при создании контейнера.
Исполнитель выполнит все шаги от имени root в контейнере LXC, созданном на основе этого шаблона и выпуска. Шаблон по умолчанию — debian, а выпуск по умолчанию — bullseye. Установлен nodejs версии 20.
Примеры лейблов:
bookworm:lxc://debian:bookworm:lxc docker Определяется bookworm как контейнер LXC, работающий под управлением Debian GNU/Linux Bookworm. Он обладает необходимыми возможностями для запуска вложенного контейнера LXC и движка Docker.
bookworm:lxc://debian:bookworm Определяется bookworm как контейнер LXC, работающий под управлением Debian GNU/Linux Bookworm. Он обладает необходимыми возможностями для запуска вложенного контейнера LXC, виртуальных машин KVM и движка Docker.
HOST
Если указывается host в качестве label type, то исполнитель выполнит все шаги в оболочке, ответвленной от исполнителя, непосредственно на хосте.
Внимание: никакой изоляции не существует, и одно задание может навсегда уничтожить хост.
Пример этикетки:
self-hosted:host определяет self-hosted быть оболочкой.
Специальные labels
Метки раннера также можно использовать для определения других специальных функций. Например, можно использовать gpu:docker://node:20-bullseye для определения бегуна с установленным графическим процессором. Рабочие процессы, которым требуется графический процессор, можно затем указать runs-on: gpu для выполнения на этом бегуне.
Настройки хранилища
Хранилище для каждой подсистемы определяется в файле app.ini. Оно может быть на диске (локальное, по умолчанию) или использовать совместимый с S3 сервер minio. В обоих случаях каждая подсистема хранит все файлы (или объекты в терминологии S3) в выделенной директории, как показано в таблице ниже:
| Подсистема | Директория | Секции в app.ini |
|---|---|---|
| Вложения | attachments/ | [attachment] |
| LFS | lfs/ | [lfs] |
| Аватары | avatars/ | [avatar] |
| Аватары репозиториев | repo-avatars/ | [repo-avatar] |
| Архивы репозиториев | repo-archive/ | [repo-archive] |
| Пакеты | packages/ | [packages] |
| Логи действий | actions_log/ | [storage.actions_log] |
| Артефакты действий | actions_artifacts/ | [actions.artifacts] |
Например:
- Если
STORAGE_TYPEимеет значениеlocal, аAPP_DATA_PATH—/appdata, то директорией по умолчанию для хранения вложений будет/appdata/attachments. - Если
STORAGE_TYPEимеет значениеminio, то директорией по умолчанию для хранения вложений в бакетеMINIO_BUCKETбудетattachments/.
Изменение хранилища для всех подсистем
Секция [storage] может использоваться для изменения хранилища всех подсистем. По умолчанию используется локальное хранилище в APP_DATA_PATH, что эквивалентно записи следующего в app.ini:
[server]
APP_DATA_PATH = /forgejo/data
[storage]
STORAGE_TYPE = local
PATH = /forgejo/dataИспользование local
Для локального хранилища секция [storage] может использоваться только для изменения пути, под которым будут создаваться директории всех подсистем, с помощью настройки PATH с указанием абсолютного пути.
Например:
[storage]
STORAGE_TYPE = local
PATH = /mystorageизменит путь по умолчанию для хранения вложений на /mystorage/attachments, для LFS — на /mystorage/lfs и т.д.
Использование minio
Секция [storage] может использоваться для изменения типа хранилища по умолчанию, используемого всеми подсистемами, на minio.
Например:
[storage]
STORAGE_TYPE = minio
MINIO_ENDPOINT = 127.0.0.1:9000
MINIO_ACCESS_KEY_ID = [redacted]
MINIO_SECRET_ACCESS_KEY = [redacted]
MINIO_BUCKET = forgejo
MINIO_LOCATION = us-east-1изменит хранилище по умолчанию для вложений на attachments/ в бакете forgejo, для LFS — на lfs/ в бакете forgejo и т.д.
ПРИМЕЧАНИЕ: Параметр MINIO_BASE_PATH не должен быть установлен в секции [storage].
Параметр конфигурации MINIO_USE_SSL по умолчанию имеет значение false для сохранения совместимости с локально размещенными экземплярами MinIO. Если предполагается использование внешнего провайдера S3, этому параметру следует присвоить значение true.
Например, предположим, что экземпляр (MinIO)[minio] находится по адресу https://minio.example.com:
[storage]
STORAGE_TYPE = minio
MINIO_USE_SSL = true
MINIO_ENDPOINT = minio.example.com
MINIO_ACCESS_KEY_ID = [redacted]
MINIO_SECRET_ACCESS_KEY = [redacted]
MINIO_BUCKET = bucket
MINIO_LOCATION = us-east-1Настройки хранилища для отдельной подсистемы
Можно настроить некоторые подсистемы на использование хранилища S3, а другие — на использование локального хранилища, добавив настройки в их соответствующие секции. Например:
[attachment]
PATH = /otherstorage/attachments
[lfs]
STORAGE_TYPE = minio
MINIO_BASE_PATH = lfs/
MINIO_ENDPOINT = 127.0.0.1:9000
MINIO_ACCESS_KEY_ID = [redacted]
MINIO_SECRET_ACCESS_KEY = [redacted]
MINIO_BUCKET = forgejo
MINIO_LOCATION = us-east-1будет хранить вложения в локальной директории /otherstorage/attachments, в то время как файлы LFS будут храниться на S3-сервере в директории lfs/ бакета forgejo.
Настройки хранилища
Значение STORAGE_TYPE может быть local (по умолчанию) для директорий файловой системы или minio для S3-серверов. Каждый тип хранилища имеет свои собственные настройки, как объясняется ниже.
Использование local
Существует всего одна настройка, когда STORAGE_TYPE установлен в local: PATH. Это должен быть абсолютный путь, и он интерпретируется следующим образом.
В секции
[storage]PATH— это путь, под которым будут создаваться директории каждой подсистемы вместоAPP_DATA_PATH. Например, еслиAPP_DATA_PATHравен/appdata:ini[storage] STORAGE_TYPE = local PATH = /mystorageсоздаст вложения в
/mystorage/attachmentsвместо/appdata/attachments, файлы LFS в/mystorage/lfsвместо/appdata/lfsи т.д.В секции, посвященной конкретной подсистеме (см. таблицу во введении),
PATH— это базовый путь, под которым будут храниться все файлы. Например:ini[storage] STORAGE_TYPE = local PATH = /mystorage [attachment] STORAGE_TYPE = local PATH = /otherstorage/attachmentsбудет хранить вложения в
/otherstorage/attachments, в то время как файлы LFS будут храниться в/mystorage/lfs.
Использование minio
Когда STORAGE_TYPE установлен в minio, настройки используются для подключения к совместимому с S3 серверу:
SERVE_DIRECT:false— Позволяет драйверу хранилища перенаправлять на аутентифицированные URL-адреса для прямой раздачи файлов. Поддерживается только через подписанные URL-адреса.MINIO_ENDPOINT:localhost:9000— Конечная точка S3 для подключения.MINIO_ACCESS_KEY_ID—accessKeyIDS3 для подключения.MINIO_SECRET_ACCESS_KEY—secretAccessKeyS3 для подключения.MINIO_BUCKET:forgejo— Бакет S3 для хранения данных.MINIO_BUCKET_LOOKUP:auto— Тип поиска бакета S3.auto— Автоопределениеdns— Стиль виртуального хостаpath— Path Style
MINIO_LOCATION:us-east-1— Локация S3 для создания бакета.MINIO_USE_SSL:false— Использование SSL в S3.MINIO_INSECURE_SKIP_VERIFY:false— Пропуск проверки SSL в S3.MINIO_CHECKSUM_ALGORITHM— Алгоритм контрольной суммы Minio:default(для MinIO, garage или AWS S3) илиmd5(для Cloudflare или Backblaze).
При использовании в секции [storage] они применяются ко всем подсистемам. При использовании в секции, специфичной для подсистемы (см. таблицу во введении), они используются только для объектов, принадлежащих этой подсистеме. Вот пример:
[storage]
STORAGE_TYPE = minio
SERVE_DIRECT = false
MINIO_ENDPOINT = garage:9000
MINIO_ACCESS_KEY_ID = [redacted]
MINIO_SECRET_ACCESS_KEY = [redacted]
MINIO_BUCKET = forgejo
MINIO_BUCKET_LOOKUP = auto
MINIO_LOCATION = us-east-1
MINIO_USE_SSL = false
MINIO_INSECURE_SKIP_VERIFY = false
MINIO_CHECKSUM_ALGORITHM = md5
[lfs]
STORAGE_TYPE = minio
MINIO_BASE_PATH = nonstandardlfs/
SERVE_DIRECT = false
MINIO_ENDPOINT = minio:9000
MINIO_ACCESS_KEY_ID = [redacted]
MINIO_SECRET_ACCESS_KEY = [redacted]
MINIO_BUCKET = forgejo
MINIO_BUCKET_LOOKUP = auto
MINIO_LOCATION = us-east-1
MINIO_USE_SSL = false
MINIO_INSECURE_SKIP_VERIFY = falseMINIO_BASE_PATH: Допустимо только в специфичной для подсистемы секции (см. таблицу во введении). Переопределяет директорию по умолчанию, в которой объекты хранятся в бакетеMINIO_BUCKET.
Для всех подсистем, которые используют тип хранилища minio, указанный в секции [storage], директория, в которой хранятся объекты, определяется с помощью таблицы во введении. Например, файлы LFS будут храниться в директории lfs/ внутри бакета forgejo.
Когда хранилище minio настроено в секции, специфичной для подсистемы, параметр MINIO_BASE_PATH может быть использован для переопределения директории по умолчанию. В примере выше MINIO_BASE_PATH = nonstandardlfs/ означает, что объекты LFS будут храниться в директории nonstandardlfs/ бакета forgejo вместо директории lfs/.
Устаревшие настройки
Некоторые настройки устарели, но все еще поддерживаются в интересах обратной совместимости. Их следует заменить следующим образом:
[server].LFS_CONTENT_PATHзаменяется на[lfs].PATH[picture].AVATAR_UPLOAD_PATHзаменяется на[avatar].PATH[picture].REPOSITORY_AVATAR_UPLOAD_PATHзаменяется на[repo-avatar].PATH
Устаревшие настройки имеют более низкий приоритет и будут переопределены их заменами, если присутствуют обе. Например:
[picture]
AVATAR_UPLOAD_PATH = /legacy_path
[avatar]
PATH = /avatar_pathбудет хранить файлы аватаров в /avatar_path.
Реестр пакетов Alt
Публикуйте пакеты Alt для вашего пользователя или организации.
Требования
Для работы с реестром Alt необходимо использовать менеджер пакетов APT-RPM для использования пакетов.
В следующих примерах используется apt-rpm.
Настройка реестра пакетов
Чтобы зарегистрировать реестр RPM, добавьте URL в список известных источников в файл конфигурации в каталоге /etc/apt/sources.list.d/:
rpm https://forgejo.example.com/api/packages/{owner}/alt/{group}.repo {arch} classic| Заполнитель | Описание |
|---|---|
owner | Владелец пакета. |
group | Опционально: Например, пусто, el7, rocky/el9, test/fc38. |
arch | Архитектура. |
Пример:
# без группы и архитектуры x86_64
rpm https://forgejo.example.com/api/packages/testuser/alt/alt.repo x86_64 classic
# с группой 'centos/el7' и архитектурой noarch
rpm https://forgejo.example.com/api/packages/testuser/alt/group/example1.repo noarch classicЕсли реестр приватный, укажите учетные данные в URL. Можно использовать пароль или персональный токен доступа:
rpm https://{username}:{your_password_or_token}@forgejo.example.com/api/packages/{owner}/alt/{group}.repo {arch} classicВам также потребуется добавить учетные данные в URL в созданном файле .repo в /etc/apt/sources.list.d/.
Публикация пакета
Чтобы опубликовать пакет RPM (*.rpm), выполните операцию HTTP PUT, поместив содержимое пакета в тело запроса.
PUT https://forgejo.example.com/api/packages/{owner}/alt/{group}/upload| Параметр | Описание |
|---|---|
owner | Владелец пакета. |
group | Опционально: Например, пусто, el7, rocky/el9, test/fc38. |
Пример запроса с использованием HTTP Basic аутентификации:
# без группы
curl --user your_username:your_password_or_token \
--upload-file path/to/file.rpm \
https://forgejo.example.com/api/packages/testuser/alt/upload
# с группой 'group/example1'
curl --user your_username:your_password_or_token \
--upload-file path/to/file.rpm \
https://forgejo.example.com/api/packages/testuser/alt/group/example1/uploadЕсли вы используете 2FA или OAuth, используйте персональный токен доступа вместо пароля. Нельзя опубликовать файл с тем же именем дважды в одном пакете. Сначала необходимо удалить существующую версию пакета.
Сервер отвечает со следующими кодами состояния HTTP:
| Код состояния HTTP | Значение |
|---|---|
201 Created | Пакет опубликован. |
400 Bad Request | Пакет невалиден. |
409 Conflict | Файл пакета с такой же комбинацией параметров уже существует в пакете. |
Удаление пакета
Чтобы удалить пакет RPM, выполните операцию HTTP DELETE. Это также удалит версию пакета, если в нем не останется файлов.
DELETE https://forgejo.example.com/api/packages/{owner}/alt/{group}.repo/{architecture}/RPMS.classic/{package_file_name.rpm}| Параметр | Описание |
|---|---|
owner | Владелец пакета. |
group | Опционально: Группа пакета. |
package_file_name.rpm | Имя файла пакета. |
architecture | Архитектура пакета. |
Пример запроса с использованием HTTP Basic аутентификации:
# без группы
curl --user your_username:your_token_or_password -X DELETE \
https://forgejo.example.com/api/packages/testuser/alt/alt.repo/x86_64/RPMS.classic/test-package.rpm
# с группой 'group/example1'
curl --user your_username:your_token_or_password -X DELETE \
https://forgejo.example.com/api/packages/testuser/alt/group/example1.repo/x86_64/RPMS.classic/test-package.rpmСервер отвечает со следующими кодами состояния HTTP:
| Код состояния HTTP | Значение |
|---|---|
204 No Content | Успешно. |
404 Not Found | Пакет или файл не найден. |
Установка пакета
Чтобы установить пакет из реестра RPM, выполните следующие команды:
# использовать последнюю версию
apt-get install {package_name}
# использовать конкретную версию
apt-get install {package_name}-{package_version}