You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Деплой Redash в Docker Swarm (single-node или multi-node).
Что делает роль
Проверяет, что нода является Swarm manager
(Опционально) логинится в приватный Docker registry
Создаёт директории (/var/redash, postgres data dir)
Рендерит docker-compose.yml из шаблона
Деплоит стек через docker stack deploy
Ждёт, пока сервис server поднимется
(Опционально) redash_db_init: manage.py database create_tables + db upgrade на первом деплое
(Опционально) redash_db_migrate: только manage.py db upgrade — для обновления версии с миграциями
Сервисы в стеке
Сервис
Образ
Описание
postgres
postgres:17-alpine
Метаданные Redash
redis
redis:7-alpine
Очереди RQ, без persistence
server
redash/redash:26.9.0
Web-приложение (gunicorn)
scheduler
то же
RQ scheduler
worker
то же
RQ worker: periodic, emails, default
adhoc_worker
то же
RQ worker: queries (запросы из UI)
scheduled_worker
то же
RQ worker: scheduled_queries, schemas
Переменные
Обязательные (нужно переопределить)
Переменная
Описание
redash_postgres_password
Пароль к PostgreSQL
redash_secret_key
SECRET_KEY для Redash (генерируется 1 раз)
redash_cookie_secret
COOKIE_SECRET для Redash
Основные
Переменная
По умолчанию
Описание
redash_image
redash/redash
Образ Redash
redash_version
26.9.0
Тег образа
redash_postgres_version
17-alpine
Тег образа postgres
redash_redis_version
7-alpine
Тег образа redis, нужен Redis ≥ 4
redash_stack_name
redash
Имя Swarm-стека
redash_listen_port
5000
Публичный порт web-приложения
redash_postgres_data_dir
/opt/redash/postgres
Путь к данным PostgreSQL
redash_compose_dir
/var/redash
Директория для compose-файла
redash_network_name
redash
Имя overlay-сети
Логи
Переменная
По умолчанию
Описание
redash_log_driver
json-file
Logging driver всех сервисов стека
redash_log_max_size
50m
max-size, только для json-file и local
redash_log_max_file
3
max-file, только для json-file и local
Для остальных драйверов (например, fluentd) роль задаёт только имя драйвера. Опции (fluentd-ad
9728
dress, tag) Docker берёт из log-opts в daemon.json, если там тот же драйвер.
Registry
Переменная
По умолчанию
Описание
redash_registry_auth
false
Включить логин в registry
redash_registry_url
registry.ru
URL registry
redash_registry_username
""
Логин
redash_registry_password
""
Пароль (хранить в vault!)
Traefik
Переменная
По умолчанию
Описание
redash_traefik_enabled
false
Добавить labels для Traefik
redash_traefik_host
""
Hostname для Traefik router
База данных
Переменная
По умолчанию
Описание
redash_db_init
false
create_tables + db upgrade (только 1-й раз)
redash_db_migrate
false
Только db upgrade. Игнорируется, если включён redash_db_init
Использование
Первый деплой
# Добавить секреты в vault
ansible-vault edit inventory/prod/group_vars/redash/vault.yml
# Задеплоить и инициализировать БД
ansible-playbook playbooks/redash.yml -i inventory/prod -e redash_db_init=true
Обновление версии
# Поменять redash_version в vars, затем:
ansible-playbook playbooks/redash.yml -i inventory/prod
# Если в релизе есть миграции БД:
ansible-playbook playbooks/redash.yml -i inventory/prod -e redash_db_migrate=true
Перед обновлением снимите бэкап метаданных (pg_dump -Fc) и сверьтесь с release notes Redash: там указано, есть ли новые миграции.
Смена мажорной версии PostgreSQL
Дефолт redash_postgres_version — 17-alpine. Если в redash_postgres_data_dir уже лежат данные другой мажорной версии (до этой роли дефолтом был 12-alpine), новый контейнер их не откроет и не стартует. Два варианта:
оставить старую версию явно, например redash_postgres_version: "12-alpine";
перенести данные dump/restore:
остановить сервисы приложения (docker service rm <stack>_server <stack>_scheduler <stack>_worker <stack>_adhoc_worker <stack>_scheduled_worker);
снять дамп клиентом новой версии: pg_dump -Fc одной БД redash (не pg_dumpall: в новых образах scram-sha-256, а pg_dumpall перенесёт md5-хеш пароля);
остановить postgres, переименовать каталог данных и создать пустой с владельцем 70:70, правами 0700 — по тому же пути, потому что опции volume postgres_data в Docker неизменяемы;
поднять временный контейнер новой версии на этом каталоге, сделать pg_restore, затем vacuumdb --analyze-in-stages, остановить контейнер;
обновить redash_postgres_version и прогнать роль.
postgres:18 и новее хранят данные в /var/lib/postgresql/18/docker, а шаблон монтирует /var/lib/postgresql/data. Для 18 шаблон нужно доработать.
Redis
Начиная с Redash 25.1.0 статус refresh_queries пишется через hset("redash:status", mapping=…), то есть многопольным HSET. Его нет в Redis 3 (до 25.1.0 был hmset). На redis:3-alpine задача падает каждые 30 секунд. Данных в Redis нет, только очереди RQ, поэтому версию можно менять без переноса.