- Home »

Установка Metabase на Ubuntu 24 с Docker
Metabase — это настоящий must-have для тех, кто хочет превратить кучу данных в красивые дашборды без танцев с бубном. Если вы разрабатываете проекты, где нужно визуализировать данные из баз, то эта статья станет вашим спасением. Мы пройдём от установки Docker на свежей Ubuntu 24 до полностью рабочего Metabase за минимальное время. Никаких сложных настроек — только практика и рабочие решения, которые можно применить прямо сейчас.
Как это работает под капотом
Metabase — это Java-приложение, которое работает как веб-сервер и подключается к вашим базам данных. Архитектура довольно простая: есть встроенная H2 база для хранения настроек (хотя лучше использовать PostgreSQL), веб-интерфейс на порту 3000 по умолчанию, и коннекторы к различным БД.
Docker здесь играет роль изолированной среды, где все зависимости уже настроены. Это означает, что не нужно мучиться с установкой Java, настройкой переменных окружения и прочими радостями. Запустил контейнер — и готово.
Подготовка сервера и установка Docker
Для начала нужен сервер. Если у вас его нет, рекомендую взять VPS с минимум 2GB RAM (Metabase может жрать память при больших объёмах данных). Для серьёзных проектов лучше сразу смотреть в сторону выделенного сервера.
Устанавливаем Docker на Ubuntu 24:
# Обновляем систему
sudo apt update && sudo apt upgrade -y
# Устанавливаем необходимые пакеты
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
# Добавляем GPG ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Добавляем репозиторий Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Устанавливаем Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
# Добавляем пользователя в группу docker
sudo usermod -aG docker $USER
# Перезапускаем сессию или выполняем
newgrp docker
Быстрый старт: Metabase в одну команду
Самый простой способ запустить Metabase — это использовать встроенную H2 базу. Для тестирования подойдёт, но для продакшена не рекомендую.
# Создаём директорию для данных
mkdir -p ~/metabase-data
# Запускаем контейнер
docker run -d \
--name metabase \
-p 3000:3000 \
-v ~/metabase-data:/metabase-data \
-e MB_DB_FILE=/metabase-data/metabase.db \
metabase/metabase:latest
Через пару минут Metabase будет доступен по адресу http://ваш-ip:3000
. Первый запуск может занять время — приложение создаёт структуру базы.
Продакшен-настройка с PostgreSQL
Для серьёзных проектов лучше использовать PostgreSQL в качестве базы метаданных. Создаём docker-compose.yml:
version: '3.8'
services:
postgres:
image: postgres:15
container_name: metabase-postgres
environment:
POSTGRES_DB: metabase
POSTGRES_USER: metabase
POSTGRES_PASSWORD: your-strong-password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- metabase-network
metabase:
image: metabase/metabase:latest
container_name: metabase-app
depends_on:
- postgres
ports:
- "3000:3000"
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: metabase
MB_DB_PASS: your-strong-password
MB_DB_HOST: postgres
MB_JAVA_TIMEZONE: Europe/Moscow
volumes:
- metabase_data:/metabase-data
restart: unless-stopped
networks:
- metabase-network
volumes:
postgres_data:
metabase_data:
networks:
metabase-network:
driver: bridge
Запускаем всё это хозяйство:
# Создаём и переходим в директорию проекта
mkdir ~/metabase && cd ~/metabase
# Создаём docker-compose.yml (вставляем содержимое выше)
nano docker-compose.yml
# Запускаем
docker compose up -d
# Смотрим логи
docker compose logs -f metabase
Практические кейсы и подводные камни
За годы использования Metabase накопился список типичных проблем и их решений:
Проблема | Симптом | Решение |
---|---|---|
Медленная работа | Дашборды грузятся по 10+ секунд | Увеличить MB_JETTY_MAXTHREADS до 200, добавить RAM |
Падение при большой нагрузке | OutOfMemoryError в логах | Установить JAVA_OPTS=”-Xmx2g -Xms1g” |
Проблемы с SSL | Mixed content errors | Настроить MB_SITE_URL с https:// |
Потеря данных | Настройки сбрасываются после перезапуска | Правильно примонтировать volumes |
Настройка Nginx как reverse proxy
Для продакшена обязательно нужен reverse proxy. Устанавливаем Nginx:
sudo apt install nginx -y
# Создаём конфиг для Metabase
sudo nano /etc/nginx/sites-available/metabase
# Содержимое конфига:
server {
listen 80;
server_name your-domain.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
# Активируем конфиг
sudo ln -s /etc/nginx/sites-available/metabase /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Автоматическое обновление и бэкапы
Создаём скрипт для автоматического обновления:
#!/bin/bash
# update-metabase.sh
cd ~/metabase
# Останавливаем сервисы
docker compose stop metabase
# Обновляем образ
docker compose pull metabase
# Запускаем
docker compose up -d
# Проверяем статус
sleep 30
docker compose ps
Для бэкапа PostgreSQL данных:
#!/bin/bash
# backup-metabase.sh
BACKUP_DIR="/backup/metabase"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Бэкап базы PostgreSQL
docker exec metabase-postgres pg_dump -U metabase metabase > $BACKUP_DIR/metabase_$DATE.sql
# Бэкап volume с данными
docker run --rm -v metabase_metabase_data:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/metabase_data_$DATE.tar.gz -C /data .
# Удаляем старые бэкапы (старше 7 дней)
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
Альтернативы и сравнение
Metabase не единственное решение на рынке. Вот сравнение с основными конкурентами:
- Grafana — лучше для мониторинга и метрик в реальном времени, но хуже для бизнес-аналитики
- Apache Superset — больше возможностей кастомизации, но сложнее в настройке
- Tableau Public — мощнее, но дорого и требует лицензии
- PowerBI — хорошая интеграция с Microsoft экосистемой, но опять же платно
Статистика показывает, что 78% разработчиков выбирают Metabase именно за простоту развёртывания и бесплатность.
Интересные фишки и нестандартное использование
Несколько креативных способов использования Metabase:
- Мониторинг логов — подключаем к Elasticsearch и анализируем логи приложений
- IoT дашборды — визуализируем данные с датчиков через InfluxDB
- Финансовая аналитика — подключаем к 1С через REST API
- A/B тестирование — анализируем результаты экспериментов
Для автоматизации можно использовать Metabase API:
# Получаем токен
curl -X POST \
http://localhost:3000/api/session \
-H "Content-Type: application/json" \
-d '{"username": "admin@example.com", "password": "password"}'
# Создаём дашборд через API
curl -X POST \
http://localhost:3000/api/dashboard \
-H "Content-Type: application/json" \
-H "X-Metabase-Session: YOUR_SESSION_TOKEN" \
-d '{"name": "Auto Dashboard", "description": "Created via API"}'
Мониторинг и отладка
Полезные команды для мониторинга:
# Смотрим логи
docker compose logs -f metabase
# Проверяем использование ресурсов
docker stats metabase-app
# Подключаемся к контейнеру
docker exec -it metabase-app bash
# Проверяем подключения к базе
docker exec -it metabase-postgres psql -U metabase -d metabase -c "SELECT * FROM core_user;"
Для продакшена рекомендую добавить healthcheck:
# В docker-compose.yml для сервиса metabase
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Оптимизация производительности
Для высоконагруженных инсталляций добавляем эти переменные в docker-compose.yml:
environment:
MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase
MB_DB_PORT: 5432
MB_DB_USER: metabase
MB_DB_PASS: your-strong-password
MB_DB_HOST: postgres
MB_JAVA_TIMEZONE: Europe/Moscow
JAVA_OPTS: "-Xmx2g -Xms1g"
MB_JETTY_MAXTHREADS: 200
MB_DB_CONNECTION_TIMEOUT_MS: 10000
MB_QUERY_TIMEOUT_MS: 300000
MB_ENABLE_QUERY_CACHING: true
Заключение и рекомендации
Metabase в Docker на Ubuntu 24 — это отличное решение для быстрого развёртывания системы аналитики. Основные рекомендации:
- Для тестирования используйте встроенную H2 базу
- Для продакшена обязательно PostgreSQL + Nginx
- Не забывайте про бэкапы и мониторинг
- Выделяйте минимум 2GB RAM для стабильной работы
- Используйте docker-compose для управления зависимостями
Где использовать: стартапы для быстрой настройки аналитики, средний бизнес для замены Excel-отчётов, разработчики для мониторинга метрик приложений. Не подходит для enterprise с жёсткими требованиями к безопасности — там лучше смотреть в сторону коммерческих решений.
Полезные ссылки:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.