Установка Metabase на Ubuntu 20.04 с Nginx и Let's Encrypt

О чём эта инструкция
Этот пошаговый гид показывает, как развернуть Metabase — простую BI-платформу с открытым исходным кодом — на сервере Ubuntu 20.04, настроить MariaDB как мета‑базу, организовать запуск через systemd, защитить доступ HTTPS с помощью Certbot и Nginx, а также какие меры принять для безопасности и поддержки.
Важно: Metabase написан на Java и по умолчанию слушает порт 3000. В продакшене рекомендуют ставить обратный прокси (Nginx) перед приложением и хранить метаданные в отдельной базе данных (например, MariaDB или PostgreSQL).
Требования
- Сервер с Ubuntu 20.04 (доступ по SSH).
- Домен, указывающий на IP сервера (A-запись/AAAA).
- Пароль root или учётная запись с sudo.
- Открытые порты 22 (SSH), 80 и 443 (HTTP/HTTPS) в брандмауэре.
Короткая терминология
- Metabase: веб-приложение BI для создания дашбордов.
- Certbot: клиент для получения сертификатов Let’s Encrypt.
- systemd: менеджер сервисов в Ubuntu.
1. Установка Java
Metabase — Java-приложение, поэтому требуется OpenJDK 11 (или совместимая версия). На сервере выполните:
apt-get update
apt-get install openjdk-11-jdk openjdk-11-jre -yПроверка версии:
java -versionОжидаемый результат — строка с openjdk 11. Если версия отличается, убедитесь, что она совместима с конкретной версией Metabase, которую вы скачиваете.
2. Установка и настройка MariaDB (как мета‑хранилища Metabase)
Metabase может хранить свою мета‑информацию (пользователи, дашборды) в встроенной H2 базе, но для продакшена рекомендуется использовать MariaDB, MySQL или PostgreSQL.
Установка MariaDB:
apt-get install mariadb-server -yБыстрая настройка безопасности (рекомендуется):
mysql_secure_installationВойдите в оболочку MariaDB и создайте БД и пользователя для Metabase (замените “your_secure_password” на надёжный пароль):
mysql -u root -p
CREATE DATABASE metabase;
GRANT ALL PRIVILEGES ON metabase.* TO 'metabase'@'localhost' IDENTIFIED BY 'your_secure_password';
FLUSH PRIVILEGES;
EXIT;Важно: храните пароль в безопасном месте (секретном хранилище), не оставляйте в открытом виде в скриптах.
3. Скачивание Metabase и подготовка пользователя
Создайте каталог и скачайте JAR-файл Metabase. В примере используется релиз v0.36.2 — на момент чтения проверяйте актуальную версию на downloads.metabase.com:
mkdir -p /opt/metabase
cd /opt/metabase
wget https://downloads.metabase.com/v0.36.2/metabase.jarСоздайте системную группу и пользователя, под которыми будет работать приложение:
addgroup --quiet --system metabase
adduser --quiet --system --ingroup metabase --no-create-home --disabled-password metabaseУстановите правильные владельца и права:
chown -R metabase:metabase /opt/metabase
chmod -R 755 /opt/metabase4. Создание systemd-сервиса для Metabase
Создайте файл /etc/systemd/system/metabase.service:
[Unit]
Description=Metabase server
After=network.target
[Service]
WorkingDirectory=/opt/metabase/
ExecStart=/usr/bin/java -jar /opt/metabase/metabase.jar
User=metabase
Type=simple
Restart=on-failure
RestartSec=10
Environment=MB_DB_TYPE=mysql
Environment=MB_DB_DBNAME=metabase
Environment=MB_DB_PORT=3306
Environment=MB_DB_USER=metabase
Environment=MB_DB_PASS=your_secure_password
Environment=MB_DB_HOST=127.0.0.1
[Install]
WantedBy=multi-user.targetПояснение: переменные Environment задают подключение Metabase к MariaDB. В продакшене разумнее хранить секреты в защищённом хранилище или использовать системные механизмы (systemd секреты, vault и т.п.).
Перезагрузите демона systemd и запустите сервис:
systemctl daemon-reload
systemctl start metabase
systemctl enable metabase
systemctl status metabaseМетabase по умолчанию будет слушать порт 3000. Проверка порта:
ss -tunelp | grep 3000Если все в порядке — сервис должен быть active (running).
5. Настройка Nginx как обратного прокси
Установка Nginx:
apt-get install nginx -yСоздайте файл конфигурации виртуального хоста /etc/nginx/sites-available/metabase.conf. В этом примере показана корректная и безопасная конфигурация с проксированием WebSocket и заголовками X-Forwarded:
upstream metabase {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name metabase.linuxbuz.com;
access_log /var/log/nginx/metabase.linuxbuz.com-access.log;
error_log /var/log/nginx/metabase.linuxbuz.com-error.log;
location / {
proxy_pass http://metabase/;
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_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}Замечания:
- Исправлены заголовки X-Forwarded-For и X-Forwarded-Proto (в оригинале были опечатки).
- $host и $scheme используются вместо устаревших $http_host/$proxy_set_header X-Forward-Proto.
Активируем конфигурацию и проверим Nginx:
ln -s /etc/nginx/sites-available/metabase.conf /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginxПроверьте, что Nginx успешно проксирует запросы на порт 3000.
6. Получение и настройка SSL через Let’s Encrypt (Certbot)
Установите Certbot для интеграции с Nginx:
apt-get install python3-certbot-nginx -yЗапустите certbot для домена:
certbot --nginx -d metabase.linuxbuz.comВо время процесса вас попросят указать email и согласиться с условиями. Certbot автоматически обновит конфигурацию Nginx, если вы выберете перенаправление с HTTP на HTTPS.
Рекомендации по безопасности и резервному копированию:
- Скопируйте /etc/letsencrypt в безопасное место или создавайте резервные копии конфигурации сервера.
- Регулярно тестируйте автоматическое обновление сертификатов командой:
certbot renew --dry-runЕсли всё прошло успешно, сайт станет доступен по HTTPS.
7. Доступ к веб‑интерфейсу Metabase
Откройте в браузере https://metabase.linuxbuz.com — вы увидите экран приветствия. Примеры экранов (альтернативные изображения с примерами интерфейса):

Нажмите “Let’s get started” и следуйте шагам: выбор языка, создание администратора, подключение внешних баз данных (через JDBC), настройка предпочтений об отправке анонимной статистики.







Практические рекомендации и варианты (дополнительно)
Альтернативные подходы
- Docker / Docker Compose: разворачивать Metabase в контейнере проще для изоляции и обновлений. Официальный образ: metabase/metabase.
- Использовать PostgreSQL вместо MariaDB: PostgreSQL часто предпочтительнее для продакшена и хорошо поддерживается Metabase.
- Хостинг-managed: можно использовать хостинг Metabase Cloud или управляемые контейнерные сервисы.
Когда этот метод может не подойти
- Если у вас многопользовательская высоконагруженная среда, один JAR-процесс может быть ограничением — рассмотрите кластеризацию, балансировку и репликацию баз данных.
- Для критичных сред рекомендуется использовать загрузку JVM через systemd с ограничениями памяти и мониторингом.
Ментальные модели (правило «Reverse Proxy + App + DB»)
- Обратный прокси (Nginx): отвечает за SSL, маршрутизацию и заголовки.
- Приложение (Metabase): выполняет BI-логику, слушает порт 3000.
- База данных (MariaDB/Postgres): хранит метаданные и служит как источник данных.
Понимание этих трёх уровней помогает быстрее диагностировать проблемы.
Чеклист по безопасности (администратору)
- Запустить mysql_secure_installation и убрать анонимных пользователей.
- Хранить пароли в менеджере секретов (Vault, AWS Secrets Manager и т.д.).
- Настроить UFW: разрешить 22,80,443; закрыть 3000 от внешнего доступа:
ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw enable- Регулярно выполнять certbot renew –dry-run и мониторить cron.
- Бэкапить /etc/letsencrypt и базу metabase.
- Ограничить доступ к метаданным БД по IP или сокетам.
Роли и обязанности (кратко)
- Системный администратор: установка ОС, брандмауэр, Nginx, Certbot, бэкапы.
- DBA: настройка и резервное копирование MariaDB/Postgres, мониторинг производительности.
- BI‑аналитик: настройка источников данных, создание карточек/дашбордов.
- Безопасность: ревью SSL, управление секретами и контроль доступа.
Обновления Metabase — SOP (минимальный процесс)
- Сделать полный бэкап базы metabase и файлов конфигурации.
- Протестировать обновление на staging (копия данных или тестовые данные).
- Остановить systemd-сервис: systemctl stop metabase.
- Заменить metabase.jar на новую версию в /opt/metabase.
- Запустить service и проверить логи: journalctl -u metabase -f.
- Тестировать функциональность в веб-интерфейсе.
Критерии приёмки
- Metabase доступен по HTTPS и сертификат валиден.
- Веб-интерфейс загружается и можно войти под админом.
- Источники данных подключаются и запросы возвращают ожидаемые данные.
- Автоматическое обновление сертификата проходит успешно (dry-run).
Типичные ошибки и как их исправить
- Проблема: Metabase не стартует. Действия: посмотреть systemctl status metabase и journalctl -u metabase -b; проверить права на /opt/metabase; убедиться, что Java установлена.
- Проблема: Nginx возвращает 502. Действия: проверить, слушает ли Metabase 127.0.0.1:3000, проверить лог /var/log/nginx/* и журнал Metabase.
- Проблема: Certbot не может выполнить challenge. Действия: убедиться, что DNS указывает на сервер, порт 80 открыт и Nginx отвечает на запросы.
Резервное копирование и восстановление
- Бэкап базы metabase:
mysqldump -u root -p metabase > metabase-backup.sql- Восстановление:
mysql -u root -p metabase < metabase-backup.sql- Бэкап сертификатов:
cp -a /etc/letsencrypt /root/letsencrypt-backupКороткий словарь (1 строка)
- systemd: менеджер сервисов Linux; Certbot: клиент Let’s Encrypt; UFW: упрощённый интерфейс брандмауэра.
Заключение
Вы успешно развернули Metabase на Ubuntu 20.04, настроили MariaDB, systemd-сервис, Nginx как обратный прокси и защитили доступ сертификатом Let’s Encrypt. В продакшене уделите внимание секретам, мониторингу, бэкапам и тестированию обновлений.
Важно: всегда тестируйте значимые изменения на staging перед применением в продакшене.
Короткое резюме действий:
- Установили Java, MariaDB.
- Скачали Metabase, настроили systemd.
- Настроили Nginx и получили SSL через Certbot.
- Дали рекомендации по безопасности и обновлениям.
Примечание: если нужно руководство по развёртыванию через Docker Compose или пример конфигурации для PostgreSQL, напишите, и я подготовлю отдельный сценарий.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента