Self-hosted трекер на своём VPS: требования, установка и бэкапы
Какой сервер взять, что спросит установщик, как проверить результат и настроить резервные копии так, чтобы из них действительно можно было восстановиться.
Self-hosted трекер — это трекер, который стоит на вашем сервере: клики, конверсии, офферы и ставки лежат в ваших базах, а не у вендора. За это приходится платить вниманием: сервер нужно выбрать, трекер — установить, а данные — бэкапить. Хорошая новость в том, что всё это делается один раз и почти целиком автоматизировано.
Ниже — практическая инструкция для inotrack: какой VPS взять, что спросит установщик, как проверить, что всё поднялось, и как настроить резервные копии так, чтобы они пригодились, когда понадобятся. О том, стоит ли вообще выбирать свой сервер, — отдельная статья о self-hosted и облачных трекерах.
Какой сервер нужен
Требования к системе:
- Ubuntu или Debian, LTS-версия. На других дистрибутивах установщик остановится.
- Свободные порты 80 и 443 — веб-сервер трекера сам получает TLS-сертификаты Let's Encrypt.
- Root-доступ по SSH.
- Docker и docker compose. Если их нет, установщик поставит сам.
Требования к железу:
| Минимум | Рекомендовано | |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| Память | 4 ГБ | 8 ГБ |
| Диск | 15 ГБ | 160 ГБ NVMe |
Рекомендованная конфигурация рассчитана на 1–10 миллионов кликов в сутки. На минимальной установщик предупредит, но продолжит. Исключение — диск: если свободно меньше 15 ГБ, установка без явного подтверждения не пойдёт.
Диск важнее процессора
Основной потребитель места — база событий: сырые клики, конверсии и постбеки. Ориентир из документации — 100–300 байт на клик после сжатия. Клики по умолчанию хранятся 13 месяцев.
| Кликов в сутки | ГБ в месяц | За 13 месяцев |
|---|---|---|
| 1 000 000 | 3–9 | 40–115 |
| 5 000 000 | 15–45 | 195–580 |
| 10 000 000 | 30–90 | 390–1170 |
Два практических вывода. Первый: на миллионе кликов в сутки база событий за весь срок хранения укладывается в 160 ГБ, на десяти миллионах этого диска хватит на несколько месяцев; дальше нужен диск больше или срок хранения короче. Второй: диск должен быть NVMe. На сетевом или HDD-диске база событий на пиках не успевает за записью.
Сколько нужно памяти
База событий, реляционная база, Redis и ядро трекера делят один сервер. Redis хранит ключи уникальности кликов, капы и ключи дедупликации постбеков — последние живут 30 дней и растут вместе с числом конверсий, а не кликов. Установщик сам выделяет Redis четверть памяти сервера, но не меньше гигабайта. При исчерпании лимита Redis не вытесняет ключи молча, а отказывает в записи: капы и дедупликацию нельзя терять тихо.
Домены и DNS
Трекеру нужны как минимум два домена: один под панель, один или несколько под приём кликов.
- A-запись должна указывать на сервер до установки. Установщик это проверяет.
- Только DNS, без проксирования. Домены приёма кликов должны вести прямо на IP сервера. Проксирующий CDN перед трекером мешает выпуску сертификата. Если прокси всё же нужен, проверку DNS можно пропустить флагом, но выпуск сертификата придётся настраивать отдельно.
- Своих доменов нет — не проблема. Установщик может выдать два бесплатных домена: под панель и под клики. A-запись на ваш сервер ставится автоматически. Нужен публичный IPv4 у самого сервера.
Позже домены добавляются из панели, без перезапуска. Как устроены пул доменов, проверки и автоматическое переключение на резервный, описано на странице трекер-доменов.

Лицензия или пробный период
Для установки нужен лицензионный ключ. Его можно купить на странице тарифов — оплата в USDT, ключ показывается на странице заказа и приходит письмом.
Ключа нет — установщик оформит пробный период на 7 дней: на вопросе о ключе нажмите Enter и укажите e-mail, ключ придёт письмом. Пробный период один на адрес и один на сервер.
Установка
Одна команда:
curl -fsSL https://get.inotrack.run/install.sh -o install.sh && bash install.sh
Скрипт сначала скачивается в файл и только потом запускается — намеренно. Конструкция «скачать и сразу передать в интерпретатор» при сбое сети молча запускает пустой ввод, и вы не видите ошибки.
Установщик задаст вопросы:
- лицензионный ключ — или Enter для пробного периода;
- использовать ли бесплатные домены;
- домен панели и трекер-домены через запятую;
- e-mail для Let's Encrypt;
- роль инстанса — оставьте вариант по умолчанию, «всё на одном сервере»;
- часовой пояс отчётов — по умолчанию московский;
- базовая валюта — по умолчанию доллар;
- e-mail первого администратора.
Дальше он работает сам: проверяет систему, ресурсы и порты, ставит Docker, генерирует секреты, активирует лицензию, поднимает контейнеры, применяет миграции баз и создаёт первого администратора.
В конце выводится одноразовая сводка с логином и паролем администратора. Сохраните её сразу — второй раз пароль не покажут.
Для массовых развёртываний есть режим без вопросов: все ответы передаются флагами или файлом.
Проверка после установки
Трекером на сервере управляет утилита tracker-ctl. Две команды, которые нужно знать с первого дня:
tracker-ctl status
tracker-ctl doctor
Первая показывает состояние контейнеров. Вторая — диагностика одной командой: DNS и сертификаты каждого домена, связь с сервером лицензий, доступность баз, отставание буфера кликов, очередь постбеков, свободное место и свежесть последнего бэкапа. При любой проблеме начинайте с неё: она печатает конкретный список «что не так», а не общий лог.
Затем откройте домен панели и войдите под администратором из сводки. Панель сразу предложит подключить второй фактор — не откладывайте. На пустом дашборде вместо графика будет чек-лист запуска: источник, оффер, поток, домен, первые клики, постбек, первые конверсии.

Быстрее всего пройти его мастером «Запустить кампанию» — он описан в быстром старте.
Типичные проблемы
- A-запись не готова. Установщик остановится на предпроверке. Дождитесь обновления DNS.
- Порты 80 или 443 заняты. На сервере уже работает другой веб-сервер. Освободите порты — иначе сертификат не выпустится.
- Ключ не проходит активацию. Проверьте срок ключа и то, что сервер может ходить наружу по HTTPS.
- Контейнеры в состоянии unhealthy после первого старта. На медленном диске базы стартуют дольше. Подождите и запустите проверку ещё раз.
Бэкапы
Это раздел, ради которого статью стоит дочитать. Свой сервер означает, что за сохранность данных отвечаете вы.
Что попадает в бэкап
Команда tracker-ctl backup собирает один архив:
- полный дамп реляционной базы — офферы, потоки, пользователи, настройки;
- дамп базы событий — клики, конверсии, расходы;
- копию файла настроек;
- загруженные ленды и файлы;
- каталог лицензии.
Установщик сразу ставит ежедневное расписание на 03:00. Локальные архивы старше 14 дней удаляются сами.
Самые большие таблицы событий бэкапятся инкрементально: раз в неделю — полностью, в остальные дни — только то, что добавилось. Выбирать режим не нужно, команда решает сама. При восстановлении из инкремента вся цепочка находится и применяется автоматически.
Бэкап на том же сервере — не бэкап
Локальный архив лежит на том же диске, что и данные. Умер диск — пропало всё. Поэтому главный шаг — офсайт-копия в объектное хранилище другого провайдера:
tracker-ctl backup keygen
tracker-ctl backup schedule daily --to s3://бакет/префикс
Первая команда создаёт ключ шифрования, вторая ставит ежедневный таймер с выгрузкой. Подходит любое S3-совместимое хранилище; адрес и ключи доступа прописываются в файле настроек сервера, а не в командной строке.
Что происходит при выгрузке:
- Шифрование. Архив шифруется до записи на диск. Без ключа шифрования выгрузка наружу не пойдёт: в архиве весь ваш бизнес.
- Проверка. После выгрузки сверяются размер и контрольная сумма. Не прошедший проверку объект удаляется, команда завершается ошибкой.
- Ротация. В бакете остаются 14 последних архивов. Полный бэкап, от которого зависят оставшиеся инкременты, не удаляется.
Ключ шифрования
Сохраните ключ отдельно от сервера и от бэкапов — в менеджере паролей. Он хранится в настройках сервера, то есть ровно там, что может умереть. В сам архив ключ не попадает. Потерянный ключ — это потерянный бэкап: расшифровать архив без него невозможно.
Восстановление
tracker-ctl restore --from s3://бакет/префикс
Команда возьмёт самый свежий архив, проверит контрольную сумму и попросит подтверждение: восстановление перезаписывает текущие данные. Файл настроек из архива автоматически не применяется — он кладётся рядом для ручной сверки.
Важная деталь про лицензию: бэкап несёт отпечаток инстанса, и восстановление на новом сервере его возвращает. Для сервера лицензий это та же установка, а не новая. Если вам нужна вторая копия рядом с работающей — например, тестовая, — добавьте флаг --new-instance, иначе копия будет выдавать себя за оригинал.
Проверяйте восстановление. Бэкап, который ни разу не разворачивали, — это предположение. Раз в квартал разверните свежий архив на тестовом сервере с --new-instance.
Обновления
tracker-ctl update
Команда показывает версии, спрашивает подтверждение, скачивает образы, применяет миграции и ждёт, пока ядро поднимется. Сбой на любом шаге — автоматический откат на прежнюю версию.
Автообновление настраивается на три режима: выключено, только уведомление о новой версии (по умолчанию) и установка с предварительным бэкапом. В последнем режиме трекер раз в сутки в заданное окно сам делает бэкап, обновляется и при сбое откатывается.
Итог
Чек-лист первого дня:
- сервер с NVMe и запасом по диску под ваш объём кликов;
- домены с A-записью напрямую на сервер;
- установка одной командой, сводка с паролем сохранена;
tracker-ctl doctorбез замечаний, второй фактор у администратора включён;- ключ шифрования бэкапов сохранён вне сервера, офсайт-копия по расписанию настроена;
- пробное восстановление на тестовом сервере сделано.
Подробности — в документации: установка, обслуживание инстанса и ответы на частые вопросы. Что входит в эксплуатацию трекера, собрано на странице обслуживания, а зачем всё это — на странице о self-hosted.