Перейти к содержимому
GitRiverGitRiver
EN
Навигация

Конфигурация

Все параметры GitRiver: TOML-файл, переменные окружения, CI/CD, SMTP, LDAP, S3

GitRiver настраивается через TOML-файл и/или переменные окружения с преисправлением GITRIVER_*. Переменные окружения всегда имеют приоритет над значениями из файла.

Где хранится конфиг

В Docker конфиг хранится в /var/lib/gitriver/gitriver.toml и создаётся автоматически при первом запуске. Большинство параметров можно задать через переменные окружения GITRIVER_* в docker-compose - это рекомендуемый способ.


Основные параметры

Эти параметры определяют как GitRiver слушает подключения и где хранит данные.

host = "0.0.0.0"
port = 3000
base_url = "https://git.example.com"
database_url = "postgres://gitriver:password@postgres/gitriver"
git_repos_path = "/var/lib/gitriver/repos"
Параметр Env-переменная По умолчанию Для чего
host GITRIVER_HOST 0.0.0.0 На каком адресе слушать подключения
port GITRIVER_PORT 3000 HTTP-порт
base_url GITRIVER_BASE_URL http://{host}:{port} Внешний URL - используется в email-ссылках, CI-переменных, вебхуках. В production обязательно укажите с https://
database_url GITRIVER_DATABASE_URL - PostgreSQL URL. Если не указан - запускается мастер настройки
git_repos_path GITRIVER_GIT_REPOS_PATH /var/lib/gitriver/repos Директория для bare-репозиториев git
web_dist_path GITRIVER_WEB_DIST_PATH - Каталог с другой сборкой интерфейса. Не задан — отдаётся интерфейс, встроенный в бинарник

Подключение к БД через отдельные параметры

Вместо database_url можно задать компоненты подключения по отдельности. Это удобно в Docker Compose:

GITRIVER_DB_HOST=postgres
GITRIVER_DB_PORT=5432
GITRIVER_DB_USER=gitriver
GITRIVER_DB_PASS=сильный_пароль
GITRIVER_DB_NAME=gitriver

Если задан GITRIVER_DATABASE_URL - отдельные параметры игнорируются.

JWT-секрет

jwt_secret = "ваш-секрет-минимум-32-символа"
Env-переменная По умолчанию
GITRIVER_JWT_SECRET Автоматически генерируется и сохраняется в файл .jwt_secret

Используется для подписи сессионных токенов. Если файл .jwt_secret удалить - все активные сессии станут недействительными.

Запрещённые значения: secret, changeme, change-me-in-production, jwt_secret. GitRiver откажется запускаться с такими значениями.

SSH-доступ

authorized_keys_path = "/home/gitriver/.ssh/authorized_keys"

Путь к файлу authorized_keys для SSH-доступа через OpenSSH. SSH-ключи пользователей хранятся в БД; GitRiver автоматически записывает их в этот файл. Если путь не задан - автоматическая запись ключей не происходит и SSH-доступ нужно настроить вручную.


CI/CD

Параметры, управляющие встроенной системой непрерывной интеграции.

ci_data_path = "/var/lib/gitriver/ci-data"
ci_max_concurrent_jobs = 4
ci_job_timeout_secs = 3600
ci_docker_runtime = "default"
Параметр Env-переменная По умолчанию Для чего
ci_data_path GITRIVER_CI_DATA_PATH {repos}/../ci-data Директория для логов и рабочих пространств CI
ci_local_executor_enabled GITRIVER_CI_LOCAL_EXECUTOR true Встроенный исполнитель: сервер выполняет задания сам, в контейнерах Docker. false - задания уходят внешним исполнителям, Docker серверу не нужен
ci_max_concurrent_jobs GITRIVER_CI_MAX_CONCURRENT_JOBS 4 Сколько CI-задач выполняются одновременно на встроенном исполнителе
ci_job_timeout_secs GITRIVER_CI_JOB_TIMEOUT_SECS 3600 (1 час) Таймаут одной задачи. Максимум - 21600 (6 часов)
ci_pipeline_retention_days GITRIVER_CI_PIPELINE_RETENTION_DAYS 90 Сколько дней хранить данные о пайплайнах. 0 = навсегда
ci_docker_memory GITRIVER_CI_DOCKER_MEMORY 2g Лимит RAM для Docker-контейнера каждой CI-задачи
ci_docker_cpus GITRIVER_CI_DOCKER_CPUS 2 Лимит CPU для Docker-контейнера
ci_docker_runtime GITRIVER_CI_DOCKER_RUNTIME default Docker runtime для CI-контейнеров
ci_git_clone_timeout_secs GITRIVER_CI_GIT_CLONE_TIMEOUT_SECS 120 Таймаут git clone при подготовке рабочего пространства
ci_job_token_ttl_secs GITRIVER_CI_JOB_TOKEN_TTL_SECS 28800 (8 ч) Время жизни CI_JOB_TOKEN

Сервер без Docker

ci_local_executor_enabled = false (GITRIVER_CI_LOCAL_EXECUTOR=false) выключает встроенный исполнитель. Серверу перестают быть нужны и Docker, и доступ к его сокету: он занят только git, базой и HTTP, а сборки уходят на машины внешних исполнителей. Так GitRiver ставится на лёгкую машину и в окружение, где Docker запрещён политикой.

В этом режиме сервер не трогает Docker вовсе: уборка осиротевших контейнеров BuildKit и обслуживание кеша сборки не запускаются, пределы ci_docker_memory, ci_docker_cpus и ci_job_pids_limit не действуют, а ci_max_concurrent_jobs не занимается - он про встроенный исполнитель.

Сначала исполнитель, потом выключение. Наружу уходит вся очередь, включая задания с runs_on: default и задания вовсе без runs_on. Запасного варианта «выполнить на сервере» в этом режиме нет: если ни один исполнитель не подключён, задание сразу завершается ошибкой. Как подключить исполнителей - в разделе CI/CD - продвинутое.


Docker Runtime

Параметр ci_docker_runtime определяет как GitRiver запускает CI-контейнеры:

  • default - обычный Docker. Подходит для большинства задач.
  • sysbox - rootless Docker-in-Docker через sysbox-runc. Безопасно, но требует установки sysbox.
  • rootless - rootless Docker. Безопасно, но ограничено в совместимости.
  • privileged - полный Docker-in-Docker. Позволяет собирать образы внутри CI, но небезопасно для production - контейнер получает доступ к хосту.

Если ваши CI-задачи собирают Docker-образы (docker build), используйте sysbox или privileged. Для обычных тестов достаточно default.


SMTP (email-уведомления)

Для отправки email-уведомлений (приглашения, сброс пароля, события в репозиториях) настройте SMTP-сервер.

[smtp]
host = "smtp.example.com"
port = 587
username = "gitriver@example.com"
password = "пароль_от_почты"
from = "GitRiver <gitriver@example.com>"
starttls = true
Поле Для чего
host Адрес SMTP-сервера
port Порт: 587 (STARTTLS) или 465 (implicit TLS)
username Логин аутентификации (опционально)
password Пароль (опционально)
from Адрес отправителя - то, что увидит получатель
starttls Использовать STARTTLS (по умолчанию true)

Также настраивается через UI: Администрирование -> SMTP -> тест отправки.


LDAP (корпоративная аутентификация)

Подключение корпоративного каталога (Active Directory, OpenLDAP) для единого входа.

[ldap]
url = "ldaps://ldap.example.com:636"
bind_dn = "cn=service,dc=example,dc=com"
bind_password = "пароль_сервисного_аккаунта"
search_base = "ou=users,dc=example,dc=com"
user_filter = "(&(objectClass=person)(uid={login}))"
email_attr = "mail"
display_name_attr = "displayName"
admin_group_dn = "cn=admins,ou=groups,dc=example,dc=com"
Поле Для чего
url URL LDAP-сервера. ldap:// для plain, ldaps:// для TLS
bind_dn DN сервисного аккаунта для поиска пользователей
bind_password Пароль сервисного аккаунта
search_base Где искать пользователей в дереве LDAP
user_filter Фильтр поиска. {login} заменяется на введённый логин
email_attr Атрибут с email-адресом (обычно mail)
display_name_attr Атрибут с отображаемым именем (обычно displayName)
admin_group_dn DN группы - члены получают права администратора GitRiver

Также настраивается через UI: Администрирование -> LDAP -> кнопка «Тест подключения».

Вход через LDAP - возможность редакции Max, в Community его нет. Учётной записи, которая входит только через каталог, нужно место Max, а по окончании льготного срока лицензии вход через каталог закрывается - см. корпоративный вход и места Max.


S3 (хранилище для Container Registry)

По умолчанию образы Container Registry и LFS-файлы хранятся в файловой системе. Для production рекомендуется S3-совместимое хранилище (MinIO, AWS S3, Yandex Object Storage).

[s3]
endpoint = "http://minio:9000"
bucket = "gitriver-registry"
access_key = "minioadmin"
secret_key = "minioadmin"
region = "us-east-1"
temp_dir = "/tmp/gitriver-uploads"
part_size_mb = 5
Поле Для чего
endpoint URL S3-эндпоинта
bucket Имя бакета (должен существовать)
access_key, secret_key Ключи доступа
region Регион (для MinIO - любое значение)
temp_dir Директория для временных файлов при загрузке
part_size_mb Размер части при multipart-загрузке (5-100 МБ)

Также настраивается через UI: Администрирование -> Хранилище -> тест подключения.

Без секции [s3] всё хранится в файловой системе ({git_repos_path}).


Резервные копии

GITRIVER_BACKUP_ENCRYPTION_KEY=ваш_ключ_base64

Ключ AES-256 для шифрования резервных копий. Сгенерировать: openssl rand -base64 32. Если не указан - резервные копии сохраняются без шифрования.


Лицензирование

GITRIVER_LICENSE_SERVER_URL=https://gitriver.ru

URL сервера для отметок лицензии (раз в 24 часа). По умолчанию - https://gitriver.ru.

Связь нужна не для работы: после активации установка работает без неё в пределах срока подтверждения, а он продлевается очередной отметкой либо файлом активации, вставленным вручную. Закрытому контуру срок подтверждения выдаётся длиннее - см. раздел Лицензирование.


Прочие параметры

Параметр Env-переменная По умолчанию Для чего
webhook_timeout_secs GITRIVER_WEBHOOK_TIMEOUT_SECS 10 Таймаут HTTP-запроса при доставке вебхука
lfs_token_ttl_secs GITRIVER_LFS_TOKEN_TTL_SECS 900 (15 мин) Время жизни JWT для LFS-операций
registry_token_expiry_secs GITRIVER_REGISTRY_TOKEN_EXPIRY_SECS 7200 (2 ч) Время жизни токена Docker Registry
sse_keepalive_secs GITRIVER_SSE_KEEPALIVE_SECS 15 Интервал keepalive для SSE (стриминг CI-логов)
pages_data_path GITRIVER_PAGES_DATA_PATH {repos}/../pages-data Директория для Pages-развёртываний