README.md

GitFlic Server Helm Chart

GitFlic
HELM Chart - GitFlic Server

Официальная документация: Русский / English

Версия Helm чарта совпадает с версией ПО GitFlic. Версии до 4.6.1 помечены как deprecated.


Быстрая установка

helm install gitflic oci://registry.gitflic.ru/helm/company/gitflic/gitflic-server-chart \
    --namespace gitflic \
    --create-namespace

Будут развернуты все подсистемы (PostgreSQL, Redis, RabbitMQ) со встроенными образами. Сертификаты SSH/RSA сгенерируются автоматически.

Для доступа к web:

kubectl -n gitflic port-forward deployment/gitflic-gitflic-server 8080:8080
# Открыть http://localhost:8080

Архитектура

Компоненты

Компонент Тип Описание
GitFlic Server Deployment Основное приложение
PostgreSQL StatefulSet База данных
Redis StatefulSet Кэш
RabbitMQ StatefulSet Очереди
Elasticsearch StatefulSet Поиск по коду (опционально)

Выбор подсистем:

# Все подсистемы внутри кластера (по умолчанию)
--set redis.install=true
--set rabbitmq.install=true
--set elasticsearch.install=false

# Внешние подсистемы
--set redis.install=false --set redis.host=redis.external --set redis.password=secret
--set rabbitmq.install=false --set rabbitmq.host=rabbitmq.external --set rabbitmq.password=secret

Multi-release установка

Чарт поддерживает установку нескольких релизов в один namespace:

helm install gitflic-prod oci://... --generate-name
helm install gitflic-dev oci://... --generate-name
# Ресурсы: gitflic-prod-gitflic-server, gitflic-dev-gitflic-server

Имена ресурсов включают имя релиза через fullname helper:

  • <release-name>-gitflic-server (Deployment, Service)
  • <release-name>-gitflic-server-postgres (StatefulSet)
  • <release-name>-gitflic-server-redis (StatefulSet)
  • <release-name>-gitflic-server-rabbitmq (StatefulSet)

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

values.yaml

Основные параметры в values.yaml:

Секция Описание
cluster.zone DNS-зона кластера (по умолчанию svc.cluster.local)
<component>.password Пароли подсистем (redis, postgres, rabbitmq, mail, actuatorToken)
gitflic.storage Persistent storage для данных
gitflic.baseUrl URL приложения (для ссылок в UI)
ingress Ingress для внешнего доступа

Пароли и Secrets

Важно: Все пароли хранятся в Secrets.

# Кастомные пароли (рекомендуется для production)
--set gitflic.actuatorToken=your-token \
--set postgres.password=your-pg-password \
--set redis.password=your-redis-password \
--set rabbitmq.password=your-rabbitmq-password \
--set gitflic.mail.password=your-smtp-password

# Получить пароли (имя Secret = <release>-passwords)
kubectl -n gitflic get secrets gitflic-passwords -o jsonpath='{.data.postgres}' | base64 -d

Хранилище

Рекомендуется Longhorn:

helm install gitflic oci://... \
    --set redis.storage.storageClassName=longhorn \
    --set postgres.storage.storageClassName=longhorn \
    --set gitflic.storage.storageClassName=longhorn

Access modes:

  • ReadWriteOnce (RWO) — достаточно для single-replica
  • ReadWriteMany (RWX) — только при replicas > 1

Сертификаты

Автогенерация (по умолчанию)

generate_certificate: true

При первом запуске Job генерирует:

  • SSH ключ (ED25519) → key.pem, key.pem.pub
  • RSA ключ (Vault) → private_key.pem, public_key.pem

Ручная передача

--set generate_certificate=false \
--set gitflic.certs.key="$(cat key.pem)" \
--set gitflic.certs.ssh_key_pub="$(cat key.pub)" \
--set gitflic.certs.private_key="$(cat private_key.pem)" \
--set gitflic.certs.public_key="$(cat public_key.pem)"

Получение сгенерированных ключей

kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{.data.key\.pem}' | base64 -d > ./key.pem
kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{.data.key\.pem\.pub}' | base64 -d > ./key.pem.pub
kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{.data.private_key\.pem}' | base64 -d > ./private_key.pem
kubectl -n gitflic get secrets gitflic-cert -o jsonpath='{.data.public_key\.pem}' | base64 -d > ./public_key.pem

Приватный Container Registry для получения образов компонентов платформы

Вариант 1: Helm создаёт Secret

helm install gitflic oci://... \
    --set registry.createSecret=true \
    --set registry.server=registry.gitflic.ru \
    --set registry.username=USERNAME \
    --set registry.password=TOKEN

Вариант 2: Существующий Secret

# Создать Secret вручную
kubectl create secret docker-registry gitflic-registry \
    --docker-server=registry.gitflic.ru \
    --docker-username=USERNAME \
    --docker-password=TOKEN \
    -n gitflic

# Указать при установке
helm install gitflic oci://... \
    --set registry.createSecret=false \
    --set registry.secretName=gitflic-registry

Безопасность

Security Context (по умолчанию)

Параметр Значение Описание
runAsNonRoot false Запуск от непривилегированного
readOnlyRootFilesystem false ФС только для чтения
allowPrivilegeEscalation false Запрет повышения привилегий
capabilities.drop ALL Удалить все capabilities
fsGroup GID для volume (задаётся в pod)

Production рекомендации

# values-production.yaml
gitflic:
  containers:
    securityContext:
      runAsNonRoot: true
      runAsUser: 1000
      runAsGroup: 1000
      fsGroup: 1000
      readOnlyRootFilesystem: false
      allowPrivilegeEscalation: false
      capabilities:
        drop:
          - ALL
  logStorage:
    enabled: true  # Требуется при readOnlyRootFilesystem: true
    emptyDirSizeLimit: "1Gi"

Настройка через CLI

helm install gitflic oci://... \
    --set gitflic.containers.securityContext.runAsNonRoot=true \
    --set gitflic.containers.securityContext.runAsUser=1000 \
    --set gitflic.containers.securityContext.fsGroup=1000 \
    --set gitflic.logStorage.enabled=true

Ingress

helm install gitflic oci://... \
    --set ingress.create=true \
    --set ingress.ingressClassName=nginx \
    --set ingress.rules.host=gitflic.example.com

ingressClassName обязателен — без него Ingress не создаётся.

TLS с cert-manager:

--set ingress.tls.enabled=true \
--set ingress.tls.secretName=gitflic-tls

Кастомные CA сертификаты

Для доверенных CA в Java trustStore:

gitflic:
  caCertificates:
    enabled: true
    trustStorePassword: "changeit"
    certificates:
      - name: internal-ca
        content: |
          -----BEGIN CERTIFICATE-----
          ...
          -----END CERTIFICATE-----

Или использовать существующий ConfigMap:

gitflic:
  caCertificates:
    enabled: true
    existingConfigMap: my-ca-certs

При readOnlyRootFilesystem: true trustStore монтируется через emptyDir.


Удаление и миграция

Удаление с сохранением данных

helm uninstall gitflic --keep-manifests
# PVC сохраняются (resource-policy: keep)

Миграция при обновлении

При обновлении с изменением имён StatefulSet (multi-release) данные не мигрируют:

  1. Сделать backup PVC
  2. Установить новую версию
  3. Скопировать данные в новые PVC

Просмотр ресурсов

# Все ресурсы
helm template release ./gitflic-server-helm | kubectl apply --dry-run=client -o yaml

# Конкретный ресурс
helm template release . | grep -A50 "kind: Deployment"

Валидация

Локальная проверка

# Линтинг
helm lint ./gitflic-server-helm

# Рендеринг
helm template release ./gitflic-server-helm

# Полный рендеринг с values
helm template release ./gitflic-server-helm -f values.yaml

Dry-run в кластере

helm install --dry-run --debug ./gitflic-server-helm -f values.yaml -n gitflic

Troubleshooting

Pod не запускается

# Проверить events
kubectl -n gitflic get events --sort-by='.lastTimestamp'

# Проверить логи
kubectl -n gitflic logs deployment/gitflic-gitflic-server

# Описать pod
kubectl -n gitflic describe pod -l app.kubernetes.io/instance=gitflic-gitflic-server

Проблемы с probe

# readiness/liveness probe использует /bin/sh -c
# Проверить token
kubectl -n gitflic get secrets passwords -o jsonpath='{.data.actuator}' | base64 -d

PVC не создаётся

# Проверить StorageClass
kubectl get storageclass

# Проверить PVC
kubectl -n gitflic get pvc

Connection refused

# Проверить зависимости
kubectl -n gitflic get pods -o wide

# PostgreSQL готов?
kubectl -n gitflic exec -it gitflic-gitflic-server-postgres-0 -- pg_isready

Обновление чарта

# Обновить релиз
helm upgrade gitflic oci://...

# Откатить
helm rollback gitflic <revision>

# История
helm history gitflic
Описание
Релизы
2026-05-06
последний
Конвейеры
0 успешных
0 с ошибкой
Разработчики