Как установить метабазу на Ubuntu 22.04 с помощью Docker
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker и Docker Compose
- Шаг 3. Создание файла Docker Compose для метабазы
- Шаг 4. Настройка файлов среды и запуск метабазы
- Шаг 5. Установите Nginx
- Шаг 6. Установите SSL
- Шаг 7. Настройка Nginx
- Шаг 8. Установка метабазы и доступ к ней
- Шаг 9. Резервное копирование метабазы
- Шаг 10. Обновление метабазы
- Заключение
Metabase — это инструмент бизнес-аналитики (BI) с открытым исходным кодом на основе Java. Он подключается к ряду баз данных и использует построитель вопросов, чтобы скрыть сложность больших SQL-запросов, которые позволяют визуализировать данные о клиентах в удобочитаемом формате и анализировать их. Вы можете задавать вопросы о своих данных или встраивать их в свое приложение, чтобы ваши клиенты могли самостоятельно исследовать свои данные. Он может создавать информационные панели и визуализации и отправлять оповещения на ваш канал Slack. Он может подключаться ко многим платформам баз данных и источникам данных, включая MySQL, Google Analytics, MongoDB, PostgreSQL, ClickHouse, Amazon Athena, Amazon Redshift и многие другие.
Используя Docker, вы узнаете, как установить Metabase на сервер Ubuntu 22.04.
Предпосылки
-
A server running Ubuntu 22.04 with a minimum of 2 CPU cores and 2GB of memory. You will need to upgrade the server as per requirements.
-
A non-root user with sudo privileges.
-
A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use
metabase.example.com
as the domain name. -
Metabase sends email notifications to users. We recommend you use a 3rd party Transactional mail service like Mailgun, Sendgrid, Amazon SES, or Sparkpost. The instructions in the guide will be using Amazon SES.
-
Make sure everything is updated.
$ sudo apt update
-
Install basic utility packages. Some of them may already be installed.
$ 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 (простой брандмауэр).
Проверьте, работает ли брандмауэр.
$ sudo ufw status
Вы должны получить следующий вывод.
Status: inactive
Разрешить порт SSH, чтобы брандмауэр не разорвал текущее соединение при его включении.
$ sudo ufw allow OpenSSH
Разрешить также порты HTTP и HTTPS.
$ sudo ufw allow http
$ sudo ufw allow https
Включить брандмауэр
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Еще раз проверьте состояние брандмауэра.
$ 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. Чтобы установить последнюю версию, сначала импортируйте ключ Docker GPG.
$ 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 для метабазы
Создайте каталог для метабазы.
$ mkdir ~/metabase
Создайте и откройте файл компоновки Docker для редактирования.
$ 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 получает последнюю версию образа Metabase Docker и предоставляет приложение через порт 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. Настройте файлы среды и запустите метабазу
Сгенерируйте ключ шифрования с помощью следующей команды.
$ openssl rand -base64 32
aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
Скопируйте ключ для последующего использования.
Создайте и откройте файл metabase.env
для редактирования.
$ nano metabase.env
Вставьте в него следующий код. Вставьте сгенерированный секретный ключ в переменную MB_ENCRYPTION_SECRET_KEY
. Заполните свой домен метабазы, включая протокол https. Заполните свои данные SMTP, используя любого провайдера, которого вы используете. Мы используем Amazon SES. Для переменной MB_PASSWORD_COMPLEXITY
установлено значение strong, что означает, что ваш пароль к метабазе должен иметь длину не менее 8 символов, включая 2 строчных, 2 прописных, 1 цифру и 1 специальный символ.
MB_SITE_URL=https://metabase.example.com
MB_SITE_NAME="Howtoforge"
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.
Импортировать ключ подписи Nginxs.
$ 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
Установите Нгинкс.
$ sudo apt install nginx
Проверьте установку.
$ nginx -v
nginx version: nginx/1.22.1
Запустите сервер Nginx.
$ sudo systemctl start nginx
Проверьте состояние сервера.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
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 - high performance web server...
Jan 05 07:21:46 metabase systemd[1]: Started nginx - high performance web server.
Шаг 6 — Установите SSL
Нам нужно установить Certbot для создания SSL-сертификата. Вы можете либо установить Certbot, используя репозиторий Ubuntu, либо получить последнюю версию с помощью инструмента Snapd. Мы будем использовать версию Snapd.
Ubuntu 22.04 поставляется с установленным по умолчанию Snapd. Выполните следующие команды, чтобы убедиться, что ваша версия Snapd обновлена. Убедитесь, что ваша версия Snapd обновлена.
$ sudo snap install core
$ sudo snap refresh core
Установите Сертбот.
$ 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 -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 {
# Redirect any http requests to 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 configuration
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 ---
# fetch OCSP records from URL in ssl_certificate and cache them
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: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите сервер Nginx.
$ sudo systemctl restart nginx
Шаг 8 — Установка и доступ к метабазе
Откройте URL-адрес https://metabase.example.com
, чтобы запустить мастер настройки метабазы.
Нажмите кнопку «Начать», чтобы перейти к следующему шагу. На следующей странице будут перечислены несколько шагов. Выберите свой язык и нажмите «Далее», чтобы продолжить.
Введите данные администратора метабазы.
Далее вам будет предложено добавить данные в метабазу для изучения. Вы можете добавить данные либо сейчас, либо сделать это позже.
Нажмите «Я добавлю свои данные позже», чтобы продолжить.
Снимите флажок Разрешить метабазе анонимно собирать события использования и нажмите кнопку Готово, чтобы завершить процесс.
Нажмите кнопку Перейти к метабазе, чтобы запустить панель управления метабазой.
Вы можете начать использовать Metabase прямо сейчас.
Шаг 9. Резервное копирование метабазы
Если вы хотите создать резервную копию базы данных метабазы, используйте следующую команду.
$ docker exec -t postgres pg_dumpall -c -U navjot > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
Замените navjot
на имя пользователя вашей базы данных и postgres
на имя вашего контейнера Docker для PostgreSQL.
Чтобы восстановить базу данных, используйте следующую команду.
$ cat dump_*.sql | docker exec -i your-db-container psql -U navjot
Шаг 10 — Обновление метабазы
Обновление метабазы требует нескольких шагов. Первым шагом является резервное копирование базы данных метабазы с помощью команды из шага 9.
Затем переключитесь в каталог.
$ cd /opt/metabase
Загрузите последние образы контейнеров для Mastodon.
$ docker compose pull metabase/metabase:latest
Внесите любые изменения в docker-compose.yml
, если хотите.
Перезапустите контейнеры Mastodon.
$ docker compose up -d
Приведенные выше инструкции являются общими инструкциями по обновлению. Всегда проверяйте страницу выпусков Mastodon на GitHub, чтобы найти какие-либо конкретные задачи обновления и команды между версиями, чтобы убедиться, что все идет гладко.
Заключение
На этом мы завершаем наше руководство по установке Metabase на сервер Ubuntu 22.04. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.