MAATRIX / Блог / Как установить и настроить Plausible Analytics на VPS

Как установить и настроить Plausible Analytics на VPS

MAATRIX

Google Analytics тянет за собой cookie-баннер, RTB-трекеры и жалобы юристов на GDPR, а взамен даёт дашборд, в котором приходится копаться десять минут, чтобы найти простую цифру — сколько людей вчера зашло на сайт. Plausible Analytics решает это иначе: один скрипт весом около 1 КБ, без cookie, без персональных данных и с дашбордом на один экран. Разворачивается он на собственном VPS за полчаса, если знать, куда смотреть — этим и займёмся.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Plausible и почему self-hosted, а не облако

Plausible — open-source аналитика, написанная на Elixir (Phoenix) с хранилищем событий в ClickHouse и метаданными аккаунтов в PostgreSQL. У проекта есть облачная версия (plausible.io) и Community Edition — тот же код, который вы разворачиваете на своём сервере через Docker Compose.

Почему self-hosted имеет смысл:

  • Данные остаются у вас. Ни один сторонний сервис не видит трафик вашего сайта — это критично, если вы работаете с юрлицами или в нишах, где важна конфиденциальность.
  • Без лимитов по pageviews. Облачный тариф считает просмотры и режет по мере роста; на своём сервере граница — это ресурсы VPS, а не биллинг.
  • Не нужен cookie-баннер. Plausible не ставит cookie и не использует fingerprinting, поэтому формально подпадает под легитимный интерес по GDPR — юридически это упрощает жизнь, но за финальную трактовку для вашего юрисдикции всё равно отвечаете вы, а не я.
  • Дешевле в масштабе. При заметном трафике аренда VPS с ClickHouse обходится дешевле подписки на облачный тариф.

Минус один: обслуживание сервера — обновления, бэкапы, ClickHouse — теперь ваша забота. Если сравниваете с альтернативой на той же идеологии, у нас есть отдельный разбор Matomo на VPS — Matomo тяжелее по ресурсам, зато ближе к полноценному GA по набору отчётов.

Требования к серверу

ClickHouse — единственный по-настоящему требовательный компонент в этой связке. Он агрессивно использует память под кэши и merge-операции, даже если событий немного.

РесурсМинимум (тест / личный блог)Комфортно (продакшн, до ~1 млн pageviews/мес)
CPU1 vCPU2 vCPU
RAM2 ГБ4 ГБ
Диск20 ГБ SSD/NVMe40+ ГБ NVMe
ОСUbuntu 24.04 / Debian 12Ubuntu 24.04 / Debian 12

На 1 ГБ ОЗУ ClickHouse периодически падает по OOM под нагрузкой — экономить на памяти здесь не стоит. Если планируете несколько сайтов с ощутимым трафиком, берите конфигурацию от 4 ГБ сразу — миграция ClickHouse на другой сервер задним числом не самое приятное занятие.

Подготовка сервера — стандартная: обновить систему, поставить Docker и Docker Compose. Если делаете это впервые, у нас есть пошаговая установка Docker с нуля на Ubuntu/Debian — подход тот же на любом современном дистрибутиве.

apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
apt install -y docker-compose-plugin git
docker --version && docker compose version

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Plausible через Docker Compose

Официальный способ разворачивания — репозиторий plausible/hosting, в котором уже собран docker-compose.yml с тремя сервисами: сам Plausible, PostgreSQL (аккаунты, настройки сайтов) и ClickHouse (сырые события).

git clone https://github.com/plausible/hosting plausible-hosting
cd plausible-hosting
cp plausible-conf.env.example plausible-conf.env

Ключевые переменные в plausible-conf.env:

BASE_URL=https://analytics.example.com
SECRET_KEY_BASE=сгенерировать_ниже
TOTP_VAULT_KEY=сгенерировать_ниже

# SMTP для писем-приглашений и уведомлений
MAILER_ADAPTER=Bamboo.SMTPAdapter
SMTP_HOST_ADDR=smtp.yourmail.example
SMTP_HOST_PORT=587
SMTP_USER_NAME=user@example.com
SMTP_USER_PWD=пароль_приложения
MAILER_EMAIL=noreply@example.com

SECRET_KEY_BASE и TOTP_VAULT_KEY — не оставляйте примерные значения, они шифруют сессии и 2FA-секреты:

openssl rand -base64 48   # для SECRET_KEY_BASE
openssl rand -base64 32   # для TOTP_VAULT_KEY

Дальше — стандартный запуск через Compose:

docker compose up -d
docker compose ps

Первый старт занимает пару минут — ClickHouse и Postgres должны инициализироваться и пройти миграции. Проверить, что всё поднялось:

docker compose logs plausible --tail=50

По умолчанию Plausible слушает на порту 8000 внутри контейнера, наружу проброшен 8000:8000 — это видно в docker-compose.yml, если нужно поменять порт из-за конфликта с другим сервисом на сервере.

Домен, reverse-proxy и SSL

Plausible сам HTTPS не выдаёт — на это нужен reverse-proxy перед контейнером. Два рабочих варианта: nginx с certbot или Caddy с автоматическим SSL из коробки.

Вариант с nginx (если у вас уже есть nginx на сервере под другие сайты):

server {
    listen 80;
    server_name analytics.example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
certbot --nginx -d analytics.example.com

Если разворачиваете с нуля и нужен подробный разбор именно связки nginx + reverse-proxy на сервере, у нас есть отдельная пошаговая установка nginx как reverse-proxy на Ubuntu 24.04 — там разобраны нюансы с заголовками и таймаутами, которые иначе ловятся через поиск ошибок методом проб.

Вариант с Caddy — короче, SSL получает и обновляет сам:

analytics.example.com {
    reverse_proxy 127.0.0.1:8000
}

Перед выпуском сертификата убедитесь, что A-запись поддомена analytics.example.com уже указывает на IP вашего VPS — иначе certbot и Caddy не пройдут проверку домена.

Первый запуск и добавление сайта

Откройте https://analytics.example.com — Plausible предложит зарегистрировать первый (администраторский) аккаунт. Это локальная регистрация внутри вашей инсталляции, никакой связи с plausible.io нет.

После входа: Add a website → указываете домен → получаете сниппет для вставки в <head>:

<script defer data-domain="yourwebsite.com"
  src="https://analytics.example.com/js/script.js"></script>

Для более точной аналитики полезны расширенные варианты скрипта:

<!-- + отслеживание outbound-ссылок и файлов -->
<script defer data-domain="yourwebsite.com"
  src="https://analytics.example.com/js/script.outbound-links.file-downloads.js"></script>
<!-- + ручные события (например, отправка формы) -->
<script defer data-domain="yourwebsite.com"
  src="https://analytics.example.com/js/script.js"></script>
<script>
window.plausible = window.plausible || function() {
  (window.plausible.q = window.plausible.q || []).push(arguments)
}
</script>
// вызов кастомного события из JS
plausible('Signup', {props: {plan: 'Premium'}})

Данные в дашборде появляются практически сразу после первого визита — задержка минимальная, но точную цифру в секундах я не мерил и приводить не буду, зависит от нагрузки на ClickHouse в моменте.

Бэкапы, SMTP и базовая безопасность

Все данные — в двух Docker-томах: PostgreSQL (пользователи, сайты, настройки) и ClickHouse (сырые события). Потерять ClickHouse не так критично — это статистика, а не деньги, — но обидно, если это годовая история трафика.

Бэкап PostgreSQL:

docker compose exec plausible_db pg_dumpall -U postgres > plausible_pg_$(date +%F).sql

Бэкап ClickHouse проще всего через снапшот тома, а не встроенный дамп:

docker compose stop plausible_events_db
tar czf clickhouse_$(date +%F).tar.gz /var/lib/docker/volumes/plausible-hosting_event-data/_data
docker compose start plausible_events_db

Останавливать сервис на пару секунд ради консистентного архива — приемлемая цена, если бэкапите раз в сутки ночью. Если хотите вынести бэкапы в отдельный regular-процесс с ротацией и удалённым хранилищем — посмотрите наш разбор автоматизации бэкапов на VPS через BorgBackup — принцип переносится на тома Plausible без изменений в логике.

Без рабочего SMTP не будут приходить письма-приглашения соавторам и weekly-отчёты — проверьте это сразу после установки:

docker compose exec plausible bin/plausible eval "Plausible.Mailer.deliver_now(Plausible.Test.Email.test_email())"

Из базовой защиты сервера — закрыть прямой доступ к портам Postgres/ClickHouse извне (в docker-compose.yml они обычно не пробрасываются наружу по умолчанию, но проверить стоит), включить fail2ban для SSH и nginx, чтобы не ловить брутфорс на панели логина. Если ещё не настраивали — вот установка fail2ban на VPS с нуля.

Обновление и обслуживание

Plausible Community Edition обновляется командой из репозитория plausible/hosting:

cd plausible-hosting
docker compose pull
docker compose up -d

Compose сам подтянет свежие образы и прогонит миграции БД при рестарте контейнера plausible. Перед крупным обновлением (смена мажорной версии) — сделайте бэкап Postgres и ClickHouse из предыдущего раздела, миграции необратимы без него.

Раз в несколько месяцев стоит проверять размер тома ClickHouse — docker system df -v покажет, сколько места занимают события. При большом трафике и долгом хранении сырых данных диск может расти быстрее, чем ожидалось; у Plausible есть настройки удержания данных (data retention) на уровне сайта в UI, если сырые события за старые периоды вам не нужны, а важны только агрегаты.

Ещё один нюанс — geolocation-база для карты стран/городов обновляется отдельно и не входит автоматически в pull образов; если она устарела на несколько месяцев, точность гео в отчётах постепенно снижается, но на общую работоспособность это не влияет.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Plausible работает без интернета для посетителей сайта, если сервер в России?

Нет, важна не страна сервера, а доступность именно вашего домена analytics.example.com из браузера посетителя — при обычном VPS с нормальной сетью проблем нет.

Можно ли поставить Plausible и сайт на один и тот же VPS?

Да, это обычная практика для небольших и средних проектов — ClickHouse и Postgres потребляют ресурсы отдельно от веб-сервера, важно только не забыть про суммарную память при выборе тарифа.

Что будет, если контейнер ClickHouse упадёт по нехватке памяти?

Новые события за это время не запишутся, но после рестарта (docker compose up -d) сервис поднимается штатно — данные за период простоя теряются, поэтому память лучше брать с запасом, а не впритык.

Нужен ли отдельный домен под аналитику или можно поддиректорию?

Практичнее отдельный поддомен (analytics.example.com) — так проще настраивать SSL и reverse-proxy, и скрипт на сайте ссылается на чёткий адрес без конфликтов путей.

Чем self-hosted Plausible отличается от Umami?

Оба легковесные и без cookie, но у Plausible более зрелая экосистема плагинов и интеграций (Search Console, Slack), а Umami проще по требованиям к серверу — если ClickHouse кажется избыточным для вашего трафика, стоит присмотреться и к Umami отдельно.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →