Kubernetes
Helm-чарт запускає API, воркер і панель керування. PostgreSQL і Redis надаєте ви.
Що потрібно
Section titled “Що потрібно”- Kubernetes 1.24+ і Helm 3.8+
- PostgreSQL 16+ і Redis 7+, керовані або розгорнуті вами. Проєкт тестується з образами
postgres:16-alpineі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-secretredis: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 from: noreply@hooks.example.com smtp: host: smtp.example.com port: 587 username: railhook@example.com auth: true starttls: true existingSecret: railhook-smtp-secret # key: smtp-passwordЩоб отримати значення для продакшну (більше реплік, автомасштабування, PodDisruptionBudget, мережеві політики, увімкнена пошта), клонуйте репозиторій і додайте -f deploy/helm/railhook/values-production.yaml.
Як це працює
Section titled “Як це працює”| Тема | Поведінка |
|---|---|
| Міграції | Виконуються в поді API під час запуску. Репліки, що стартують разом, чекають на advisory lock PostgreSQL, тож кожна міграція застосовується один раз. Под воркера нового релізу чекає на них до 15 хвилин, перш ніж запуститися, і його startup probe розрахована на це очікування |
| Воркери | Кожен воркер забирає з PostgreSQL доставки, час яких настав, через FOR UPDATE SKIP LOCKED, тож додані репліки воркера ділять роботу без іншої координації. Захоплення, не завершене за WEBHOOK_CLAIM_TIMEOUT_SECONDS (типово 300), може забрати інший воркер |
| Резервні копії | 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