Точка доступа
GET /health. Отвечает статусом, названием продукта и работающей версией. Развёртывание можно подтвердить, а не предполагать.
Системные требования
Что нужно контейнеру, прежде чем кто-то его развернёт: среда выполнения внутри, единственный порт, который он публикует, том, который он должен сохранять, и хост, который мы рекомендуем ему выделить.
Две языковые среды выполнения в одном контейнере, и у второй есть конкретная причина, а не предпочтение.
| Что это | Почему, и где проверить | |
|---|---|---|
| Базовый образ | python:3.13-slim | Одна и та же база на обоих этапах сборки. Что скомпилировано, то и работает. Dockerfile:13 |
| Python | 3.13 или новее | Протестировано на 3.13 в непрерывной интеграции. pyproject.toml:9, .github/workflows/tests.yml:91 |
| .NET | Runtime 8.0 | Только среда выполнения, не SDK. Migrate оборачивает собственный .NET Migration SDK от Tableau. Среда выполнения путешествует вместе с ним внутри образа. Dockerfile:101 |
| Запускается как | uid 10001, пользователь ttc | Root используется один раз, чтобы принять владение подключённым томом, и сбрасывается до запуска приложения. Dockerfile:188 |
| Архитектура процессора | amd64 | Сборка arm64 чисто загружается на хосте x86 и затем не запускается. Архитектуру стоит проверить до развёртывания, а не после. |
Управляемые приложения отвечают на loopback внутри контейнера. Шлюз до них дотягивается, и больше никто.
Все 14 управляемых приложений привязываются к локальному интерфейсу внутри контейнера и никогда не публикуются. Один порт принимает каждый запрос, а шлюз направляет каждый к приложению, которому он принадлежит, удерживая одну сессию Tableau от вашего имени.
Это свойство, которое можно проверить, а не обещание, которое приходится принять на веру. Выведите список опубликованных портов работающего контейнера, и вы найдёте один, каким бы ни был набор внутри в этом выпуске.
Контейнер отдаёт незашифрованный трафик и никогда не хранит сертификат. Защита транспорта остаётся там, где вы её уже обеспечиваете.
| Что это | Почему, и где проверить | |
|---|---|---|
| Публикуемый порт | 8865 по умолчанию | Задаётся переменной окружения PORT. Развёртывание за прокси обычно отображает его, а не меняет. Dockerfile:236 |
| Порты приложений | с 8851 по 8869, на loopback | Каждое управляемое приложение привязывается к 127.0.0.1 внутри контейнера и никогда не публикуется. Шлюз до них дотягивается, а сеть нет. |
| Входящие правила | 80 и 443 для всех, административный доступ с ваших собственных адресов | Сам порт приложения остаётся неопубликованным. |
| Безопасность транспорта | Терминируется перед контейнером | Контейнер всегда отдаёт обычный HTTP и никогда не держит сертификат. Безопасностью транспорта владеет ваш балансировщик или обратный прокси, где она и так находится для всего остального, что вы запускаете. |
| Пересылаемые заголовки | Доверие только тогда, когда вы это скажете | Доверие к заголовкам по умолчанию выключено. Напрямую доступный контейнер игнорирует пересланный адрес. |
Один том хранит всё, что пересборка не должна потерять. Эта страница называет, что внутри, потому что инструкция «сделайте резервную копию пути» не говорит вам, что вы потеряете.
| Что это | Значение | Почему, и где проверить |
|---|---|---|
| Том данных | /app/data | Каталог пользователей, журнал изменений, административный журнал аудита, профили семантического слоя и зашифрованные записи подключений. Dockerfile:215 |
| Том артефактов | /app/artifacts | Куда Offboard записывает результаты, которые запрашивает аудит. |
| Размер тома | В пределах рекомендации 500 ГБ | Хранилища это файлы JSON и JSON Lines, а не база данных, а журналы наблюдаемости ротируются на 5 МБ с сохранением пяти файлов. |
| Владение | Исправляется при каждом запуске | Точка входа принимает владение томом до сброса привилегий. Том, созданный более ранней версией, остаётся читаемым и никогда не очищается тихо. |
| Файлы рядом с секретами | Записываются с правами 0600, атомарно | Частичная запись оставляет предыдущий файл целым, а не обрезанным. |
Один контейнер на хосте Docker, с запасом для работы. Это цифры, под которые Бореон рекомендует выделять ресурсы.
| Что это | Значение | Что на это влияет |
|---|---|---|
| Хост | Хост Docker | Один самодостаточный контейнер на любом хосте Docker, который у вас уже есть. Оркестратор не требуется. |
| Память | 8 ГБ ОЗУ | Две среды выполнения и безголовый браузер делят один контейнер. |
| Доступный диск | 500 ГБ | Покрывает образ, постоянные тома и место для артефактов, которые запрашивает аудит. |
Спросите контейнер, и он ответит версией, которую выполняет, а это лучший источник для этого числа, чем любая страница, включая эту.
GET /health. Отвечает статусом, названием продукта и работающей версией. Развёртывание можно подтвердить, а не предполагать.
Каждые 30 секунд
4 секунды
60 секунд. Шлюз ждёт, пока ответит каждое управляемое приложение, прежде чем сообщить о готовности. Холодный старт медленнее перезапуска.
5