bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення Umami Web Analytics

calendar_month Aug 14, 2026 schedule 23 хв. читання visibility 20 переглядів
Установка Umami Web Analytics на VPS с Docker, PostgreSQL и Nginx
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення Umami Web Analytics на VPS з Docker, PostgreSQL та Nginx

TL;DR

У цьому докладному посібнику ми крок за кроком налаштуємо власну систему веб-аналітики Umami на віртуальному приватному сервері (VPS). Використовуючи зв'язку Docker, PostgreSQL та Nginx, ви отримаєте повністю контрольований, приватний та високопродуктивний інструмент для відстеження статистики вашого сайту без шкоди для конфіденційності користувачів.

  • Ви розгорнете Umami — сучасну, легку та приватну альтернативу традиційним системам аналітики.
  • Вся інфраструктура буде контейнеризована за допомогою Docker та Docker Compose, забезпечуючи легкість розгортання та керування.
  • Для зберігання даних використовуватиметься надійна та масштабована база даних PostgreSQL.
  • Nginx виступатиме в ролі зворотного проксі-сервера, забезпечуючи безпечний доступ до Umami через HTTPS з автоматичним отриманням сертифікатів Let's Encrypt.
  • Ви отримаєте повний контроль над своїми даними та їх безпекою, дотримуючись найкращих практик з підготовки сервера, резервного копіювання та обслуговування.

Що ми налаштовуємо і навіщо

Схема: Що ми налаштовуємо і навіщо
Схема: Що ми налаштовуємо і навіщо

У сучасному цифровому світі збір аналітики про відвідуваність веб-сайтів є критично важливим для розуміння поведінки користувачів, оптимізації контенту та покращення конверсії. Однак традиційні рішення, такі як Google Analytics, часто викликають питання щодо конфіденційності даних, їх володіння та відповідності суворим регуляціям, таким як GDPR або CCPA. Саме тут на сцену виходить Umami Web Analytics.

Umami — це проста, швидка та орієнтована на конфіденційність альтернатива Google Analytics. Вона дозволяє вам збирати основні метрики відвідуваності (перегляди сторінок, унікальні відвідувачі, джерела трафіку, використовувані пристрої та браузери) без використання файлів cookie та без збору персональних даних, що робить її ідеальним вибором для проєктів, де конфіденційність стоїть на першому місці. Це означає, що вам, швидше за все, не потрібно буде отримувати згоду користувачів на використання cookie, що значно спрощує відповідність законодавству.

Що отримає читач у підсумку

Після завершення цього посібника ви отримаєте повністю функціонуючу інсталяцію Umami на вашому власному VPS. Це означатиме:

  • Повний контроль над даними: Вся ваша аналітика зберігається на вашому сервері, і тільки ви маєте до неї доступ.
  • Конфіденційність за замовчуванням: Umami спроєктована з урахуванням приватності, не збирає PII (особисто ідентифіковану інформацію) та не використовує cookie для відстеження.
  • Висока продуктивність: Umami є легкою програмою, а використання Docker та Nginx забезпечує ефективний розподіл ресурсів та швидку роботу.
  • Гнучкість та масштабованість: Архітектура на основі Docker дозволяє легко оновлювати компоненти, масштабувати ресурси та інтегрувати Umami з іншими сервісами.
  • Економія: Відсутність щомісячних платежів за хмарну аналітику, особливо при великих обсягах трафіку.

Які альтернативи існують (cloud-managed vs self-hosted) і чому self-hosted на VPS

Існує два основні підходи до веб-аналітики:

  • Cloud-managed рішення (наприклад, Google Analytics, Fathom Analytics, Plausible Analytics):
    • Плюси: Простота налаштування (часто лише копіювання JS-коду), відсутність необхідності керувати сервером, автоматичні оновлення.
    • Мінуси: Щомісячна плата, дані зберігаються у третьої сторони (що може бути проблемою для конфіденційності та відповідності регуляціям), обмежений контроль над функціональністю та інтеграціями.
  • Self-hosted рішення (наприклад, Umami, Matomo, Open Web Analytics):
    • Плюси: Повний контроль над даними та інфраструктурою, відсутність щомісячних платежів за сервіс (тільки за VPS), можливість глибокої кастомізації та інтеграції. Ідеально для тих, хто цінує суверенітет даних.
    • Мінуси: Вимагає технічних знань для встановлення та обслуговування, відповідальність за безпеку та резервне копіювання лежить на вас.

Чому self-hosted на VPS? Вибір VPS для Umami — це золота середина. Ви отримуєте переваги self-hosted рішення (контроль, приватність, економія) з відносно низькими витратами на інфраструктуру. VPS надає виділені ресурси, що гарантує стабільну роботу вашої аналітики, на відміну від спільного хостингу. Для розробників, соло-фаундерів та компаній, які цінують контроль над даними, це оптимальний варіант. Ви самі вирішуєте, де і як зберігаються ваші дані, та забезпечуєте їх захист відповідно до ваших вимог.

Який VPS-конфіг потрібен для цього завдання

Схема: Який VPS-конфіг потрібен для цього завдання
Схема: Який VPS-конфіг потрібен для цього завдання

Вибір відповідного VPS — ключовий крок до успішного розгортання Umami. Вимоги до ресурсів Umami відносно невеликі, але вони залежать від обсягу трафіку, який ви плануєте відстежувати.

Мінімальні вимоги

Для невеликих сайтів або тестових середовищ (до 10 000 переглядів сторінок на місяць):

  • CPU: 1 ядро (x86-64)
  • RAM: 1-2 ГБ
  • Диск: 20-40 ГБ SSD (швидкий диск критичний для продуктивності бази даних)
  • Мережа: 100 Мбіт/с або 1 Гбіт/с порт, необмежений або достатній обсяг трафіку (зазвичай 1 ТБ на місяць достатньо для більшості сайтів).
  • Операційна система: Ubuntu Server 24.04 LTS (рекомендується) або інша сучасна ОС на базі Linux.

Рекомендований VPS-план для завдання

Для сайтів із середньою відвідуваністю (від 10 000 до 100 000 переглядів сторінок на місяць) або для тих, хто планує розміщувати на цьому ж VPS інші легкі сервіси:

  • CPU: 2 ядра (x86-64)
  • RAM: 4 ГБ
  • Диск: 80-160 ГБ SSD NVMe (для максимальної продуктивності БД)
  • Мережа: 1 Гбіт/с порт, 2-4 ТБ трафіку на місяць.

Для більшості завдань, пов'язаних з Umami, підійде VPS з такими характеристиками. Важливо обирати провайдера, який пропонує надійну інфраструктуру та якісну підтримку.

Коли потрібен dedicated, а не VPS

Виділений сервер (dedicated server) стає необхідним, коли:

  • Дуже високий трафік: Якщо ви очікуєте мільйони переглядів сторінок на місяць або десятки тисяч одночасних користувачів, VPS може не впоратися з навантаженням на базу даних та програму.
  • Багато сервісів: Якщо крім Umami ви плануєте розміщувати на сервері високонавантажені веб-додатки, бази даних для інших проєктів, ігрові сервери або вимогливі CI/CD системи.
  • Особливі вимоги до безпеки/відповідності: Деякі регуляції можуть вимагати фізичної ізоляції обладнання.
  • Вимоги до продуктивності: Потрібен максимальний контроль над апаратним забезпеченням, тонке налаштування BIOS/UEFI, специфічні RAID-масиви.

Для більшості користувачів Umami, навіть з кількома десятками тисяч відвідувачів на день, добре сконфігурованого VPS буде більш ніж достатньо.

Локація: на що впливає

Вибір географічної локації вашого VPS важливий з кількох причин:

  • Затримка (latency): Розміщуйте VPS якомога ближче до вашої основної цільової аудиторії. Менша затримка означає швидший доступ до панелі Umami для вас та швидше виконання скрипта аналітики для ваших користувачів (хоча скрипт Umami дуже легкий).
  • Законодавство про дані: Залежно від того, де знаходяться ваші користувачі та де ви ведете бізнес, можуть діяти різні закони про зберігання та обробку даних (наприклад, GDPR в ЄС). Вибір локації VPS відповідно до цих вимог може бути критичним.
  • Ціна: Ціни на VPS можуть варіюватися залежно від регіону.

Завжди обирайте локацію, яка найкраще відповідає вашим пріоритетам щодо продуктивності та правових норм.

Підготовка сервера

Схема: Підготовка сервера
Схема: Підготовка сервера

Перш ніж приступати до встановлення Umami, необхідно виконати базове налаштування вашого свіжого VPS, щоб забезпечити безпеку та стабільність роботи. Ми будемо використовувати Ubuntu Server 24.04 LTS як операційну систему.

1. Підключення до сервера

Спершу підключіться до вашого VPS за SSH, використовуючи облікові дані, надані вашим провайдером (зазвичай це користувач root та пароль, або SSH-ключ).


ssh root@ВАШ_IP_АДРЕС

Підключення до сервера через SSH.

2. Оновлення системи

Завжди починайте з оновлення списку пакетів та їх встановлення до актуального стану. Це гарантує, що у вас будуть останні версії ПЗ та патчі безпеки.


sudo apt update && sudo apt upgrade -y

Оновлення списку пакетів та встановлення оновлень.

3. Створення нового користувача з правами sudo

Робота під користувачем root небезпечна. Створіть нового користувача для повсякденної роботи та надайте йому права sudo.


# Замените 'ваш_пользователь' на желаемое имя
sudo adduser ваш_пользователь
sudo usermod -aG sudo ваш_пользователь

Створення нового користувача та додавання його до групи sudo.

Вийдіть із сесії root та увійдіть під новим користувачем:


exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС

Вихід з root та вхід під новим користувачем.

4. Налаштування SSH-ключів (рекомендується)

Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Згенеруйте ключі на вашій локальній машині (якщо ще не зробили):


# На вашей локальной машине
ssh-keygen -t rsa -b 4096 -C "[email protected]"

Генерація SSH-ключа (локально).

Потім скопіюйте публічний ключ на сервер (замініть ваш_пользователь та ВАШ_IP_АДРЕС):


# На вашей локальной машине
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС

Копіювання публічного SSH-ключа на сервер.

Після цього вимкніть вхід за паролем для SSH (рекомендується). Відредагуйте файл /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config

Відкриття файлу конфігурації SSH-сервера.

Знайдіть та змініть наступні рядки (або додайте, якщо відсутні):


PasswordAuthentication no
PermitRootLogin no

Вимкнення автентифікації за паролем та входу для root.

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X). Перезапустіть службу SSH:


sudo systemctl restart sshd

Перезапуск служби SSH.

5. Налаштування брандмауера (UFW)

Uncomplicated Firewall (UFW) — це простий у використанні інтерфейс для iptables. Налаштуємо його для дозволу лише необхідних підключень.


sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh          # Разрешить SSH (порт 22)
sudo ufw allow http         # Разрешить HTTP (порт 80)
sudo ufw allow https        # Разрешить HTTPS (порт 443)
sudo ufw enable
sudo ufw status verbose

Встановлення UFW, налаштування правил за замовчуванням, дозвіл SSH, HTTP, HTTPS та активація брандмауера.

6. Встановлення Fail2ban

Fail2ban сканує логи сервера на предмет підозрілих активностей (наприклад, багаторазові невдалі спроби входу SSH) та тимчасово блокує IP-адреси порушників.


sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Встановлення Fail2ban та запуск служби.

Створіть копію файлу конфігурації для кастомізації:


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Копіювання та редагування конфігурації Fail2ban.

У файлі jail.local переконайтеся, що секція [sshd] активна (enabled = true) і, за бажанням, налаштуйте bantime (час блокування) та findtime (період для виявлення порушень).


[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Приклад конфігурації Fail2ban для SSH.

Збережіть та закрийте файл, потім перезапустіть Fail2ban:


sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Перезапуск Fail2ban та перевірка статусу SSH-фільтра.

Ваш сервер тепер базово підготовлений та захищений. Можна переходити до встановлення основного програмного забезпечення.

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

Для розгортання Umami ми будемо використовувати Docker та Docker Compose. Це дозволить нам легко керувати застосунком Umami та його базою даних PostgreSQL в ізольованих контейнерах, а Nginx буде служити зворотним проксі для обробки веб-запитів та HTTPS.

1. Встановлення Docker Engine

Почнемо зі встановлення Docker Engine та Docker Compose. Ми будемо використовувати офіційний скрипт для встановлення останньої стабільної версії Docker, актуальної для 2026 року (припускаємо, що це буде версія 26.x або новіша).


# Встановлюємо необхідні пакети для встановлення Docker
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -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

# Додаємо репозиторій Docker до APT джерел
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

# Оновлюємо список пакетів з урахуванням нового репозиторію
sudo apt update

# Встановлюємо Docker Engine, Docker CLI та Containerd
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Додаємо поточного користувача до групи docker, щоб не використовувати sudo з docker-командами
sudo usermod -aG docker ваш_попользователь

Встановлення Docker Engine та додавання користувача до групи docker.

Вийдіть з SSH-сесії та увійдіть знову, щоб зміни в групах набули чинності:


exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС

Перепідключення для застосування змін групи.

Перевірте встановлення Docker:


docker run hello-world

Запуск тестового контейнера Docker.

Ви повинні побачити вітальне повідомлення від Docker.

2. Встановлення Docker Compose

Docker Compose зазвичай встановлюється як плагін Docker CLI, актуальна версія на 2026 рік буде 2.x.


# Перевіряємо, чи встановлено Docker Compose як плагін
docker compose version

# Якщо не встановлено, встановлюємо (за необхідності)
# Встановлення Docker Compose як плагіна Docker CLI
sudo apt update
sudo apt install docker-compose-plugin -y

Перевірка та встановлення Docker Compose плагіна.

Перевірте встановлення Docker Compose:


docker compose version

Перевірка версії Docker Compose.

3. Встановлення Nginx

Nginx виступатиме в ролі зворотного проксі-сервера для Umami та забезпечуватиме обробку HTTPS-трафіку.


sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Встановлення Nginx та запуск служби.

Перевірте статус Nginx:


sudo systemctl status nginx

Перевірка статусу Nginx.

Ви повинні побачити, що Nginx активний (active (running)).

4. Створення файлу Docker Compose для Umami та PostgreSQL

Створіть каталог для вашого проєкту Umami та перейдіть до нього:


mkdir umami
cd umami

Створення каталогу проєкту та перехід до нього.

Створіть файл docker-compose.yml:


nano docker-compose.yml

Створення файлу Docker Compose.

Вставте наступний вміст. Зверніть увагу на версії образів: postgres:16 (або postgres:17, актуальна на 2026 рік) та umami-software/umami:postgresql-latest (або конкретна стабільна версія, наприклад, v2.10.1 або v3.x, актуальна на 2026 рік). Завжди перевіряйте офіційні релізи Umami та Docker Hub для PostgreSQL на предмет найсвіжіших стабільних версій.


version: '3.8'

services:
  umami:
    image: umami-software/umami:postgresql-latest # Або конкретна версія, наприклад v2.10.1, v3.0.0
    container_name: umami
    restart: always
    ports:
      - "3000:3000" # Umami слухає на порту 3000 всередині контейнера
    environment:
      # Замініть ці значення на свої! APP_SECRET має бути довгим випадковим рядком.
      DATABASE_URL: postgresql://umami:your_db_password@db:5432/umami
      APP_SECRET: your_super_secret_key_for_umami_app
      # Додаткові опції, якщо потрібні, наприклад, для email-сповіщень
      # SMTP_HOST: smtp.example.com
      # SMTP_PORT: 587
      # SMTP_USER: [email protected]
      # SMTP_PASS: your_smtp_password
      # SMTP_SENDER: [email protected]
    depends_on:
      - db
    volumes:
      - ./umami-data:/app/umami-data # Для зберігання файлів, якщо Umami їх використовує

  db:
    image: postgres:16 # Або postgres:17, актуальна на 2026 рік
    container_name: umami-db
    restart: always
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: your_db_password # Замініть на надійний пароль!
    volumes:
      - ./postgres-data:/var/lib/postgresql/data

Конфігурація Docker Compose для Umami та PostgreSQL.

ВАЖЛИВО:

  • Замініть your_db_password на складний, унікальний пароль.
  • Замініть your_super_secret_key_for_umami_app на довгий, випадковий рядок. Ви можете згенерувати його за допомогою команди openssl rand -base64 32.
  • Переконайтеся, що DATABASE_URL у сервісі umami відповідає обліковим даним для db.

# Приклад генерації APP_SECRET
openssl rand -base64 32

Генерація випадкового ключа для APP_SECRET.

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).

5. Ініціалізація бази даних Umami

Перш ніж запускати Umami, необхідно ініціалізувати базу даних. Це робиться за допомогою команди db-push, яка створює необхідні таблиці.


# Запускаємо лише сервіс бази даних, щоб він був готовий
docker compose up -d db

# Чекаємо кілька секунд, поки база даних запуститься
sleep 10

# Ініціалізуємо базу даних Umami
docker compose exec umami yarn db-push

Запуск бази даних та ініціалізація Umami.

Якщо ви побачите повідомлення на кшталт "Database is already in sync", значить, таблиці вже створені.

6. Запуск Umami та PostgreSQL

Тепер, коли база даних ініціалізована, можна запустити всі сервіси:


docker compose up -d

Запуск усіх сервісів Docker Compose у фоновому режимі.

Перевірте статус запущених контейнерів:


docker compose ps

Перевірка статусу контейнерів.

Обидва контейнери (umami та umami-db) повинні бути у стані running.

На цьому етапі Umami доступна всередині вашого VPS на порту 3000 (http://localhost:3000). Наступним кроком буде налаштування Nginx для доступу до неї ззовні через доменне ім'я та HTTPS.

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Після встановлення всіх компонентів необхідно налаштувати Nginx як зворотний проксі для Umami та забезпечити безпечне HTTPS-з'єднання за допомогою Let's Encrypt.

1. Налаштування доменного імені

Перш ніж продовжити, переконайтеся, що у вас є доменне ім'я (наприклад, analytics.yourdomain.com), і його A-запис вказує на IP-адресу вашого VPS. Проходження змін DNS може зайняти деякий час (до кількох годин), тому переконайтеся, що це зроблено заздалегідь.

2. Конфігурація Nginx для Umami

Створимо новий файл конфігурації Nginx для вашого домену. Замініть analytics.yourdomain.com на ваш фактичний домен.


sudo nano /etc/nginx/sites-available/analytics.yourdomain.com

Створення файлу конфігурації Nginx.

Вставте наступний вміст:


server {
    listen 80;
    listen [::]:80;
    server_name analytics.yourdomain.com; # Замініть на ваш домен

    location / {
        proxy_pass http://localhost:3000; # Umami слухає на порту 3000 всередині VPS
        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;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Конфігурація Nginx для зворотного проксі до Umami.

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).

3. Активація конфігурації Nginx

Створіть символічне посилання на файл конфігурації в каталозі sites-enabled та перевірте синтаксис Nginx.


sudo ln -s /etc/nginx/sites-available/analytics.yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t

Створення символічного посилання та перевірка синтаксису Nginx.

Якщо тест пройшов успішно (syntax is ok, test is successful), перезапустіть Nginx:


sudo systemctl restart nginx

Перезапуск Nginx.

4. Налаштування TLS/HTTPS за допомогою Certbot (Let's Encrypt)

Для забезпечення безпечного з'єднання HTTPS ми будемо використовувати Certbot для отримання та автоматичного оновлення безкоштовних SSL/TLS сертифікатів від Let's Encrypt.


# Встановлення Certbot
sudo apt install certbot python3-certbot-nginx -y

# Отримання сертифіката (замініть на ваш домен та email)
sudo certbot --nginx -d analytics.yourdomain.com --email [email protected] --agree-tos --no-eff-email

Встановлення Certbot та отримання сертифіката Let's Encrypt.

Certbot автоматично змінить конфігурацію Nginx, додавши налаштування HTTPS та перенаправлення з HTTP на HTTPS. Він також налаштує автоматичне оновлення сертифікатів через cronjob або systemd timer.

Перевірте, що Certbot налаштував автоматичне оновлення:


sudo systemctl status certbot.timer

Перевірка статусу таймера Certbot для автооновлення.

Ви повинні побачити, що таймер активний та запущений.

5. Перевірка працездатності

Тепер Umami має бути доступна через ваш домен за HTTPS.


curl -I https://analytics.yourdomain.com

Перевірка HTTP-заголовків вашого домену.

Ви повинні побачити статус HTTP/2 200 та заголовки, що вказують на Nginx та SSL-сертифікат.

Відкрийте веб-браузер і перейдіть за адресою https://analytics.yourdomain.com. Ви повинні побачити сторінку входу Umami. Стандартні облікові дані:

  • Ім'я користувача: admin
  • Пароль: umami

Обов'язково змініть пароль адміністратора відразу після першого входу!

Після входу ви зможете додати свій перший веб-сайт для відстеження. Umami надасть вам невеликий JavaScript-код, який потрібно буде вставити в розділ <head> вашого сайту.


<script async src="https://analytics.yourdomain.com/script.js" data-website-id="ВАШ_ID_САЙТА"></script>
    

Приклад скрипта відстеження Umami.

Замініть https://analytics.yourdomain.com/script.js на ваш реальний URL та ВАШ_ID_САЙТА на ID, який Umami згенерує для вашого сайту.

Резервні копії та обслуговування

Схема: Резервні копії та обслуговування
Схема: Резервні копії та обслуговування

Резервне копіювання та регулярне обслуговування є критично важливими для будь-якої виробничої системи. Недотримання цих практик може призвести до втрати даних та простоїв.

Що резервувати

Для Umami, розгорнутої з Docker, PostgreSQL та Nginx, необхідно регулярно створювати резервні копії наступних компонентів:

  • База даних PostgreSQL: Містить усі ваші аналітичні дані. Це найважливіший компонент.
  • Конфігураційні файли Umami: Файл docker-compose.yml та будь-які пов'язані з ним .env файли, що містять змінні середовища та секрети.
  • Конфігураційні файли Nginx: Файл /etc/nginx/sites-available/analytics.yourdomain.com та інші кастомні налаштування Nginx.
  • SSL-сертифікати Let's Encrypt: Хоча Certbot їх оновлює, мати їх копію не завадить. Вони зберігаються в /etc/letsencrypt/.

Простий скрипт авторезервного копіювання

Створимо простий скрипт на Bash, який виконуватиме резервне копіювання PostgreSQL та конфігураційних файлів. Ми будемо використовувати pg_dump для PostgreSQL та rsync для файлів.

Створіть каталог для резервних копій на вашому VPS:


mkdir -p ~/backups/umami

Створення каталогу для резервних копій.

Створіть файл скрипта backup_umami.sh:


nano ~/backup_umami.sh

Створення скрипта резервного копіювання.

Вставте наступний вміст, замінивши your_db_password на реальний пароль від бази даних Umami:


#!/bin/bash

# --- Конфігурація ---
BACKUP_DIR="/home/ваш_користувач/backups/umami" # Шлях до каталогу резервних копій
DATE=$(date +%Y%m%d%H%M%S)
DB_CONTAINER_NAME="umami-db"
DB_NAME="umami"
DB_USER="umami"
DB_PASSWORD="your_db_password" # Пароль від бази даних Umami
UMAMI_COMPOSE_DIR="/home/ваш_користувач/umami" # Каталог з docker-compose.yml

# --- Створення каталогу резервної копії для поточної дати ---
CURRENT_BACKUP_DIR="$BACKUP_DIR/$DATE"
mkdir -p "$CURRENT_BACKUP_DIR"

echo "Починаємо резервне копіювання Umami в $CURRENT_BACKUP_DIR..."

# --- Резервне копіювання бази даних PostgreSQL ---
echo "Резервне копіювання бази даних PostgreSQL..."
# Використовуємо docker exec для виконання pg_dump всередині контейнера бази даних
docker exec "$DB_CONTAINER_NAME" pg_dump -U "$DB_USER" -d "$DB_NAME" > "$CURRENT_BACKUP_DIR/umami_db_backup.sql"
if [ $? -eq 0 ]; then
    echo "Резервна копія бази даних успішно створена."
else
    echo "Помилка при створенні резервної копії бази даних!"
fi

# --- Резервне копіювання конфігураційних файлів ---
echo "Резервне копіювання конфігураційних файлів Umami..."
rsync -avz "$UMAMI_COMPOSE_DIR/docker-compose.yml" "$CURRENT_BACKUP_DIR/"
rsync -avz "$UMAMI_COMPOSE_DIR/.env" "$CURRENT_BACKUP_DIR/" # Якщо ви використовуєте .env файл
echo "Резервне копіювання файлів Umami завершено."

echo "Резервне копіювання конфігурації Nginx..."
rsync -avz /etc/nginx/sites-available/analytics.yourdomain.com "$CURRENT_BACKUP_DIR/nginx_umami.conf"
echo "Резервне копіювання Nginx завершено."

echo "Резервне копіювання сертифікатів Let's Encrypt (символічні посилання)..."
# Копіюємо лише символічні посилання, а не самі сертифікати,
# оскільки вони можуть бути великими та містити багато файлів.
# Для повного відновлення Certbot краще перевипустити їх за допомогою certbot --nginx
rsync -avzL /etc/letsencrypt/live/analytics.yourdomain.com "$CURRENT_BACKUP_DIR/letsencrypt_symlinks"
echo "Резервне копіювання сертифікатів Let's Encrypt завершено."

echo "Резервне копіювання завершено."

# --- Очищення старих резервних копій (опціонально, зберігаємо останні 7 днів) ---
echo "Видалення старих резервних копій (старших за 7 днів)..."
find "$BACKUP_DIR" -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
echo "Очищення завершено."

Скрипт резервного копіювання для Umami.

Зробіть скрипт виконуваним:


chmod +x ~/backup_umami.sh

Надання прав на виконання скрипту.

Куди зберігати (зовнішній S3 / окремий VPS)

Зберігання резервних копій на тому ж сервері, що й оригінальні дані, вкрай ризиковано. Якщо сервер вийде з ладу, ви втратите і дані, і резервні копії. Завжди використовуйте віддалене сховище:

  • Хмарне сховище (S3-сумісне): Такі сервіси, як Amazon S3, DigitalOcean Spaces, Backblaze B2, пропонують надійне та недороге зберігання. Ви можете використовувати утиліти на кшталт rclone для автоматичної синхронізації локальних резервних копій з S3.
  • Окремий VPS: Ви можете мати другий, менш потужний VPS, який отримуватиме резервні копії з основного сервера за допомогою SCP/SFTP або rsync.
  • Локальне NAS/ПК: Для зовсім невеликих проєктів можна періодично завантажувати резервні копії на свій комп'ютер або мережеве сховище.

Наприклад, для відправлення резервних копій на S3 за допомогою rclone (після його встановлення та налаштування):


# Додати до скрипта backup_umami.sh
echo "Відправлення резервних копій до S3..."
rclone sync "$BACKUP_DIR" "my_s3_remote:umami-backups" # Замініть на ваше ім'я віддаленого сховища
echo "Відправлення до S3 завершено."

Приклад команди rclone для відправлення резервних копій до хмарного сховища.

Налаштування Cron для автоматичного запуску резервного копіювання

Відредагуйте розклад Cron для вашого користувача:


crontab -e

Відкриття файлу crontab для редагування.

Додайте наступний рядок для щоденного запуску резервного копіювання, наприклад, о 03:00 ранку:


0 3 * * * /home/ваш_користувач/backup_umami.sh >> /home/ваш_користувач/backups/umami_backup.log 2>&1

Додавання завдання Cron для щоденного резервного копіювання.

Цей рядок запускає скрипт щодня о 3 годині ночі та перенаправляє весь вивід у лог-файл umami_backup.log.

Оновлення: rolling vs maintenance window

Регулярні оновлення ПЗ важливі для безпеки та отримання нових функцій. Для Umami та її компонентів:

  • Оновлення Docker-контейнерів (Umami, PostgreSQL):

    Це можна робити з невеликим простоєм. Рекомендується планувати "вікно обслуговування" (maintenance window), коли трафік на сайт мінімальний.

    
    cd ~/umami
    docker compose pull             # Завантажити нові образи
    docker compose down             # Зупинити та видалити старі контейнери
    docker compose up -d            # Запустити нові контейнери
    

    Оновлення Docker-контейнерів Umami та PostgreSQL.

    Після оновлення Umami може знадобитися повторна ініціалізація бази даних, якщо в новій версії були зміни схеми: docker compose exec umami yarn db-push.

  • Оновлення системних пакетів (Nginx, Docker Engine, Certbot, OS):

    Це слід робити регулярно, наприклад, раз на місяць. Деякі оновлення можуть вимагати перезавантаження сервера.

    
    sudo apt update && sudo apt upgrade -y
    sudo apt autoremove -y
    # Якщо були оновлення ядра або критичних компонентів, може знадобитися перезавантаження
    # sudo reboot
                

    Оновлення системних пакетів.

Завжди перевіряйте логи після оновлень, щоб переконатися в коректній роботі всіх сервісів.

Усунення несправностей + FAQ

Навіть при ретельному налаштуванні можуть виникнути проблеми. Цей розділ допоможе вам діагностувати та усувати найпоширеніші несправності, а також відповість на часті запитання.

Що робити, якщо Umami не підключається до бази даних?

Помилка: Ви бачите повідомлення в логах Umami або на веб-сторінці про неможливість підключення до бази даних (Cannot connect to database, Connection refused).

Що перевірити:

  • Логи контейнера PostgreSQL: docker compose logs db. Переконайтеся, що PostgreSQL запущено без помилок.
  • Логи контейнера Umami: docker compose logs umami. Шукайте помилки, пов'язані з підключенням до БД.
  • Змінні оточення: Переконайтеся, що DATABASE_URL у файлі docker-compose.yml для сервісу umami точно відповідає обліковим даним PostgreSQL (ім'я користувача, пароль, ім'я бази даних) та імені сервісу бази даних (db).
  • Порти: Переконайтеся, що контейнери можуть спілкуватися між собою через внутрішню Docker-мережу (за замовчуванням Docker Compose створює свою мережу).

Як виправити: Перевірте ще раз DATABASE_URL та змінні оточення для PostgreSQL. Переконайтеся, що паролі збігаються. Якщо ви змінили docker-compose.yml, перезапустіть контейнери: docker compose down && docker compose up -d. Якщо PostgreSQL не запускається, перевірте, чи достатньо у сервера оперативної пам'яті або вільного місця на диску.

Nginx видає 502 Bad Gateway або 504 Gateway Timeout.

Помилка: При спробі доступу до Umami через браузер ви бачите помилку Nginx 502 або 504.

Що перевірити:

  • Статус контейнера Umami: docker compose ps. Переконайтеся, що контейнер umami знаходиться в стані running.
  • Логи Nginx: sudo tail -f /var/log/nginx/error.log. Шукайте помилки, пов'язані з проксіюванням.
  • Логи Umami: docker compose logs umami. Можливо, Umami не запускається або вилітає відразу після старту.
  • Порт Umami: Переконайтеся, що Nginx проксіює запити на правильний порт (http://localhost:3000), і Umami дійсно слухає на цьому порту всередині VPS.

Як виправити: Якщо контейнер Umami не запущений, перевірте його логи та спробуйте запустити вручну. Якщо проблема в Nginx, переконайтеся, що proxy_pass у файлі конфігурації Nginx вказано правильно. Можливо, Umami потрібен більше часу для запуску, і Nginx вичерпує таймаут; у цьому випадку можна збільшити proxy_read_timeout у конфігурації Nginx.

Certbot не може отримати сертифікат Let's Encrypt.

Помилка: certbot --nginx видає помилки, пов'язані з перевіркою домену або підключенням.

Що перевірити:

  • DNS-записи: Переконайтеся, що A-запис вашого домену (наприклад, analytics.yourdomain.com) правильно вказує на IP-адресу вашого VPS. Використовуйте dig analytics.yourdomain.com, щоб перевірити. Зміни DNS можуть займати до 24 годин.
  • Брандмауер UFW: Переконайтеся, що порти 80 (HTTP) та 443 (HTTPS) відкриті. sudo ufw status verbose.
  • Nginx: Переконайтеся, що Nginx запущений і коректно слухає на порту 80. Certbot використовує Nginx для перевірки домену.
  • Обмеження Let's Encrypt: Якщо ви багато разів намагалися отримати сертифікат, можливо, ви зіткнулися з обмеженнями Let's Encrypt. Зачекайте годину або використовуйте прапор --staging для тестових спроб.

Як виправити: Виправте DNS-записи, відкрийте порти в UFW, переконайтеся, що Nginx працює. Якщо проблема зберігається, спробуйте запустити Certbot з прапором --dry-run для симуляції отримання сертифіката без фактичного запиту.

Який VPS-конфіг мінімально підійде?

Для базової установки Umami та відстеження невеликого або середнього веб-сайту (до 50 000 переглядів сторінок на місяць) мінімально підійде VPS з 1 CPU ядром, 2 ГБ оперативної пам'яті та 40 ГБ SSD-диска. Цього буде достатньо для комфортної роботи Umami та PostgreSQL, а також для системних процесів. Важливо, щоб диск був SSD для забезпечення хорошої продуктивності бази даних.

Що вибрати — VPS чи dedicated для цього завдання?

Вибір між VPS та dedicated сервером залежить від масштабу вашого проєкту та вимог до ресурсів. Для більшості користувачів, включаючи розробників, соло-фаундерів та власників середніх сайтів, VPS є оптимальним вибором. Він пропонує достатню продуктивність, гнучкість та економічність. Виділений сервер стає доцільним лише при дуже високих навантаженнях (мільйони переглядів сторінок на місяць), коли потрібна максимальна продуктивність, повний контроль над апаратним забезпеченням або якщо ви плануєте розміщувати безліч інших ресурсоємних застосунків разом з Umami.

Як оновити Umami та інші компоненти?

Для оновлення Umami та PostgreSQL (які працюють у Docker-контейнерах), перейдіть до каталогу з вашим docker-compose.yml і виконайте: docker compose pull (для завантаження нових образів) і потім docker compose up -d (для перезапуску контейнерів з новими образами). Для оновлення Nginx, Docker Engine та операційної системи використовуйте стандартні команди менеджера пакетів: sudo apt update && sudo apt upgrade -y. Завжди робіть резервні копії перед великими оновленнями.

Як скинути пароль адміністратора Umami?

Якщо ви забули пароль адміністратора Umami, його можна скинути, виконавши команду безпосередньо в контейнері Umami (або через базу даних PostgreSQL). На 2026 рік Umami, ймовірно, матиме CLI-інструмент для керування користувачами. Якщо ні, це можна зробити через SQL-запит. Приклад (перевірте актуальну документацію Umami):


# Підключіться до контейнера Umami
docker compose exec umami bash

# Виконайте команду для скидання пароля (приклад, команда може змінитися)
# yarn umami-cli users reset-password admin new_strong_password
# Або якщо прямого CLI немає, доведеться працювати з БД

Приклад скидання пароля адміністратора Umami.

Якщо CLI-інструмента немає, вам доведеться безпосередньо змінити хеш пароля в таблиці _User у базі даних PostgreSQL. Це складніший процес і вимагає знання SQL та структури бази даних Umami.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

Вітаємо! Ви успішно встановили та налаштували Umami Web Analytics на своєму VPS, використовуючи Docker, PostgreSQL та Nginx. Тепер у вас є потужний, приватний та повністю контрольований інструмент для збору аналітики вашого сайту, який поважає конфіденційність користувачів і дає вам повний суверенітет над вашими даними. Ви навчилися не тільки розгортати комплексний застосунок, а й забезпечувати його безпеку, працездатність та надійність через резервне копіювання та обслуговування.

Наступні кроки

Щоб максимально використовувати вашу нову систему аналітики та продовжити розвиток:

  • Додайте всі ваші веб-сайти: Увійдіть до панелі Umami, додайте всі проєкти, які ви хочете відстежувати, та вставте згенеровані скрипти на ваші сторінки.
  • Вивчіть додаткові функції Umami: Umami підтримує відстеження користувацьких подій, що дозволяє вам отримувати глибше розуміння взаємодії користувачів з вашим сайтом. Налаштуйте відстеження кліків по кнопках, відправки форм та інших ключових дій.
  • Моніторинг сервера: Встановіть інструменти моніторингу (наприклад, Prometheus + Grafana, Netdata або Zabbix), щоб відстежувати завантаження CPU, використання RAM, місце на диску та мережевий трафік вашого VPS. Це допоможе вам заздалегідь виявляти потенційні проблеми та планувати масштабування.
  • Подальша оптимізація та масштабування: У міру зростання трафіку, розгляньте можливість оптимізації продуктивності PostgreSQL (наприклад, налаштування postgresql.conf), кешування Nginx або навіть горизонтального масштабування Umami на кілька екземплярів Docker.

Завдяки цьому керівництву ви заклали міцний фундамент для вашої приватної веб-аналітики, який можна розвивати та адаптувати під будь-які майбутні потреби.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

Telegram VKVK WhatsApp Facebook LinkedIn XX

встановлення umami web analytics на vps з docker, postgresql і nginx
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.