Перейти до вмісту
На сайт

Kubernetes

Helm-чарт запускає API, воркер і панель керування. PostgreSQL і Redis надаєте ви.

  • Kubernetes 1.24+ і Helm 3.8+
  • PostgreSQL 16+ і Redis 7+, керовані або розгорнуті вами. Проєкт тестується з образами postgres:16-alpine і redis:7-alpine.
  1. Створіть простір імен і секрети

    Terminal window
    kubectl create namespace railhook
    kubectl -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 й воркера падають і перезапускаються по колу.

  2. Створіть файл values

    values-mycompany.yaml
    postgresql:
    external:
    host: postgres.example.com
    port: 5432
    database: railhook
    username: webhook_user
    existingSecret: railhook-postgresql-secret
    redis:
    external:
    host: redis.example.com
    port: 6379
    existingSecret: railhook-redis-secret
    ui:
    ingress:
    hosts:
    - host: hooks.example.com
    paths:
    - path: /
    pathType: Prefix

    Якщо лишити app.baseUrl порожнім, чарт візьме публічну адресу з першого хоста ingress. Задайте його, якщо користувачі відкривають Railhook за іншим іменем.

  3. Встановіть чарт

    Чарт є в GHCR для кожного релізу; його версія дорівнює номеру релізу без v:

    Terminal window
    helm install railhook oci://ghcr.io/vadymkykalo/charts/railhook \
    --version <version> -n railhook -f values-mycompany.yaml
  4. Перевірте, що все працює

    Terminal window
    kubectl -n railhook get pods
    kubectl -n railhook logs -l app.kubernetes.io/component=api --tail=20

api.env.APP_ENV типово дорівнює production. Без пошти облікові записи створюються вже підтвердженими, а запросити нікого не можна. Щоб її увімкнути:

values-mycompany.yaml
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.

Тема Поведінка
Міграції Виконуються в поді 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 для воркера); за межі кластера ніколи не публікуються
Terminal window
helm upgrade railhook oci://ghcr.io/vadymkykalo/charts/railhook --version <version> -n railhook -f values-mycompany.yaml

Спершу зробіть резервну копію бази даних. helm rollback повертає чарт і образи, але не схему.

Terminal window
helm uninstall railhook -n railhook