Установка · 9 min read · Dec 20, 2025

Как установить Metabase на Ubuntu 22.04 с помощью Docker

Metabase — это основанный на Java инструмент бизнес-аналитики (BI) с открытым исходным кодом. Он подключается к ряду баз данных и использует конструктор вопросов, чтобы скрыть сложность больших SQL-запросов, позволяя вам визуализировать данные клиентов в читаемом формате и анализировать их. Вы можете задавать вопросы о своих данных или встраивать их в свое приложение, чтобы позволить вашим клиентам самостоятельно исследовать свои данные. Он может генерировать панели мониторинга и визуализации, а также отправлять уведомления в ваш канал Slack. Он может подключаться к многим платформам баз данных и источникам данных, включая MySQL, Google Analytics, MongoDB, PostgreSQL, ClickHouse, Amazon Athena, Amazon Redshift и многие другие.

С помощью Docker вы научитесь устанавливать Metabase на сервер Ubuntu 22.04.

Предварительные требования

  • Сервер с установленной Ubuntu 22.04 с минимум 2 ядрами процессора и 2 ГБ памяти. Вам нужно будет обновить сервер в соответствии с требованиями.
  • Пользователь без прав root с правами sudo.
  • Полностью квалифицированное доменное имя (FQDN), указывающее на ваш сервер. Для наших целей мы будем использовать metabase.example.com в качестве доменного имени.
  • Metabase отправляет уведомления по электронной почте пользователям. Мы рекомендуем использовать сторонний сервис транзакционной почты, такой как Mailgun, Sendgrid, Amazon SES или Sparkpost. Инструкции в руководстве будут использовать Amazon SES.
  • Убедитесь, что все обновлено. $ sudo apt update
  • Установите основные утилиты. Некоторые из них могут быть уже установлены. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Шаг 1 - Настройка брандмауэра

Первый шаг — настроить брандмауэр. Ubuntu по умолчанию поставляется с ufw (Uncomplicated Firewall).

Проверьте, работает ли брандмауэр.

$ sudo ufw status

Вы должны получить следующий вывод.

Status: inactive

Разрешите порт SSH, чтобы брандмауэр не разорвал текущее соединение при его включении.

$ sudo ufw allow OpenSSH

Также разрешите порты HTTP и HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Включите брандмауэр

$ sudo ufw enable
Команда может нарушить существующие ssh-соединения. Продолжить операцию (y|n)? y
Брандмауэр активен и включен при запуске системы

Проверьте статус брандмауэра снова.

$ sudo ufw status

Вы должны увидеть аналогичный вывод.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Шаг 2 - Установка Docker и Docker Compose

Ubuntu 22.04 поставляется со старой версией Docker. Чтобы установить последнюю версию, сначала импортируйте GPG-ключ Docker.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Создайте файл репозитория Docker.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите список системных репозиториев.

$ sudo apt update

Установите последнюю версию Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Проверьте, что он работает.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-01-05 05:55:23 UTC; 2min 16s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2116 (dockerd)
      Tasks: 8
     Memory: 22.5M
        CPU: 252ms
     CGroup: /system.slice/docker.service
             ??2116 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

По умолчанию Docker требует прав root. Если вы хотите избежать использования sudo каждый раз, когда вы выполняете команду docker, добавьте свое имя пользователя в группу docker.

$ sudo usermod -aG docker $(whoami)

Вам нужно будет выйти из сервера и войти снова как тот же пользователь, чтобы включить это изменение, или использовать следующую команду.

$ su - ${USER}

Подтвердите, что ваш пользователь добавлен в группу Docker.

$ groups
navjot wheel docker

Шаг 3 - Создание файла Docker Compose для Metabase

Создайте каталог для Metabase.

$ mkdir ~/metabase

Создайте и откройте файл Docker compose для редактирования.

$ nano docker-compose.yml

Вставьте следующий код в него.

version: '3.9'
services:
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    hostname: metabase
    volumes:
    - /dev/urandom:/dev/random:ro
    ports:
      - 3000:3000
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabase
      MB_DB_PORT: 5432
      MB_DB_USER_FILE: /run/secrets/db_user
      MB_DB_PASS_FILE: /run/secrets/db_password
      MB_DB_HOST: postgres
    env_file:
      - metabase.env
    healthcheck:
      test: curl --fail -I http://localhost:3000/api/health || exit 1
      interval: 15s
      retries: 5
      start_period: 10s
      timeout: 5s
    networks:
      - metanet1
    depends_on:
      - postgres
    secrets:
      - db_password
      - db_user
  postgres:
    image: postgres:latest
    container_name: postgres
    hostname: postgres
    environment:
      POSTGRES_USER_FILE: /run/secrets/db_user
      POSTGRES_DB: metabase
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    networks:
      - metanet1
    secrets:
      - db_password
      - db_user
networks:
  metanet1:
    driver: bridge
secrets:
   db_password:
     file: db_password.txt
   db_user:
     file: db_user.txt

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Вышеуказанный файл Docker compose загружает последнюю версию Docker-образа Metabase и открывает приложение через порт 3000. Он подключен к образу PostgreSQL. Имя пользователя и пароль базы данных PostgreSQL хранятся в файлах db_user.txt и db_password.txt соответственно.

Создайте и откройте файл db_user.txt для редактирования.

$ nano db_user.txt

Вставьте свое имя пользователя в него и сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Создайте и откройте файл db_password.txt для редактирования.

$ nano db_password.txt

Вставьте свой пароль в него и сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Шаг 4 - Настройка файлов окружения и запуск Metabase

Сгенерируйте ключ шифрования, используя следующую команду.

$ openssl rand -base64 32
aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=

Скопируйте ключ для дальнейшего использования.

Создайте и откройте файл metabase.env для редактирования.

$ nano metabase.env

Вставьте следующий код в него. Вставьте сгенерированный вами секретный ключ против переменной MB_ENCRYPTION_SECRET_KEY. Заполните ваш домен Metabase, включая протокол https. Заполните свои данные SMTP, используя любого провайдера, которого вы используете. Мы используем Amazon SES. Переменная MB_PASSWORD_COMPLEXITY установлена на strong, что означает, что ваш пароль Metabase должен содержать минимум 8 символов, 2 строчные буквы, 2 заглавные буквы, 1 цифру и 1 специальный символ.

MB_SITE_URL=https://metabase.example.com
MB_SITE_NAME="Howtoforge"

[email protected]
[email protected]
MB_EMAIL_FROM_NAME=Howtoforge
MB_EMAIL_SMTP_HOST=email-smtp.us-west-2.amazonaws.com
MB_EMAIL_SMTP_USERNAME=AWS_USERID
MB_EMAIL_SMTP_PASSWORD=AWS_KEY
MB_EMAIL_SMTP_PORT=587
MB_EMAIL_SMTP_SECURITY=starttls

MB_ENCRYPTION_SECRET_KEY=aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
MB_ANON_TRACKING_ENABLED=false
MB_APPLICATION_NAME=Howtoforge Metabase
MB_PASSWORD_COMPLEXITY=strong

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

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

$ docker compose up -d

Вы можете следить за состоянием контейнеров, используя следующую команду.

$ watch docker ps

Вы получите аналогичный вывод. Подождите, пока статус обоих контейнеров не станет здоровым, а затем нажмите Ctrl + C, чтобы выйти из экрана.

CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS                   PORTS                                       NAMES
15698ae2de6a   metabase/metabase:latest   "/app/run_metabase.sh"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   metabase
ee2d03dc3a00   postgres:latest            "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes (healthy)   5432/tcp                                    postgres

Шаг 5 - Установка Nginx

Ubuntu 22.04 поставляется со старой версией Nginx. Чтобы установить последнюю версию, вам нужно загрузить официальный репозиторий Nginx.

Импортируйте ключ подписи Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Добавьте репозиторий для стабильной версии Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Обновите системные репозитории.

$ sudo apt update

Установите Nginx.

$ sudo apt install nginx

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

$ nginx -v
nginx version: nginx/1.22.1

Запустите сервер Nginx.

$ sudo systemctl start nginx

Проверьте статус сервера.

$ sudo systemctl status nginx
? nginx.service - nginx - высокопроизводительный веб-сервер
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-01-05 07:21:46 UTC; 1s ago
       Docs: https://nginx.org/en/docs/
    Process: 13197 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 13198 (nginx)
      Tasks: 3 (limit: 2237)
     Memory: 2.6M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??13198 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??13199 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??13200 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Jan 05 07:21:46 metabase systemd[1]: Starting nginx - высокопроизводительный веб-сервер...
Jan 05 07:21:46 metabase systemd[1]: Started nginx - высокопроизводительный веб-сервер.

Шаг 6 - Установка SSL

Нам нужно установить Certbot для генерации SSL-сертификата. Вы можете установить Certbot, используя репозиторий Ubuntu, или загрузить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.

Ubuntu 22.04 поставляется с установленным Snapd по умолчанию. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена. Убедитесь, что ваша версия Snapd обновлена.

$ sudo snap install core
$ sudo snap refresh core

Установите Certbot.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команда Certbot работает, создав символическую ссылку на каталог /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Выполните следующую команду для генерации SSL-сертификата.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d metabase.example.com

Вышеуказанная команда загрузит сертификат в каталог /etc/letsencrypt/live/metabase.example.com на вашем сервере.

Сгенерируйте сертификат группы Диффи-Хеллмана.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Проведите пробный запуск процесса, чтобы проверить, работает ли автоматическое обновление SSL.

$ sudo certbot renew --dry-run

Если вы не видите ошибок, вы готовы. Ваш сертификат будет автоматически обновляться.

Шаг 7 - Настройка Nginx

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Создайте и откройте файл /etc/nginx/conf.d/metabase.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/metabase.conf

Вставьте следующий код в него.

server {
  # Перенаправить любые http-запросы на https
  listen         80;
  listen         [::]:80;
  server_name    metabase.example.com;
  return 301     https://$host$request_uri;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               metabase.example.com;

  access_log                /var/log/nginx/metabase.access.log;
  error_log                 /var/log/nginx/metabase.error.log;

  # Конфигурация TLS
  ssl_certificate           /etc/letsencrypt/live/metabase.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/metabase.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/metabase.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # OCSP Stapling ---
  # получать OCSP-записи из URL в ssl_certificate и кэшировать их
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header        X-Forwarded-Host $http_host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass              http://127.0.0.1:3000;
  }
}

После завершения сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Проверьте синтаксис конфигурационного файла Nginx.

$ sudo nginx -t
nginx: конфигурационный файл /etc/nginx/nginx.conf синтаксически верен
nginx: тест конфигурационного файла /etc/nginx/nginx.conf успешен

Перезапустите сервер Nginx.

$ sudo systemctl restart nginx

Шаг 8 - Установка и доступ к Metabase

Откройте URL https://metabase.example.com, чтобы запустить мастер настройки Metabase.

Мастер настройки Metabase

Нажмите кнопку Давайте начнем, чтобы перейти к следующему шагу. На следующей странице будет перечислено несколько шагов. Выберите свой язык и нажмите Далее, чтобы продолжить.

Выбор языка Metabase

Введите данные администратора Metabase.

Данные администратора Metabase

Далее вас попросят добавить данные в Metabase для исследования. Вы можете добавить данные сейчас или сделать это позже.

Добавить данные Metabase

Нажмите Я добавлю свои данные позже, чтобы продолжить.

Предпочтения данных Metabase

Снимите отметку с Разрешить Metabase анонимно собирать события использования и нажмите кнопку Завершить, чтобы завершить процесс.

Настройка Metabase завершена

Нажмите кнопку Перейти в Metabase, чтобы открыть панель управления Metabase.

Панель управления Metabase

Теперь вы можете начать использовать Metabase.

Шаг 9 - Резервное копирование Metabase

Если вы хотите создать резервную копию базы данных Metabase, используйте следующую команду.

$ docker exec -t postgres pg_dumpall -c -U navjot > dump_`date +%d-%m-%Y
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.