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

Получить VPS arrow_forward
eco Начальный Туториал

Установка Umami Web Analytics на VPS с Docker, PostgreSQL и Nginx

calendar_month Aug 14, 2026 schedule 23 мин. чтения visibility 22 просмотров
Установка 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. Стандартные учетные данные:

  • Username: admin
  • Password: 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
                

    Обновление системных пакетов.

Всегда проверяйте логи после обновлений, чтобы убедиться в корректной работе всех сервисов.

Troubleshooting + 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 для проверки домена.
  • Rate Limits 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.

Благодаря этому руководству вы заложили прочный фундамент для вашей приватной веб-аналитики, который можно развивать и адаптировать под любые будущие потребности.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

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.