Перейти к содержанию

Обновление и удаление

Все операции выполняются тем же скриптом, которым ставили трекер.

Если трекер стоит не в /opt/minik, добавляйте --dir /путь к любой команде — иначе скрипт скажет, что установки нет.

Обновление

curl -fsSL https://get.minik.sh/install.sh | bash -s update

Что делает update:

  • тянет новый образ трекера и перезапускает его;
  • заново применяет инфраструктуру из шаблона: compose-файл, конфиг ClickHouse, swap, конфиг Caddy;
  • домен и e-mail ACME берёт из .env — флаги передавать не нужно;
  • дожидается, пока контейнер трекера не станет healthy, и только после этого удаляет старые образы трекера (без чистки каждое обновление оставляет сотни мегабайт мусора);
  • если трекер не поднялся — старые образы не удаляются, чтобы можно было откатиться, а скрипт напечатает, где смотреть логи.

Образы баз данных не обновляются: обновляется только их конфигурация, и контейнер пересоздаётся, лишь если она действительно изменилась.

Миграции схемы PostgreSQL и ClickHouse применяются автоматически при старте.

Конфиг Caddy перед применением проверяется: если новый Caddyfile не прошёл валидацию, edge остаётся на прежней конфигурации и трафик не рвётся.

Ручные правки docker-compose.yml не переживут update

Файл перезаписывается из шаблона (предыдущая версия остаётся рядом как docker-compose.yml.bak). Большинство параметров задаётся в .env, но переменную, которой нет в списке compose, приходится дописывать в environment: сервиса server заново после каждого update — см. Переменные окружения.

Конкретная версия

curl -fsSL https://get.minik.sh/install.sh | bash -s update --version 1.4.0

Версия запоминается в .env — следующий update без флага останется на ней. Чтобы вернуться на плавающий тег, укажите --version latest.

Откат на предыдущую версию

Тем же флагом, с прошлым тегом:

curl -fsSL https://get.minik.sh/install.sh | bash -s update --version 1.3.0

Откат откатывает код, а не схему

Миграции вперёд применяются автоматически, обратных миграций нет. Откат безопасен, пока новая версия не меняла схему; если меняла — восстанавливайте базу из дампа, снятого перед обновлением. Учтите и то, что после успешного обновления старый образ с сервера удаляется, поэтому откат заново тянет тег из реестра.

Включить или выключить PHP

curl -fsSL https://get.minik.sh/install.sh | bash -s update --with-php
curl -fsSL https://get.minik.sh/install.sh | bash -s update --no-php

Без явного флага update не трогает PHP-рантайм: он остаётся в том состоянии, в котором был.

Сменить лицензионный ключ

curl -fsSL https://get.minik.sh/install.sh | bash -s update --license-key XXXX-XXXX-XXXX-XXXX

Ключ пишется в .env, и перезапущенный трекер активирует его сам. Обычный update без флага уже активированный ключ не стирает. Тот же ключ можно ввести из панели: Настройки → Лицензия.

Логи

curl -fsSL https://get.minik.sh/install.sh | bash -s logs

Или напрямую:

docker compose -f /opt/minik/docker-compose.yml logs -f server

Остановка

curl -fsSL https://get.minik.sh/install.sh | bash -s down

Контейнеры останавливаются, данные остаются на месте.

Удаление

curl -fsSL https://get.minik.sh/install.sh | bash -s uninstall

Контейнеры удаляются, данные остаются в /opt/minik/data. Удалить их — осознанное отдельное действие:

sudo rm -rf /opt/minik

Бэкап

Своей команды бэкапа у установщика нет — резервируйте штатными средствами. Минимум, без которого трекер придётся настраивать заново: PostgreSQL, .env и каталог лендингов.

cd /opt/minik

# конфигурация: кампании, потоки, лендинги, офферы, пользователи, лицензия
docker compose exec -T postgres pg_dump -U minik minik | gzip > backup-pg-$(date +%F).sql.gz

# секреты и параметры установки
cp .env backup-env-$(date +%F)

# файлы лендингов
tar czf backup-landings-$(date +%F).tgz -C /opt/minik data/landings
curl -fsSL https://get.minik.sh/install.sh | bash -s down
sudo tar czf minik-backup.tgz -C /opt/minik .env data

cd /opt/minik
docker compose --profile php up -d   # без --profile php, если PHP выключен

Простой на время архивации, зато забирает всё разом: обе базы, лендинги, сертификаты Caddy.

.env содержит JWT_SECRET и TRACKER_SECRET_KEY: без них восстановленная установка не примет старые токены и подписи. Храните его как секрет.

PostgreSQL держит всю конфигурацию. ClickHouse хранит клики и конверсии: это тяжёлые данные, их резервируют штатными средствами ClickHouse (BACKUP, снапшот диска) в зависимости от того, насколько критична история статистики.

Проверяйте восстановление

Бэкап, который никогда не разворачивали, — это не бэкап. Разверните дамп на тестовом сервере хотя бы раз.

Восстановление

Из холодной копии всё проще: поставьте трекер той же версии, остановите его (down), распакуйте архив поверх /opt/minik и поднимите обратно.

Из дампа PostgreSQL порядок такой:

  1. Поставьте трекер той же версии: install --version <тег> --license-key XXXX-XXXX-XXXX-XXXX.
  2. Остановите стек и верните сохранённый .env — в нём домен и секреты.
  3. Очистите каталог PostgreSQL: дамп должен лечь в пустую базу.
cd /opt/minik
docker compose down
sudo rm -rf data/pg
  1. Поднимите только PostgreSQL и залейте дамп:
docker compose up -d postgres
# база только что создана с нуля — дождитесь готовности, иначе psql
# упрётся в «the database system is starting up»
until docker compose exec -T postgres pg_isready -U minik; do sleep 1; done
gunzip -c backup-pg-2026-08-01.sql.gz | docker compose exec -T postgres psql -U minik minik
  1. Поднимите остальной стек — недостающие миграции применятся сами:
docker compose --profile php up -d   # без --profile php, если PHP выключен
  1. Распакуйте лендинги обратно в data/landings.
  2. Проверьте Настройки → Лицензия. Состояние лицензии лежит в PostgreSQL и восстанавливается вместе с дампом; если статус не сошёлся — нажмите Проверить сейчас.

ClickHouse восстанавливается отдельно, своими средствами. Без него трекер поднимется и будет принимать трафик, но история кликов и конверсий окажется пустой.

Порядок обновления в бою

  1. Снимите дамп PostgreSQL.
  2. Запустите update.
  3. Проверьте: docker compose ps — все контейнеры Up; откройте панель; дёрните тестовый клик curl'ом.
  4. Загляните в раздел Система: базы отвечают, в системном логе нет новых ошибок (источник queue). Глубину очередей раздел не показывает — она видна только в метриках на /metrics.

Если что-то не так — Диагностика.