MAATRIX / Блог / Plausible Analytics на Ubuntu 24.04: пошаговая установка

Plausible Analytics на Ubuntu 24.04: пошаговая установка

MAATRIX

Google Analytics требует cookie-баннер, тормозит загрузку страницы своим скриптом и отдаёт все данные о посетителях третьей стороне. Если вам нужна просто честная статистика — сколько людей зашло, откуда, что смотрели — без этого балласта, Plausible Analytics закрывает вопрос за 20–30 минут установки. Ниже — рабочий пошаговый разворот на чистом VPS с Ubuntu 24.04 через Docker Compose, с доменом, SSL и первым сайтом в дашборде.

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

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

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

Что такое Plausible и зачем его хостить самому

Plausible — open-source веб-аналитика, которая не использует cookies, не требует согласия на обработку персональных данных (в большинстве юрисдикций) и весит меньше 1 КБ скриптом на странице. Есть облачная версия plausible.io по подписке, но self-hosted вариант (Community Edition) бесплатен и даёт полный контроль над данными — это особенно важно, если сайт ориентирован на аудиторию, чувствительную к трекингу, или если вы просто не хотите платить за каждый лишний домен в облаке.

Под капотом self-hosted Plausible — это связка из трёх контейнеров: сам Elixir-бэкенд с дашбордом, ClickHouse для хранения событий (он отлично держит миллионы хитов на скромном железе) и PostgreSQL для пользователей, сайтов и настроек. Всё разворачивается официальным docker-compose.yml из репозитория plausible/community-edition (раньше он назывался plausible/hosting) — писать конфиги с нуля не нужно.

Для комфортной работы хватает 2 ГБ RAM и 1 vCPU на десяток сайтов с умеренным трафиком; если планируете отслеживать высоконагруженный проект с сотнями тысяч событий в сутки, закладывайте от 4 ГБ RAM — ClickHouse любит память под кэш индексов.

Подготовка сервера: Ubuntu 24.04, домен, Docker

Перед установкой понадобится:

  • VPS с Ubuntu 24.04 LTS, минимум 2 ГБ RAM, доступ по SSH с sudo-правами;
  • зарегистрированный домен или поддомен (например, stats.example.com), A-запись которого указывает на IP сервера;
  • открытые порты 80 и 443.

Обновите систему и поставьте базовые утилиты:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ca-certificates gnupg

Проверьте, что DNS уже разрешается на сервер — без этого Let's Encrypt не выдаст сертификат:

dig +short stats.example.com

Если в ответе не ваш IP — подождите, пока пропагация DNS завершится, прежде чем идти дальше.

Если Docker ещё не установлен, поставьте его через официальный репозиторий (не через snap — со snap-версией docker периодически ловят проблемы с сетями контейнеров):

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER

После usermod перелогиньтесь (exit и заново по SSH), чтобы группа docker подхватилась без sudo перед каждой командой. Подробный разбор установки Docker с нуля есть в отдельной статье про установку Docker на Ubuntu 24.04.

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

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

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

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

Клонируйте официальный репозиторий с готовым compose-файлом:

git clone https://github.com/plausible/community-edition.git plausible-ce
cd plausible-ce

Скопируйте пример конфигурации в рабочий .env:

cp .env.example .env

Откройте .env и заполните ключевые переменные:

nano .env
BASE_URL=https://stats.example.com
SECRET_KEY_BASE=<сгенерировать ниже>
TOTP_VAULT_KEY=<сгенерировать ниже>
DISABLE_REGISTRATION=true

SECRET_KEY_BASE и TOTP_VAULT_KEY — обязательные секреты, генерируются локально и никуда не отправляются:

openssl rand -base64 64 | tr -d '\n' ; echo
openssl rand -base64 32 | tr -d '\n' ; echo

Вставьте полученные строки в соответствующие переменные. DISABLE_REGISTRATION=true стоит выставить сразу после того, как создадите первого администратора — иначе self-hosted инстанс с открытым портом теоретически может зарегистрировать кто угодно, кто найдёт ваш домен.

Поднимите контейнеры:

docker compose up -d

Первый запуск качает образы Plausible, ClickHouse и PostgreSQL, затем накатывает миграции базы — это занимает пару минут. Проверить, что всё стартовало нормально:

docker compose ps
docker compose logs -f plausible

Дождитесь строки о том, что сервер слушает порт (по умолчанию Plausible публикует HTTP на 127.0.0.1:8000 — наружу он не торчит намеренно, снаружи должен стоять reverse-proxy с TLS).

Reverse-proxy и SSL: Caddy перед Plausible

Проще всего закрыть Plausible сертификатом через Caddy — он сам получает и обновляет Let's Encrypt, без отдельного certbot и cron-задач. Если Caddy ещё не стоит:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy

Пропишите проксирование в /etc/caddy/Caddyfile:

stats.example.com {
    reverse_proxy 127.0.0.1:8000
}

Перезапустите Caddy:

sudo systemctl restart caddy
sudo systemctl status caddy --no-pager

Caddy сам обратится в Let's Encrypt, получит сертификат для stats.example.com и с этого момента будет держать HTTPS на 443, продлевая сертификат автоматически — руками ничего перевыпускать не нужно. Если предпочитаете nginx и уже умеете с ним работать — вариант тоже рабочий, но потребует отдельно настроить certbot; готовый разбор есть в статье про nginx как reverse-proxy на Ubuntu 24.04 и в статье про Let's Encrypt SSL на VPS.

Не забудьте открыть 80/443 в файрволе, если используете ufw:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

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

Откройте https://stats.example.com/register — эта страница доступна только пока DISABLE_REGISTRATION не выставлен в true. Создайте аккаунт администратора: email, пароль. Как только аккаунт создан — вернитесь в .env, выставьте DISABLE_REGISTRATION=true и перезапустите:

docker compose up -d

Дальше в дашборде: + Add website → укажите домен отслеживаемого сайта. Plausible выдаст сниппет вида:

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

Вставьте его в <head> каждой страницы сайта, который хотите отслеживать (обычно это делается один раз в общем шаблоне/лэйауте — WordPress, статический сайт, SPA). Никакого cookie-баннера добавлять не требуется — Plausible не ставит идентифицирующие cookies и не хранит персональные данные посетителей, поэтому под GDPR/152-ФЗ формально не подпадает как трекер, требующий согласия (для полной юридической уверенности всё же свяжитесь с вашим юристом — это не юридическая консультация).

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

Обслуживание: обновления, бэкапы, ресурсы

Обновление Plausible до новой версии — это подтянуть свежий compose-файл и пересоздать контейнеры:

cd plausible-ce
git pull
docker compose pull
docker compose up -d

Миграции базы применяются автоматически при старте — вручную ничего катать не нужно, но перед крупным обновлением всё же сделайте бэкап (ниже).

Данные хранятся в volume-ах ClickHouse и PostgreSQL — именно их и нужно бэкапить, а не файлы контейнеров:

docker compose exec plausible_db pg_dump -U postgres plausible_db > plausible_db_backup.sql
docker compose exec plausible_events_db clickhouse-client --query "SELECT 1"  # проверка живости

Для ClickHouse полноценный бэкап удобнее делать через clickhouse-backup или снимок самого docker volume:

docker run --rm -v plausible-ce_event-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/clickhouse-events-$(date +%F).tar.gz -C /data .

Схему бэкапа стоит регулярно проверять восстановлением на тестовом сервере — бэкап, который ни разу не разворачивали, доверия не заслуживает. Общий разбор автоматических бэкапов на Ubuntu — в статье про автоматические бэкапы с нуля.

Следите за потреблением памяти ClickHouse — на маленьких VPS (1–2 ГБ RAM) под нагрузкой он может упереться в лимит и начать падать. Смотреть текущее потребление:

docker stats --no-stream

Если видите, что plausible_events_db регулярно съедает всю доступную память — это сигнал взять план с большим объёмом RAM, а не пытаться бесконечно тюнить настройки ClickHouse под 1 ГБ.

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

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

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

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

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

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

Сколько сайтов можно подключить к одному инстансу Plausible?

Ограничений в self-hosted версии нет — лимиты по числу сайтов есть только в облачных тарифах plausible.io. На своём сервере добавляйте сколько нужно, упрётесь только в ресурсы сервера при росте трафика.

Нужен ли отдельный сервер под Plausible, или можно на том же VPS, где крутится сайт?

Можно на том же — Plausible в связке с ClickHouse и PostgreSQL стабильно живёт рядом с не самым тяжёлым сайтом на VPS от 2 ГБ RAM. Если сайт сам по себе нагруженный (интернет-магазин, высокий трафик), лучше вынести аналитику на отдельный сервер, чтобы пики трафика по сайту не били по стабильности дашборда.

Можно ли импортировать историю из Google Analytics?

Да, в self-hosted версии есть импорт данных из Google Analytics (Universal Analytics и GA4) через встроенный мастер в настройках сайта — процесс может занять от нескольких минут до часов в зависимости от объёма исторических данных.

Что если забыл пароль администратора?

Пароль можно сбросить напрямую в базе PostgreSQL через консоль контейнера (docker compose exec plausible_db psql -U postgres plausible_db) с помощью функции сброса из документации Plausible, либо создать нового пользователя-администратора тем же способом, если регистрация уже отключена.

Отличается ли Plausible от Matomo?

Оба — self-hosted альтернативы Google Analytics, но Plausible сознательно проще: меньше метрик, зато минимальный вес скрипта и предельно простой дашборд без обучения. Matomo ближе к полноценной замене GA по функциональности, но и требовательнее к ресурсам сервера.

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

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

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