Навигация
Конфигурация
Все параметры 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-развёртываний |