Деплой Redash в Docker Swarm (single-node или multi-node).
Проверяет, что нода является Swarm manager
(Опционально) логинится в приватный Docker registry
Создаёт директории (/var/redash, postgres data dir)
Рендерит docker-compose.yml из шаблона
Деплоит стек через docker stack deploy
Ждёт, пока сервис redash поднимется
(Опционально) запускает manage.py db upgrade для первичной инициализации БД
Сервис
Образ
Описание
postgres
postgres:12-alpine
База данных
redis
redis:3-alpine
Очередь задач / кэш
redash
registry.unitpay.ru/unitpay/redash
Web-приложение
worker
то же
Celery worker
scheduler
то же
Celery beat scheduler
Обязательные (нужно переопределить)
Переменная
Описание
redash_postgres_password
Пароль к PostgreSQL
redash_secret_key
SECRET_KEY для Redash (генерируется 1 раз)
redash_cookie_secret
COOKIE_SECRET для Redash
Переменная
По умолчанию
Описание
redash_image
registry.unitpay.ru/unitpay/redash
Образ Redash
redash_version
0.0.12
Тег образа
redash_stack_name
redash
Имя Swarm-стека
redash_listen_port
5000
Публичный порт web-приложения
redash_postgres_data_dir
/opt/redash/postgres
Путь к данным PostgreSQL
redash_compose_dir
/opt/redash
Директория для compose-файла
redash_network_name
redash
Имя overlay-сети
Переменная
По умолчанию
Описание
redash_registry_auth
false
Включить логин в registry
redash_registry_url
""
URL registry
redash_registry_username
""
Логин
redash_registry_password
""
Пароль (хранить в vault!)
Переменная
По умолчанию
Описание
redash_traefik_enabled
false
Добавить labels для Traefik
redash_traefik_host
""
Hostname для Traefik router
Переменная
По умолчанию
Описание
redash_db_init
false
Запустить manage.py db upgrade (только 1-й раз)
# Добавить секреты в 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 --tags deploy
Структура файлов на сервере
/var/redash/
├── docker-compose.yml # рендерится Ansible
└── postgres/ # данные PostgreSQL (bind mount)
# inventory/prod/group_vars/redash/vault.yml
vault_registry_username : " deployer"
vault_registry_password : " s3cr3t"
vault_postgres_password : " pg_s3cr3t"
vault_redash_secret_key : " $(python -c 'import secrets; print(secrets.token_hex(32))')"
vault_redash_cookie_secret : " $(python -c 'import secrets; print(secrets.token_hex(32))')"