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

Оновлення й резервні копії

Усе на цій сторінці виконується з каталогу встановлення (типово ~/railhook) допоміжним скриптом railhook, який записав інсталятор.

Terminal window
cd ~/railhook
./railhook upgrade v2.16.6 # pin a release; with no version it keeps the tags already in .env

upgrade робить таке, по черзі:

  1. Завантажує допоміжний скрипт і Caddyfile для цільового релізу.
  2. Закріплює API_IMAGE_TAG, WORKER_IMAGE_TAG і UI_IMAGE_TAG у .env.
  3. Робить резервну копію бази даних і зупиняється, якщо не вдалося.
  4. Замінює docker-compose.yml копією з релізу, а ваш зберігає як docker-compose.yml.previous.
  5. Завантажує образи, перезапускає всі сервіси, крім API, а потім замінює контейнери API по одному.

З одним контейнером API клієнти бачать близько двадцяти секунд 502, поки запускається новий. Задайте API_REPLICAS=2 у .env, і оновлення пройде без перерви.

Відкат повертає образи, а не схему бази даних. Міграції виконуються лише вперед.

Terminal window
sed -i 's|^API_IMAGE_TAG=.*|API_IMAGE_TAG=2.16.5|' .env # and WORKER_IMAGE_TAG, UI_IMAGE_TAG
./railhook start

Якщо проблема в коді, досить відкотити образи. Якщо в міграції — відновіть резервну копію, яку зробило оновлення.

Перевірка встановлення

Section titled “Перевірка встановлення”
Terminal window
./railhook doctor

Команда повторно запускає перевірки машини й конфігурації з інсталятора на файлах із диска. Вона ловить помилку у вручну відредагованому .env раніше, ніж та перетвориться на збій.

Terminal window
./railhook backup

Команда записує backup-<timestamp>.dump (власний формат PostgreSQL) у каталог встановлення.

Встановлення, зроблені інсталятором, також роблять дамп за розкладом через сервіс db-backup:

Змінна Типово Значення
DB_BACKUP_INTERVAL_SECONDS 86400 Як часто робиться дамп
BACKUP_RETENTION_DAYS 30 Скільки зберігаються дампи
BACKUP_DIR ./backups Куди вони записуються
  1. Зупиніть API й воркер

    Terminal window
    cd ~/railhook
    set -a; . ./.env; set +a
    docker compose stop api worker
  2. Відновіть дамп

    Terminal window
    docker cp backup-20260913T020000Z.dump webhook-postgres:/tmp/restore.dump
    docker exec webhook-postgres pg_restore \
    -U "${POSTGRES_USER:-webhook_user}" -d "${POSTGRES_DB:-webhook_platform}" \
    --clean --if-exists --no-owner --no-privileges /tmp/restore.dump
    docker exec webhook-postgres rm -f /tmp/restore.dump
  3. Очистіть Redis

    Усе в Redis — похідні дані, які відбудовуються самі. Застарілий кеш гірший за порожній.

    Terminal window
    docker exec webhook-redis redis-cli -a "$REDIS_PASSWORD" FLUSHALL
  4. Запустіть стек

    Terminal window
    ./railhook start

Після відновлення не чіпайте Kafka. Повідомлення для відкочених доставок відхиляються й відкидаються, тож у журналі воркера з’явиться їхня серія. Доставки, які після відновлення лишилися в очікуванні, підхоплюються знову приблизно за годину. Події, прийняті після створення дампу, втрачено.