Guides
Разворачиваем Metabase с поддержкой ClickHouse! Ю-Ху!
Дима Родин
Ночной продавец

Замечательный инструмент Metabase, который не имеет поддержки ClickHouse, которая на самом деле есть. Плагин давно написан и работает. Я сделал свою сборку инструмента, куда включил плагин, который не включают в официальной сборке. Детали тут https://github.com/metabase/metabase/pull/9469. Пользуйтесь на здоровье! :)

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

Установка Metabase

Имеется уже готовая сборка Metabase с поддержкой ClickHouse для Rockstat. Требуется расширить конфигурацию системы установки (ansible), чтобы она внесла образ Metabase во все необходимые блоки конфигурации.

1. Логинимся на сервер через SSH

У кого Google Cloud могут сделать это прямо через браузер кликнув SSH в операциях с сервером (внимание, вы заходите под своим пользователем, чтобы стать root, введите sudo -i).

Другим потребуется зайти на сервер используя любимый ssh клиент

ssh root@rstat.yourdomain.ru

Вообще, от root ходить плохо, но вы ведь не системные администраторы :) Вы должны увидеть приглашение:

root@rstat:~#

1.2. Обновляем Rockstat

... Документация https://rock.st

2. Добавляем группу хостов и параметры этой группы

Первым делом переходим в директорию с системой установки и смотрим как называется наш сервер в файле с инвентарем (серверы)

cd /srv/platform/bootstrap
cat inventory/private

Получаем

[private]
rstat ansible_host=test.rstat.org

[rockstat]
rstat

Файл inventory/private сгенерировала система установки, нам требуется взять оттуда лишь имя, которым является первое слово после [private] т.е. rstat. Записываем.

В Ansible все хосты подразделяются на группы. Создаем группу priv_metabase. Открываем редактор.

nano inventory/priv_metabase

Вставляем содержимое, вместо rstat укажите имя вашего хоста, которое запоминали ранее.

[priv_metabase]

rstat

Для сохранения используем Ctrl+O затем выходим Сtrl+X. Дело сделано, привязали хост к новой группе, теперь надо внести дополнительные параметры. Открываем редактор и вносим дополнительную конфигурацию

nano group_vars/priv_metabase.yml

Вставляем содержимое

# Дополниительный поддомен, который будет автоматически прописан везде, где необходимо
_subdomains_extra: ['metabase']

# Номера портов, внутренний (в контейнере) и на внутреннем интерфейсе хостовой машины, куда уже будет перекидывать `nginx`
_ports_extra:
  metabase: [10080, 3000]

# Описываем дополнительный источник образа Metabase. Тут указывается расположение образа в Docker Hub
_images_extra:
  metabase: madiedinro/metabase

# Nginx upstream,  который будет прокидывать запросы с metabase.* в контейнер. Обратите внимание, тут указывается порт, который мы настраивали ранее.
_nginx_upstreams_extra:
  - 'upstream umetabase { server {{if_inner}}:{{ports.metabase.0}}; }'

# Ну и сам виртуальный сайт в nginx. Он делается на основе готового шаблона, используемого для всех внутренних доменов. Если интересно, поищите в проекте `_nginx_proxy_vh`
_nginx_sites_extra:
  metabase: "{{_nginx_proxy_vh|flatten|map('replace','{sd}','metabase')|list}}"

Остается только добавить задачу, которая запустит контейнер. Для этого в структуре предусмотрены специальные custom_ файлы, которые исключены из автообновления и системы контроля версий.

nano tasks/custom_metabase.yml

Вставляем содержимое

# Описание модуля Ansible для запуска контейнера докера. Большинство значений берутся из основного конфига.

- name: Starting container for metabase
  docker_container:
    name: metabase
    hostname: metabase
    image: "{{images.metabase}}"
    labels: "{{docker_band_lbls}}"
    networks: [ { name: "{{docker_net_name}}" } ]
    etc_hosts: "{{etc_hosts}}"
    restart_policy: "{{_restart_policy}}"
    restart: yes
    pull: yes
    recreate: yes
    memory: "2000m"
    ports: ["{{if_inner}}:{{ports.metabase.0}}:{{ports.metabase.1}}"]
  tags: ['never', 'metabase']

Еще один

nano tasks/custom.yml

Вставляем содержимое

- import_tasks: custom_metabase.yml

Конфигурация закончена, запускаем установшик в ручном режиме.

ansible-playbook --connection=local platform.yml --tags=metabase

Скачается образ, запустится контейнер.

Остается только применить изменения к конфигурации Rockstat, чтобы до Metabase можно было добраться по HTTP; и переполучить SSL сертификат.

Открываем меню установщика

rockstat

еще есть прием

rock<tab> # -> rockstat

Выибираем пункт 20 Apply admin password to webserver, а затем насильно переполучаем SSL серитификат 31 Request SSL certificate with force option

Это Greate Success! вход доступен на https://metabase.вашдоменрстат

In [ ]:

Будьте в курсе
Канал с оповещениями
Новости и оповещения в канале @digitalgods, дополнительная информация по руководствам в канале @kissmystat
Чат для вопросов
Чат для практических вопросов в т. ч. из руководств TG @kissmystats. Отдельный чат для мероприятий @digitalgodhub
Сервисный бот
Схема проезда, feedback, запрос доступа, регистрация на будущие мероприятия у бота в TG @digitalgodbot