Содержание Show
Redash — это популярная платформа для визуализации данных и создания интерактивных отчетов. Однако, установка и настройка Redash на собственном сервере может быть сложной задачей. В этой статье мы расскажем вам о простом и эффективном способе развертывания Redash с использованием Docker. Docker позволяет упаковывать приложения и их зависимости в контейнеры, что делает процесс установки и управления Redash намного проще.
Шаг 1. Аренда облачного сервера
Первым шагом в развертывании Redash с использованием Docker является получение облачного сервера. Облачные провайдеры, такие как, Yandex Cloud , VK Cloud, или Timeweb Cloud, предоставляют возможность арендовать виртуальные серверы в облаке.
Выберите облачного провайдера, который наиболее соответствует вашим требованиям, и следуйте их инструкциям для создания и настройки виртуального сервера. Обычно вам будет предложено выбрать операционную систему и фигурацию сервера в соответствии с вашими потребностями, такими как количество ядер процессора, объем оперативной памяти и размер хранилища.
После создания сервера в облаке, получите доступ к нему посредством SSH или других предоставленных средств удаленного доступа.
Я собираюсь установить Redash на сервере, предоставляемом провайдером Timeweb Cloud, который является самым бюджетным вариантом. Также при выборе сервера необходимо предустоновить Docker выбрав последний версию Ubuntu.
Далее подключаемся к серверу через командную строку для удобства дальнейшей работы. На macOS это выглядит следующим образом: заходим в терминал и прописываем учетные данные для доступа к серверу.
zurab@MacBook-Air ~ % ssh root@157.90.154.201
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@157.90.154.201's password:
# далее вводим пароль
После входа, мы создаем папку и входим в неё:
mkdir redash
cd redash
Не забудьте установить A-запись вашего домена, указывающую на IP-адрес вашего сервера. Это позволит вашему доменному имени разрешаться в соответствующий IP-адрес, обеспечивая корректную работу вашего контейнера Docker и связанных с ним сервисов.
Первым шагом перед установкой Redash в Docker будет установка базы данных PostgreSQL. PostgreSQL — это мощная и надежная реляционная база данных, которая является рекомендуемым выбором для Redash.
docker pull postgres
Далее создаем учетные данные для входа.
docker run --name my-postgres -p 5432:5432 -e POSTGRES_PASSWORD=yoursecretpassword -d postgres
Команда docker run
используется для создания и запуска нового контейнера на основе указанного образа Docker. Давайте прокомментируем каждую часть этой команды:
--name my-postgres
: Этот флаг задает имя контейнера как «my-postgres». Имя контейнера используется для идентификации контейнера внутри Docker.-p 5432:5432
: Этот флаг устанавливает проброс портов между хостом и контейнером. В данном случае, порт 5432 внутри контейнера (стандартный порт PostgreSQL) пробрасывается на порт 5432 хостовой системы. Это позволяет внешним приложениям подключаться к PostgreSQL внутри контейнера через порт 5432 на хосте.-e POSTGRES_PASSWORD=yoursecretpassword
: Этот флаг устанавливает переменную окружения внутри контейнера. В данном случае, переменная окруженияPOSTGRES_PASSWORD
устанавливается со значением «yoursecretpassword». Это позволяет задать пароль для доступа к PostgreSQL.-d postgres
: Эта часть команды указывает на использование образа Docker с именем «postgres». Образ «postgres» представляет собой официальный образ PostgreSQL, который будет использоваться для создания контейнера.
Таким образом, данная команда создает и запускает контейнер с именем «my-postgres» на основе образа PostgreSQL. Контейнер будет доступен на порту 5432 хостовой системы, а для доступа к PostgreSQL внутри контейнера будет использоваться пароль «yoursecretpassword». Запоминаем данные от PostgreSQL для следующего шага.
Шаг 3. Создаем файл redash.env
Файл redash.env
является файлом окружения, который содержит переменные конфигурации для приложения Redash. Обычно он используется для настройки параметров подключения к базе данных, настройки аутентификации и других параметров приложения.
Чтобы создать файл redash.env
, вы можете использовать текстовый редактор или командную оболочку на вашей системе.
touch redash.env
nano redash.env
Вот пример содержимого redash.env
:
REDASH_HOST=http://localhost/redash
PYTHONUNBUFFERED=0
REDASH_LOG_LEVEL=INFO
REDASH_REDIS_URL=redis://redis:6379/0
REDASH_COOKIE_SECRET=redash-selfhosted
REDASH_SECRET_KEY=redash-selfhosted
REDASH_DATABASE_URL=postgresql://postgres:yoursecretpassword@157.90.154.201/postgres
В значении REDASH_DATABASE_URL — вводим учетные данные от PostgreSQL
Шаг 4. Создаем файл docker-compose.yml
Для развертывания Redash с использованием Docker необходимо создать файл docker-compose.yml
, который определит контейнеры и их конфигурацию.
touch docker-compose.yml
nano docker-compose.yml
# This configuration file is for the **development** setup.
# For a production example please refer to getredash/setup repository on GitHub.
version: "2.2"
x-redash-service: &redash-service
image:
redash/redash:preview
env_file:
"redash.env"
services:
server:
<<: *redash-service
command: server
depends_on:
- redis
ports:
- "5000:5000"
- "5678:5678"
environment:
REDASH_WEB_WORKERS: 4
scheduler:
<<: *redash-service
command: scheduler
environment:
QUEUES: "celery"
WORKERS_COUNT: 1
scheduled_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "scheduled_queries"
WORKERS_COUNT: 1
adhoc_worker:
<<: *redash-service
command: worker
environment:
QUEUES: "queries,schemas"
WORKERS_COUNT: 2
redis:
image: redis:latest
restart: unless-stopped
nginx:
image: nginx:latest
ports:
- "5001:80"
depends_on:
- server
links:
- server:redash
restart: always
Убедитесь, что файлы docker-compose.yml
и redash.env
находятся в одном и том же каталоге.
Шаг 5. Запуск контейнеров и настройка Redash
Теперь, когда файлы docker-compose.yml
и redash.env
находятся в одном каталоге, мы можем запустить контейнеры и настроить Redash.
Запускаем базу данных…
docker-compose run --rm server create_db
Запускаем контейнеры в фоновом режиме…
docker-compose up -d
Ожидаем запуск всех контейнеров и убеждаемся, что у нас все ок!
Переходим на IP-адрес сервера с портом 5000
В моем случае это будет выглядеть следующим образом:
http://157.90.154.201:5000
Я надеюсь что данная статья помогла вам в развертывании Redash на сервере с использованием Docker и Timeweb Cloud. Далее мы рассмотрим процесс настройки проксирования URL-адреса через NGINX к вашему веб-приложению и установку SSL-сертификата.
Шаг 6. Установка NGINX и создание конфигурационного файла для веб-приложения
Если NGINX еще не установлен на вашем сервере, выполните следующие команды:
sudo apt update
sudo apt install nginx
Далее мы создаем конфигурационный файл NGINX для веб-приложения. Обычно файлы конфигурации хранятся в /etc/nginx/sites-available/
. Создайте новый файл, например, redash
, с помощью текстового редактора:
sudo nano /etc/nginx/sites-available/redash
Пример базовой конфигурации:
server {
listen 80;
server_name redash.domain.com www.redash.domain.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Шаг 7. Создание символической ссылки и проверка конфигурации и перезапуск NGINX
Создайте символическую ссылку на ваш конфигурационный файл в папке sites-enabled
, чтобы активировать его:
sudo ln -s /etc/nginx/sites-available/redash /etc/nginx/sites-enabled/
Проверьте конфигурацию на наличие ошибок:
sudo nginx -t
Если конфигурация корректна, перезапустите NGINX:
sudo systemctl restart nginx
Шаг 8. Установка SSL-сертификата
Для установки SSL-сертификата вы можете воспользоваться Let’s Encrypt. Установите Certbot:
sudo apt install certbot python3-certbot-nginx
Затем выпустите SSL-сертификат для вашего домена (замените domain.com):
sudo certbot --nginx -d redash.domain.com -d www.redash.domain.com
Следуйте инструкциям Certbot для завершения установки. Certbot автоматически обновит конфигурацию NGINX, добавив SSL-сертификаты. После завершения, ваши запросы будут обслуживаться через HTTPS.
Перезапустите NGINX, чтобы применить изменения в конфигурации:
sudo systemctl restart nginx
Теперь веб-приложение Redash будет доступно через HTTPS с помощью NGINX, который также выполняет проксирование запросов к вашему приложению.
После успешной установки SSL-сертификата рекомендуется улучшить читаемость конфигурационного файла NGINX, приведя его к более классическому и структурированному виду, и включить явный редирект на HTTPS.
Снова переходим к конфигурационному файлу
sudo nano /etc/nginx/sites-available/redash
и меняем содержимое на
server {
listen 80;
server_name redash.domain.com www.redash.domain.com;
# Redirecting to HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name redash.domain.com www.redash.domain.com;
ssl_certificate /etc/letsencrypt/live/redash.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/redash.domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
После сохранения проверяем конфигурацию на наличие ошибок:
sudo nginx -t
Если конфигурация корректна, перезапустите NGINX:
sudo systemctl restart nginx
Шаг 9. Автообновление SSL-сертификата с помощью Certbot.
Для автоматического обновления SSL-сертификатов с помощью Certbot, необходимо настроить задачу cron (планировщик задач) для периодической проверки и обновления сертификатов. Сделать это можно следующим образом:
Откройте файл cron для редактирования:
sudo crontab -e
Добавьте строку, которая будет запускать Certbot для автоматической проверки и обновления сертификатов. Например, для обновления сертификатов каждый день в 2 часа ночи, вы можете добавить следующую строку:
0 2 * * * certbot renew
Сохраните файл и закройте редактор.
Эта строка задачи cron вызывает команду certbot renew
, которая автоматически проверяет все установленные SSL-сертификаты и обновляет их, если это необходимо. Certbot умеет проверять срок действия сертификатов и обновлять их, если они скоро истекут.
Чтобы убедиться, что задача cron настроена правильно, вы можете выполнить следующую команду:
sudo certbot renew --dry-run
Эта команда выполняет проверку обновления сертификатов в режиме «сухого запуска», не внося никаких фактических изменений. Если команда завершится успешно, то задача cron должна быть правильно настроена.
После настройки задачи cron, Certbot будет автоматически проверять и обновлять SSL-сертификаты по расписанию. Вы можете следить за процессом обновления, проверяя логи Certbot:
sudo tail -f /var/log/letsencrypt/letsencrypt.log
Это позволит вам видеть, когда сертификаты успешно обновлены или если возникнут какие-либо проблемы.
Теперь у вас настроено автоматическое обновление SSL-сертификатов с помощью Certbot через задачу cron, что обеспечит надежную защиту вашего веб-приложения.
Post Scriptum
Помните, что процесс установки и настройки может различаться в зависимости от конкретных требований и конфигурации вашей среды. Всегда обращайтесь к официальной документации Redash, Docker и Timeweb Cloud для получения наиболее актуальных инструкций.
Успехов в визуализации и анализе ваших данных с помощью Redash!