Индекс на дневникаDockup / бележка от практиката
Note / self-host-metabase

Как да хоствате Metabase самостоятелно през 2026 г.: база данни на приложението, TLS и архивиране

Практическо ръководство за самостоятелно хостване на Metabase с Docker, портове, устойчиви данни, TLS, сигурност, архивиране и проблемите, които възпрепятстват използването в production. С проверки.

Ако вече сте опитвали да хоствате Metabase самостоятелно, вероятно ви е познато това неприятно състояние: интерфейсът се показва, но базата данни на приложението липсва, въпреки че базите данни с източниците на dashboard-ите са запазени. Повторното създаване на контейнера рядко решава несъответствие между URL адреси, състояние и зависимости.

Това ръководство използва един конкретен критерий за завършеност — свързване към примерна база данни с достъп само за четене, запазване на въпрос, създаване на dashboard и изпращане на subscription чрез конфигурирания mail канал. Всяко конфигурационно решение се оценява спрямо този критерий, а не спрямо зелен badge на контейнера.

Идентификационни данни, роли и изложени повърхности

Моделирайте заплахите спрямо действията, които извършва Metabase, а не само спрямо login формата му. Тук високорисковата грешка е използването на вградената H2 база данни на приложението като единствено production копие. Приложете следната граница: давайте на Metabase роли с достъп само за четене до базите данни, когато е възможно, и разделяйте правата върху колекциите от идентификационните данни за базите данни.

Генерирайте MB_ENCRYPTION_SECRET_KEY еднократно, не го съхранявайте в Git и го запазете заедно с recovery manifest-а, защото промяната му може да направи криптираното или подписаното състояние на приложението невалидно. Не решавайте грешка с права, като стартирате контейнера като root или монтирате хоста без ограничения. Ограниченията на ресурсите също са част от дизайна на сигурността, тъй като потребителите могат да предизвикат използване на JVM heap, едновременни заявки, result caching и натоварване, прехвърлено към всеки analytics data source.

Разделете Metabase от зависимостите му

Най-малката отговорна топология на Metabase съдържа един private listener на порт 3000, ingress маршрут и документирана граница на състоянието. Мрежовият договор за Metabase е отделна Postgres база данни на приложението, различна от analytics източниците. Дръжте private endpoint-ите във вътрешен DNS, разрешете само необходимите outbound заявки и дайте на Metabase service credential с ограничен обхват.

Валидирайте топологията, като помолите clean client да се свърже към примерна база данни с достъп само за четене, да запази въпрос, да създаде dashboard и да изпрати subscription чрез конфигурирания mail канал. Наблюдавайте JVM heap, едновременните заявки, result caching и натоварването, прехвърлено към всеки analytics data source, докато тестът се изпълнява. Резултатът показва дали следващото подобрение трябва да бъде в memory, storage, networking или в отделен worker, вместо да насърчава произволно оразмеряване на контейнера.

Docker baseline за Metabase

Следващата команда прави границата на контейнера видима, без да претендира, че provision-ва всяка външна услуга.

docker run -d \
  --name metabase \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -v metabase-data:/metabase-data \
  -e MB_ENCRYPTION_SECRET_KEY=replace-with-a-long-random-value \
  -e MB_DB_TYPE=h2 \
  -e MB_DB_FILE=/metabase-data/metabase.db \
  metabase/metabase:latest

Преди да отворите ingress, проверете разрешената environment конфигурация, mount-овете и listener-а. Добавете проверените connection настройки за отделна Postgres база данни на приложението, различна от analytics източниците; използвайте private имена за private услугите. Успешният launch приключва, когато можете да свържете примерна база данни с достъп само за четене, да запазите въпрос, да създадете dashboard и да изпратите subscription чрез конфигурирания mail канал, а не когато docker ps изведе Up.

Докажете deployment-а на Metabase от край до край

Production gate-ът за Metabase трябва да може да бъде изпълнен от човек, който не е изградил deployment-а. Дайте на този човек pinned версия, non-sensitive test account и следната задача: да свърже примерна база данни с достъп само за четене, да запази въпрос, да създаде dashboard и да изпрати subscription чрез конфигурирания mail канал. Ако инструкциите изискват недокументиран shell достъп, услугата все още не е готова за operational употреба.

Повторете gate-а, като замените само контейнера. След това възстановете базата данни на приложението на Metabase, а не само заявяваните data sources, в празна инфраструктура и докажете, че потребителите, колекциите, въпросите, dashboard филтрите и subscription-ите се появяват отново и се изпълняват спрямо възстановените connection metadata. Измервайте JVM heap, едновременните заявки, result caching и натоварването, прехвърлено към всеки analytics data source, по време и на двата успешни теста; неочакваните разлики често разкриват липсващ cache, index, worker или data mount.

Добавете failure drill: временно забранете на test identity достъпа до отделна Postgres база данни на приложението, различна от analytics източниците. Metabase трябва да изведе полезна грешка, да запази съществуващото състояние и да се възстанови, когато валидното условие се върне. Запазете timestamp-ите и съответните log редове, като редактирате secrets. Тези доказателства се превръщат в референтна точка за следващата image или конфигурационна промяна.

Поддържайте правилни вътрешните и външните URL адреси

Browser-ът, API client-ът и Metabase трябва да използват един и същ origin. За да постигнете това, задайте MB_SITE_URL към публичния HTTPS origin. Запазете оригиналния host и protocol, като същевременно не допускате порт 3000 да остане конкурентен публичен адрес.

Ръководството за troubleshooting при недостъпен сайт помага да различите недостъпен маршрут от приложение, което отговаря. Това разграничение е важно тук: базата данни на приложението липсва, въпреки че базите данни с източниците на dashboard-ите са запазени. Само първият проблем се решава с промени в ingress; вторият изисква проверка на log-овете, състоянието или workload-а на Metabase.

Експлоатирайте Metabase спрямо реалното му bottleneck-ване

При Metabase наблюдавайте transaction, а не процес: свързване към примерна база данни с достъп само за четене, запазване на въпрос, създаване на dashboard и изпращане на subscription чрез конфигурирания mail канал. Комбинирайте latency и error rate с JVM heap, едновременните заявки, result caching и натоварването, прехвърлено към всеки analytics data source, така че alert-ът да идентифицира ограничения компонент.

Upgrade rehearsal-ът трябва да обхваща факта, че базата данни на приложението на Metabase и plugin версиите трябва да се мигрират заедно; заявяваните business бази данни не са заместител на това състояние. Възстановете, мигрирайте и изпълнете transaction-а преди production replacement. Ако базата данни на приложението липсва, въпреки че базите данни с източниците на dashboard-ите са запазени, не изтривайте данни, за да направите startup-а зелен; сравнете версията, променливите, mount-овете и reachability-то на зависимостите в този ред.

Volume-ите са само първият recovery слой

Защитете състоянието на Metabase, преди да оптимизирате контейнера му. Необходимият набор е базата данни на приложението на Metabase, а не само заявяваните data sources. Монтирайте /metabase-data преди bootstrap, запишете безвредни примерни данни и заменете контейнера, за да докажете, че този path действително е persistent. Ако няколко store-а трябва да останат съгласувани, документирайте реда, в който се спират записите и се създават backup-ите.

Съхранявайте копия извън deployment сървъра и криптирайте материалите, съдържащи credentials или private content. Възстановяването е успешно, когато потребителите, колекциите, въпросите, dashboard филтрите и subscription-ите се появят отново и се изпълняват спрямо възстановените connection metadata. Разликата между persistent mount и независимо копие е разгледана в persistent storage и snapshots.

Deploy-вайте Metabase в Dockup, без да губите границите му

Dockup template-ът трябва да описва image, порт 3000, mount-ове, health timing, domain, TLS и доставката на secret-и. Dockup трябва да държи private частите на отделна Postgres база данни на приложението отделно от analytics източниците във вътрешната мрежа и да не експонира допълнителен публичен порт. Същият deployment може да използва Dockup сървъри или капацитет, прикрепен от клиента.

След като маршрутът е активен, приложете публичната настройка и опитайте да свържете примерна база данни с достъп само за четене, да запазите въпрос, да създадете dashboard и да изпратите subscription чрез конфигурирания mail канал. Архивирайте базата данни на приложението на Metabase, а не само заявяваните data sources, и включете упражнението за възстановяване в operational плана; това са отговорности на Metabase, които остават видими и след provision-ването на инфраструктурата.

Често задавани въпроси

Какво е необходимо на Metabase за production deployment?

Маршрутизирайте контейнера на Metabase на порт 3000 през един HTTPS origin. Поддържащото мрежово изискване е отделна Postgres база данни на приложението, различна от analytics източниците. Не обявявайте Metabase за готов, докато не можете да свържете примерна база данни с достъп само за четене, да запазите въпрос, да създадете dashboard и да изпратите subscription чрез конфигурирания mail канал.

Кои данни на Metabase трябва да бъдат включени в backup?

Направете /metabase-data persistent и включете базата данни на приложението на Metabase, а не само заявяваните data sources, в същия recovery manifest. Чистото възстановяване на Metabase е успешно само когато потребителите, колекциите, въпросите, dashboard филтрите и subscription-ите се появят отново и се изпълняват спрямо възстановените connection metadata.

Изисква ли Metabase HTTPS зад reverse proxy?

Използвайте HTTPS за публичния Metabase origin и оставете порт 3000 във вътрешния маршрут. Приложете правилно настройката на Metabase: задайте MB_SITE_URL към публичния HTTPS origin. При Metabase HTTPS защитава credentials или user content при пренос и поддържа последователно поведение на client-а, зависещо от origin.

Как трябва да се тества upgrade на Metabase?

Възстановете текущото състояние на Metabase в изолиран deployment, приложете кандидат-версията и повторете acceptance transaction-а. Обърнете особено внимание, защото базата данни на приложението на Metabase и plugin версиите трябва да се мигрират заедно; заявяваните business бази данни не са заместител на това състояние. Запазете предишния Metabase image, докато не изясните границите на data migration-а и rollback-а.