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

Используя Docker вы установите Metabase на сервер Ubuntu 22.04.

Убедитесь, что все обновлено.

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
Proceed with operation (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. Чтобы установить последнюю версию, сначала импортируйте ключ 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

Создайте каталог для 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:
файл: db_user.txt

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

Приведенный выше файл Docker compose берет последнюю версию образа 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. Заполните домен вашей 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 минуты назад Up 2 минуты (healthy) 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp metabase
ee2d03dc3a00 postgres:latest "docker-entrypoint.s..." 2 минуты назад Up 2 минуты (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 – 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 systemd1: Starting nginx – high performance web server…
Jan 05 07:21:46 metabase systemd1: 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

Установите 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 когда появится запрос.

Создайте и откройте файл /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 ---
  # получение 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, когда появится запрос.

Проверьте синтаксис файла конфигурации 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 – Установка и доступ к Metabase

Откройте URL https://metabase.example.com для запуска мастера установки Metabase.

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

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

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

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

Как установить Metabase на Ubuntu 22.04 с помощью Docker
Далее вам будет предложено добавить данные в метабазу для изучения. Вы можете добавить данные сейчас или сделать это позже.

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

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

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

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

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

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

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

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

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

docker exec -t postgres pg_dumpall -c -U navjot > dump_"date %m-%Y"_"%H_%M_%S".sql

Замените navjot на имя пользователя вашей базы данных, а postgres на имя вашего контейнера докера для PostgreSQL.

Для восстановления базы данных используйте следующую команду.

cat dump_*.sql | docker exec -i your-db-container psql -U navjot

Шаг 10 – Обновление

Обновление Metabase требует нескольких шагов. Первым шагом будет создание резервной копии базы данных Metabase с помощью команды из шага 9.

Затем переключитесь на каталог.

cd /opt/metabase

Потяните последние образы контейнеров для Mastodon.

docker compose pull metabase/metabase:latest

Внесите любые изменения в docker-compose.yml, если хотите.

Перезапустите контейнеры Mastodon.

docker compose up -d

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

Заключение

На этом мы завершаем наше руководство по установке Metabase на сервер Ubuntu 22.04. Если у вас есть вопросы, задавайте их в комментариях ниже.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.howtoforge.com

Комментарии (0)