GitFlic Server Helm Chart
Официальная документация: Русский / 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-replicaReadWriteMany(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) данные не мигрируют:
- Сделать backup PVC
- Установить новую версию
- Скопировать данные в новые 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