Встановлення Plausible Analytics на VPS: з Docker, Caddy та PostgreSQL
TL;DR
У цьому детальному посібнику ми крок за кроком налаштуємо Plausible Analytics на власному VPS-сервері, використовуючи стек технологій Docker Compose для оркестрації сервісів, PostgreSQL як базу даних та Caddy як потужний і простий у налаштуванні веб-сервер з автоматичною видачею та оновленням SSL/TLS-сертифікатів. Ви отримаєте повністю функціональну, приватну та контрольовану систему веб-аналітики, розгорнуту на вашому сервері.
- Plausible Analytics працюватиме на вашому VPS під повним контролем.
- Використовується Docker Compose для легкого встановлення та керування всіма компонентами.
- Caddy автоматично налаштує HTTPS для вашого домену.
- PostgreSQL забезпечить надійне зберігання аналітичних даних.
- Посібник включає налаштування безпеки, резервного копіювання та обслуговування системи.
- Усі кроки перевіряються та готові до виконання на сервері з Ubuntu 24.04 LTS.
Що ми налаштовуємо і навіщо
Ми налаштовуємо Plausible Analytics — легковагову, орієнтовану на конфіденційність альтернативу Google Analytics. На відміну від традиційних аналітичних платформ, Plausible не використовує файли cookie, не збирає персональні дані та повністю відповідає вимогам GDPR, CCPA та PECR. Це ідеальне рішення для тих, хто хоче отримувати цінні дані про відвідувачів сайту, не порушуючи їхню приватність і не ускладнюючи свою інфраструктуру.
У підсумку ви отримаєте власний інстанс Plausible Analytics, доступний за вашим доменним ім'ям (наприклад, analytics.yourdomain.com), повністю контрольований і працюючий на вашому VPS. Усі дані зберігатимуться на вашому сервері, забезпечуючи максимальну конфіденційність та безпеку. Ви зможете додавати необмежену кількість сайтів для відстеження та переглядати статистику в зручному та інтуїтивно зрозумілому інтерфейсі.
Альтернативи: хмарні сервіси проти самостійного хостингу на VPS
Існує кілька підходів до отримання веб-аналітики:
- Хмарні (cloud-managed) сервіси: До них належать Google Analytics, Yandex.Metrica, а також платні версії Plausible Cloud, Fathom Analytics та Matomo Cloud. Вони пропонують зручність "під ключ" — вам не потрібно дбати про інфраструктуру, оновлення чи резервні копії. Однак ви передаєте контроль над даними сторонній компанії, що може бути неприйнятним з точки зору конфіденційності або юридичних вимог.
- Самостійний хостинг (self-hosted) на VPS: Це наш шлях. Розгортання Plausible на власному VPS дає вам повний контроль над даними, інфраструктурою та конфігурацією. Ви самі керуєте оновленнями, безпекою та резервним копіюванням. Це вимагає певних технічних навичок та часу на налаштування, але забезпечує максимальну гнучкість, приватність та економічну ефективність у довгостроковій перспективі, особливо при великій кількості відстежуваних сайтів.
Вибір самостійного хостингу на VPS особливо актуальний для розробників, соло-фаундерів SaaS-проєктів, криптоентузіастів, які цінують децентралізацію та приватність, а також для тих, хто хоче глибше розуміти та контролювати свою серверну інфраструктуру.
Який VPS-конфіг потрібен для цього завдання
Для Plausible Analytics, особливо при використанні Docker Compose, Caddy та PostgreSQL, потрібні певні мінімальні ресурси. Ці вимоги можуть варіюватися залежно від обсягу трафіку, який ви плануєте відстежувати.
Мінімальні вимоги для Plausible Analytics (станом на 2026 рік)
- CPU: Мінімум 1 ядро. Для невеликих та середніх проєктів (до 1-2 мільйонів переглядів сторінок на місяць) 1-2 ядра цілком достатньо. Для більш високонавантажених систем рекомендується 2-4 ядра.
- RAM: Мінімум 2 ГБ оперативної пам'яті. Plausible, PostgreSQL та Docker-контейнери вимагають значного обсягу RAM. Для стабільної роботи та обробки помірного трафіку 4 ГБ буде оптимальним вибором. Якщо ви плануєте відстежувати дуже багато сайтів або мільйони переглядів, розгляньте 8 ГБ.
- Диск: Мінімум 20-40 ГБ SSD. SSD критичний для продуктивності бази даних. Саме встановлення Plausible та його залежностей займе кілька гігабайт. Решта простору знадобиться для зберігання даних PostgreSQL, логів та резервних копій. Для довгострокового зберігання даних та масштабування краще мати 80-100 ГБ.
- Мережа: 100 Мбіт/с або 1 Гбіт/с порт. Для веб-аналітики висока пропускна здатність мережі зазвичай не є критичним фактором, оскільки дані передаються в невеликих обсягах. Стабільне з'єднання з гарною пропускною здатністю важливе для загальної доступності сервера.
Конкретний VPS-план для завдання
Для більшості користувачів, які починають з Plausible Analytics, підійде VPS-план з такими характеристиками:
| Критерій | Рекомендований мінімум | Оптимально для зростання |
|---|---|---|
| CPU | 2 ядра | 4 ядра |
| RAM | 4 ГБ | 8 ГБ |
| Диск | 80 ГБ SSD | 160 ГБ SSD |
| Мережа | 1 Гбіт/с | 1 Гбіт/с |
Можна розглянути VPS з такими характеристиками, щоб забезпечити стабільну роботу Plausible Analytics та мати запас для зростання вашого проєкту.
Коли потрібен dedicated, а не VPS
Dedicated сервер (виділений сервер) стає необхідним, коли ваш проєкт досягає дуже великих масштабів:
- Високонавантажені проєкти: Якщо ви відстежуєте сотні сайтів або мільйони переглядів сторінок на день (десятки та сотні мільйонів на місяць), де продуктивність бази даних та швидкість обробки запитів стають критичними.
- Суворі вимоги до безпеки та ізоляції: Dedicated сервер забезпечує повну фізичну ізоляцію, що може бути важливим для деяких регульованих галузей або дуже чутливих даних.
- Необхідність у кастомному обладнанні: Якщо вам потрібні специфічні конфігурації CPU, GPU, RAID-масиви або дуже великий обсяг RAM/диска, які не пропонуються в рамках стандартних VPS-планів.
Для більшості інсталяцій Plausible Analytics VPS буде більш ніж достатнім та економічно вигідним. Якщо ви все ж вирішите, що вам потрібен виділений сервер, то відповідний dedicated сервер забезпечить максимальну продуктивність та контроль.
Локація: на що впливає
Вибір географічної локації VPS-сервера впливає на кілька аспектів:
- Затримка (latency): Чим ближче сервер до вашої цільової аудиторії (відвідувачів сайтів, які ви відстежуєте) та до вас (якщо ви часто переглядаєте аналітику), тим нижчою буде затримка. Це впливає на швидкість завантаження JS-скрипта Plausible на вашому сайті та на швидкість відображення звітів у панелі керування.
- Юридичні аспекти: У деяких юрисдикціях можуть бути суворі вимоги до зберігання даних. Вибір сервера в країні, де діють сприятливі закони про конфіденційність (наприклад, у країнах ЄС для даних європейських користувачів), може бути кращим.
- Доступність та піринг: Деякі локації мають кращу зв'язність з великими інтернет-провайдерами, що може забезпечити більш стабільне та швидке з'єднання.
Для Plausible зазвичай рекомендується вибирати локацію, яка географічно близька до більшості ваших відвідувачів або до вашого власного місцезнаходження для комфортної роботи з адмінкою.
Підготовка сервера
Перед встановленням Plausible Analytics необхідно виконати базове налаштування та посилення безпеки вашого VPS. Ми будемо використовувати Ubuntu Server 24.04 LTS як основу, оскільки це один із найпопулярніших та найстабільніших дистрибутивів для серверів.
1. Доступ по SSH
Переконайтеся, що у вас є доступ до сервера по SSH. Зазвичай провайдер надає IP-адресу та логін (наприклад, root) з паролем. Рекомендується відразу ж налаштувати доступ за SSH-ключами та відключити вхід за паролем для root.
ssh root@ВАШ_IP_СЕРВЕРА
2. Оновлення системи та створення користувача sudo
Насамперед оновимо всі пакети та створимо нового користувача з правами sudo, щоб уникнути роботи під root.
# Оновлення списку пакетів
sudo apt update
# Оновлення встановлених пакетів до останніх версій
sudo apt upgrade -y
# Створення нового користувача (замініть 'youruser' на бажане ім'я)
sudo adduser youruser
# Додавання користувача до групи sudo
sudo usermod -aG sudo youruser
# Перемикання на нового користувача (необов'язково, можна вийти і зайти заново)
# su - youruser
Після створення користувача вийдіть із сесії root і залогіньтеся під новим користувачем. Усі подальші команди, що вимагають прав адміністратора, виконуватимуться з префіксом sudo.
exit
ssh youruser@ВАШ_IP_СЕРВЕРА
3. Налаштування SSH-ключів для нового користувача (рекомендується)
Якщо ви ще не налаштували, скопіюйте ваш публічний SSH-ключ на сервер.
# Виконати на вашій локальній машині
ssh-copy-id youruser@ВАШ_IP_СЕРВЕРА
# Якщо ssh-copy-id не працює, можна зробити вручну:
# ssh youruser@ВАШ_IP_СЕРВЕРА 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'
# cat ~/.ssh/id_rsa.pub | ssh youruser@ВАШ_IP_СЕРВЕРА 'cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
Після цього ви можете відключити автентифікацію за паролем в SSH для підвищення безпеки. Відредагуйте файл /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
Знайдіть та змініть наступні рядки (або додайте, якщо відсутні):
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X). Потім перезапустіть службу SSH:
sudo systemctl restart ssh
ВАЖЛИВО: Перед тим як закрити поточну SSH-сесію, відкрийте нове вікно терміналу та спробуйте зайти на сервер під youruser, використовуючи SSH-ключ. Переконайтеся, що вхід працює. Якщо ні, не закривайте поточну сесію, щоб мати можливість відкотити зміни.
4. Встановлення Fail2Ban
Fail2Ban допомагає захистити сервер від атак методом перебору паролів, блокуючи IP-адреси, з яких надходить занадто багато невдалих спроб входу.
# Встановлення Fail2Ban
sudo apt install fail2ban -y
# Копіювання файлу конфігурації за замовчуванням для налаштування
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Можна налаштувати jail.local, але для базового захисту стандартні налаштування підійдуть
# sudo nano /etc/fail2ban/jail.local
# Перезапуск служби Fail2Ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Перевірка статусу Fail2Ban
sudo systemctl status fail2ban
5. Налаштування Firewall (UFW)
Брандмауер UFW (Uncomplicated Firewall) дозволяє обмежити доступ до портів сервера, дозволяючи лише необхідні з'єднання.
# Встановлення UFW
sudo apt install ufw -y
# Дозволити SSH (порт 22)
sudo ufw allow ssh
# Дозволити HTTP (порт 80) та HTTPS (порт 443) - для Caddy
sudo ufw allow http
sudo ufw allow https
# Увімкнути UFW
sudo ufw enable
# Підтвердити увімкнення (ввести 'y')
# Перевірка статусу UFW
sudo ufw status verbose
Тепер ваш сервер готовий до встановлення необхідного програмного забезпечення.
Встановлення ПЗ — покроково
Для розгортання Plausible Analytics ми будемо використовувати Docker Compose, який спрощує керування кількома контейнерами (Plausible, PostgreSQL, ClickHouse). Як зворотний проксі та для автоматичного налаштування HTTPS ми використовуємо Caddy.
1. Встановлення Docker та Docker Compose (актуально для 2026 року)
Docker — це платформа для розробки, доставки та запуску застосунків у контейнерах. Docker Compose дозволяє визначати та запускати багатоконтейнерні Docker-застосунки.
# Видалення старих версій Docker (якщо є)
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done
# Встановлення залежностей для додавання репозиторію Docker
sudo apt update
sudo apt install ca-certificates curl gnupg -y
# Додавання офіційного GPG-ключа Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Додавання репозиторію Docker до APT sources
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Оновлення індексу пакетів APT
sudo apt update
# Встановлення Docker Engine, Docker CLI та Containerd
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Додавання поточного користувача до групи docker для запуску команд без sudo
sudo usermod -aG docker $USER
# Застосування змін групи (вийдіть і увійдіть знову або перезапустіть сесію)
# newgrp docker
# Перевірка встановлення Docker
docker run hello-world
# Перевірка версії Docker Compose (очікується docker compose version 2.x.x)
docker compose version
Примітка: Після виконання sudo usermod -aG docker $USER, вам потрібно або вийти з SSH-сесії та увійти знову, або виконати newgrp docker, щоб зміни в групах набули чинності.
2. Встановлення Caddy (актуально для 2026 року)
Caddy — це потужний веб-сервер з автоматичною підтримкою HTTPS, який діятиме як зворотний проксі для Plausible.
# Встановлення залежностей
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
# Додавання офіційного GPG-ключа Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
# Додавання репозиторію Caddy до APT sources
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
# Оновлення індексу пакетів APT
sudo apt update
# Встановлення Caddy
sudo apt install caddy -y
# Перевірка встановлення Caddy
caddy version
3. Підготовка структури каталогів для Plausible
Створимо директорію для Plausible та перейдемо до неї. Тут зберігатимуться всі конфігураційні файли.
# Створення директорії для Plausible
mkdir plausible
cd plausible
4. Налаштування DNS
Перш ніж рухатися далі, переконайтеся, що ваш домен або піддомен (наприклад, analytics.yourdomain.com) вказує на IP-адресу вашого VPS. Створіть A-запис у налаштуваннях DNS вашого домену.
| Тип запису | Хост/Ім'я | Значення | TTL |
|---|---|---|---|
| A | analytics (або @ якщо основний домен) | IP_ВАШОГО_VPS | Авто (або 3600) |
Зачекайте деякий час, поки DNS-записи оновляться (може зайняти від кількох хвилин до кількох годин). Ви можете перевірити, чи оновилися DNS, використовуючи ping або dig.
ping analytics.yourdomain.com
Конфігурація
Тепер, коли всі необхідні компоненти встановлено, настав час налаштувати Plausible, PostgreSQL та Caddy.
1. Створення файлу docker-compose.yml
Цей файл визначає сервіси (Plausible, PostgreSQL, ClickHouse), їхні образи, порти та залежності.
nano docker-compose.yml
Вставте наступний вміст:
version: '3.8'
services:
plausible_db:
image: postgres:16-alpine # Актуальна версія PostgreSQL на 2026 рік
restart: always
environment:
POSTGRES_DB: plausible
POSTGRES_USER: plausible
POSTGRES_PASSWORD: ${DB_PASSWORD} # Буде взято з .env
volumes:
- plausible_db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U plausible"]
interval: 5s
timeout: 5s
retries: 5
plausible_events_db:
image: clickhouse/clickhouse-server:24.3 # Актуальна версія ClickHouse на 2026 рік
restart: always
volumes:
- plausible_events_db_data:/var/lib/clickhouse
- ./clickhouse/config.xml:/etc/clickhouse-server/config.xml:ro
- ./clickhouse/users.xml:/etc/clickhouse-server/users.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8123/ping"]
interval: 5s
timeout: 5s
retries: 5
plausible:
image: plausible/analytics:v2.0 # Актуальна версія Plausible Analytics на 2026 рік
restart: always
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
plausible_db:
condition: service_healthy
plausible_events_db:
condition: service_healthy
environment:
DATABASE_URL: postgresql://plausible:${DB_PASSWORD}@plausible_db:5432/plausible
CLICKHOUSE_DATABASE_URL: http://plausible:${CLICKHOUSE_PASSWORD}@plausible_events_db:8123/plausible
BASE_URL: https://${YOUR_DOMAIN} # Ваш домен
SECRET_KEY_BASE: ${SECRET_KEY_BASE} # Згенеруйте за допомогою openssl rand -hex 64
TOTP_SALT: ${TOTP_SALT} # Згенеруйте за допомогою openssl rand -hex 32
ADMIN_USER_EMAIL: ${ADMIN_USER_EMAIL} # Ваш email для першого користувача
ADMIN_USER_PASSWORD: ${ADMIN_USER_PASSWORD} # Пароль для першого користувача
DISABLE_REGISTRATION: "true" # Вимкнути публічну реєстрацію
# Для надсилання пошти (необов'язково, але рекомендовано для скидання пароля)
# SMTP_HOST: smtp.your-provider.com
# SMTP_PORT: 587
# SMTP_USER: your-smtp-user
# SMTP_PASSWORD: your-smtp-password
# SMTP_MAIL_FROM: [email protected]
# SMTP_AUTH_METHOD: plain
# SMTP_TLS_MODE: :auto
ports:
- "127.0.0.1:8000:8000" # Прив'язка до localhost, Caddy проксіюватиме запити
volumes:
- plausible_data:/var/lib/plausible/data # Для даних Plausible, якщо вони є
volumes:
plausible_db_data:
plausible_events_db_data:
plausible_data:
Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).
2. Створення файлу .env для секретів
Всі конфіденційні дані зберігатимуться у файлі .env, який не повинен потрапляти до системи контролю версій (Git). Створіть його:
nano .env
Вставте наступний вміст, замінивши плейсхолдери вашими значеннями:
YOUR_DOMAIN=analytics.yourdomain.com # Ваш домен або піддомен для Plausible
DB_PASSWORD=YOUR_STRONG_POSTGRES_PASSWORD # Згенеруйте надійний пароль для PostgreSQL
CLICKHOUSE_PASSWORD=YOUR_STRONG_CLICKHOUSE_PASSWORD # Згенеруйте надійний пароль для ClickHouse
SECRET_KEY_BASE=YOUR_SECRET_KEY_BASE # Згенеруйте openssl rand -hex 64
TOTP_SALT=YOUR_TOTP_SALT # Згенеруйте openssl rand -hex 32
[email protected] # Ваш email для першого користувача Plausible
ADMIN_USER_PASSWORD=YOUR_ADMIN_PASSWORD # Надійний пароль для адміна Plausible
Як згенерувати ключі:
openssl rand -hex 64 # Для SECRET_KEY_BASE
openssl rand -hex 32 # Для TOTP_SALT
Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).
3. Налаштування конфігурації ClickHouse
Створіть директорії та файли конфігурації для ClickHouse. Це забезпечить правильну роботу бази даних подій.
mkdir -p clickhouse
nano clickhouse/config.xml
Вставте наступний вміст у clickhouse/config.xml:
information
true
::
262144
10000000000
100
Збережіть та закрийте. Потім створіть файл користувачів:
nano clickhouse/users.xml
Вставте наступний вміст у clickhouse/users.xml (замініть YOUR_STRONG_CLICKHOUSE_PASSWORD на пароль з вашого файлу .env):
default
::/0
YOUR_STRONG_CLICKHOUSE_PASSWORD
default
Збережіть та закрийте.
4. Запуск Plausible за допомогою Docker Compose
Тепер запустіть усі сервіси Docker Compose. Прапор -d запускає їх у фоновому режимі.
# Запуск усіх сервісів Docker Compose
docker compose up -d
# Перевірка статусу запущених контейнерів
docker compose ps
Переконайтеся, що всі контейнери мають статус running та healthy. Якщо якийсь контейнер не запускається, перевірте логи:
docker compose logs plausible
docker compose logs plausible_db
docker compose logs plausible_events_db
5. Налаштування Caddyfile
Caddy проксіюватиме запити до Plausible та автоматично керуватиме HTTPS. Видаліть файл Caddyfile за замовчуванням та створіть свій.
# Видалення дефолтного Caddyfile
sudo rm /etc/caddy/Caddyfile
# Створення нового Caddyfile
sudo nano /etc/caddy/Caddyfile
Вставте наступний вміст, замінивши analytics.yourdomain.com на ваш домен:
analytics.yourdomain.com {
reverse_proxy 127.0.0.1:8000
header {
# HSTS (на 1 рік) - обов'язково для безпеки
Strict-Transport-Security "max-age=31536000; includeSubDomains"
}
}
Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).
6. Запуск та перевірка Caddy
Перевірте конфігурацію Caddy та перезапустіть службу.
# Перевірка конфігурації Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
# Перезавантаження служби Caddy для застосування змін
sudo systemctl reload caddy
# Перевірка статусу служби Caddy
sudo systemctl status caddy
Переконайтеся, що Caddy працює і не видає помилок. У логах Caddy (sudo journalctl -u caddy --no-pager) ви повинні побачити, що сертифікати Let's Encrypt були успішно випущені.
7. Перевірка працездатності
Відкрийте ваш домен (наприклад, https://analytics.yourdomain.com) у браузері. Ви повинні побачити сторінку входу Plausible Analytics.
Увійдіть, використовуючи ADMIN_USER_EMAIL та ADMIN_USER_PASSWORD, які ви вказали у файлі .env. Після входу додайте ваш перший сайт та скопіюйте JS-сніпет для вбудовування на ваш сайт.
Можна також перевірити доступність локально за допомогою curl, щоб переконатися, що Plausible відповідає на порту 8000:
# Перевірка доступності Plausible через localhost
curl http://127.0.0.1:8000
Ви повинні отримати HTML-код сторінки Plausible. Якщо ні, перевірте логи Docker Compose.