Kubernetes
Helm-чарт запускає API, воркер і панель керування. Базу даних, брокер і кеш він не містить, тож їх треба надати самостійно.
Що потрібно
Section titled “Що потрібно”- Kubernetes 1.24+ і Helm 3.8+
- PostgreSQL 16+, Kafka 3.7+ і Redis 7+, керовані або власні. Проєкт тестується з образами
postgres:16-alpine,apache/kafka:3.7.0іredis:7-alpine.
Встановлення
Section titled “Встановлення”-
Створіть простір імен і секрети
Terminal window kubectl create namespace railhookkubectl -n railhook create secret generic railhook-secrets \--from-literal=encryption-key="$(openssl rand -base64 32)" \--from-literal=encryption-salt="$(openssl rand -base64 24)" \--from-literal=jwt-secret="$(openssl rand -base64 64)"kubectl -n railhook create secret generic railhook-postgresql-secret \--from-literal=password="$DB_PASSWORD"kubectl -n railhook create secret generic railhook-redis-secret \--from-literal=password="$REDIS_PASSWORD"Усі три ключі в
railhook-secretsобов’язкові. Без них поди API й воркера перезапускаються по колу. -
Напишіть файл values
values-mycompany.yaml postgresql:external:host: postgres.example.comport: 5432database: railhookusername: webhook_userexistingSecret: railhook-postgresql-secretkafka:external:bootstrapServers: "kafka-1:9092,kafka-2:9092,kafka-3:9092"redis:external:host: redis.example.comport: 6379existingSecret: railhook-redis-secretui:ingress:hosts:- host: hooks.example.compaths:- path: /pathType: PrefixЯкщо лишити
app.baseUrlпорожнім, чарт виведе публічну адресу з першого хоста ingress. Задайте його, якщо Railhook відкривають за іншою назвою. -
Встановіть чарт
Чарт публікується в GHCR з кожним релізом. Його версія — номер релізу без
v:Terminal window helm install railhook oci://ghcr.io/vadymkykalo/charts/railhook \--version <version> -n railhook -f values-mycompany.yaml -
Перевірте
Terminal window kubectl -n railhook get podskubectl -n railhook logs -l app.kubernetes.io/component=api --tail=20
api.env.APP_ENV типово дорівнює production. Без пошти облікові записи створюються вже підтвердженими, а запросити нікого не можна. Щоб увімкнути пошту:
email: enabled: true smtp: host: smtp.example.com port: 587 auth: true starttls: true existingSecret: railhook-smtp-secret # key: smtp-passwordДля типових production-значень (більше реплік, автомасштабування, бюджети переривань, мережеві політики, увімкнена пошта) клонуйте репозиторій і додайте -f deploy/helm/railhook/values-production.yaml.
Як це працює
Section titled “Як це працює”| Тема | Поведінка |
|---|---|
| Міграції | Виконуються в поді API під час запуску. Репліки, що стартують разом, чекають на advisory lock PostgreSQL, тож кожна міграція застосовується один раз |
| Топіки Kafka | Створюються hook-завданням після встановлення й оновлення. Налаштовуються через kafka.topicPartitions і kafka.topicReplicationFactor |
| Резервні копії | backup.enabled: true додає CronJob, який записує файли pg_dump на PVC і видаляє старі |
| Метрики | На названому порту management (8082 для API, 8081 для воркера), ніколи не публікуються за межі кластера |
Оновлення
Section titled “Оновлення”helm upgrade railhook oci://ghcr.io/vadymkykalo/charts/railhook --version <version> -n railhook -f values-mycompany.yamlСпершу зробіть резервну копію бази даних. helm rollback повертає чарт і образи, але не схему.
Видалення
Section titled “Видалення”helm uninstall railhook -n railhook