Инструменты

Руководство по установке и настройке Apache Airflow на сервер с использованием Docker

Apache Airflow — это открытая платформа для программирования, планирования и мониторинга рабочих процессов. Она позволяет разрабатывать сложные рабочие процессы, состоящие из нескольких шагов, и управлять ими в автоматизированном режиме.

В этой статье мы рассмотрим, как установить и настроить Apache Airflow на сервер, используя Docker. 

Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Он обеспечивает изоляцию и портативность, что делает его идеальным инструментом для установки и управления Apache Airflow и прочих веб-приложений.

Шаг 1. Аренда облачного сервера

Первым шагом в развертывании Apache Airflow с использованием Docker является получение облачного сервера. Облачные провайдеры, такие как, Yandex Cloud , VK Cloud, или Timeweb Cloud, предоставляют возможность арендовать виртуальные серверы в облаке. 

Выберите облачного провайдера, который наиболее соответствует вашим требованиям, и следуйте их инструкциям для создания и настройки виртуального сервера. Обычно вам будет предложено выбрать операционную систему и фигурацию сервера в соответствии с вашими потребностями, такими как количество ядер процессора, объем оперативной памяти и размер хранилища.

После создания сервера в облаке, получите доступ к нему посредством SSH или других предоставленных средств удаленного доступа.

Я собираюсь установить Apache Airflow на сервере, предоставляемом провайдером Timeweb Cloud, который является самым бюджетным вариантом. Также при выборе сервера необходимо предустоновить Docker выбрав последний версию Ubuntu.

Далее подключаемся к серверу через командную строку для удобства дальнейшей работы. На macOS это выглядит следующим образом: заходим в терминал и прописываем учетные данные для доступа к серверу. 

Bash
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@213.226.127.249's password: 
# далее вводим пароль

После входа, мы создаем папку и входим в неё:

Bash
mkdir airflow
Bash
cd airflow

Не забудьте установить A-запись вашего домена, указывающую на IP-адрес вашего сервера. Это позволит вашему доменному имени разрешаться в соответствующий IP-адрес, обеспечивая корректную работу вашего контейнера Docker и связанных с ним сервисов.


Шаг 2. Получение файла конфигурации docker-compose.yaml

Для развертывания Apache Airflow с использованием Docker Compose необходимо получить файл конфигурации docker-compose.yaml. Используйте следующую команду для загрузки файла docker-compose.yaml из официальной документации Apache Airflow:

Bash
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.10.2/docker-compose.yaml'
Этот файл содержит несколько определений служб:

— airflow-scheduler - Планировщик отслеживает все задачи и DAG, а затем запускает экземпляры задач после завершения их зависимостей.
— airflow-webserver - Веб-сервер доступен по адресу http://localhost:8080.
— airflow-worker - Работник, который выполняет задачи, поставленные планировщиком.
— airflow-triggerer - Триггер запускает цикл событий для отложенных задач.
— airflow-init - Служба инициализации.
— postgres - База данных.
— redis - брокер, который пересылает сообщения от планировщика к работнику.

Официальная документация Apache Airflow

Шаг 3. Подготовка среды перед первым запуском Apache Airflow

Перед первым запуском Airflow необходимо подготовить свою среду, т.е. создать необходимые файлы, каталоги и инициализировать базу данных.

Bash
mkdir -p ./dags ./logs ./plugins ./config

Внутри созданной директории создаются следующие поддиректории: 

— dags – в этой директории будут храниться ваши даги (рабочие процессы) в формате Python.

— logs – в этой директории будут храниться логи выполнения ваших дагов. 

— plugins – в этой директории вы можете разместить дополнительные плагины для Apache Airflow.

Bash
echo -e "AIRFLOW_UID=$(id -u)" > .env

Команда «echo -e» используется для вывода и записи текста в файл. В данном случае, команда записывает строку «AIRFLOW_UID=$(id -u)» в файл с именем «.env».

Здесь «$(id -u)» — это подстановочное выражение, которое будет заменено на идентификатор пользователя (UID) текущего пользователя. Таким образом, переменная «AIRFLOW_UID» будет содержать UID текущего пользователя.

В целом, эта команда создает файл .env и записывает в него значение переменной AIRFLOW_UID, чтобы установить правильные разрешения на файлы и каталоги, созданные Apache Airflow в контейнере Docker.


Если вы не желаете использовать примеры DAGов, предоставляемые по умолчанию при запуске системы Apache Airflow, установите значение ‘false‘ для параметра AIRFLOW__CORE__LOAD_EXAMPLES в файле docker-compose.yaml.

Это обеспечит отключение автоматической загрузки примеров DAGов при запуске Airflow.


Шаг 4. Установка необходимых библиотек и зависимостей

Для установки дополнительных библиотек в Airflow, необходимо использовать «‎кастомный»‎ Docker образ:

  1. Правим  docker-compose.yaml

    Одной командой закомментируем строку с образом Airflow и раскомментируем блок build
Bash
sed -i 's/^ *image: ${AIRFLOW_IMAGE_NAME:-apache\/airflow:2.10.2}/  # &/; s/^ *# build: \./  build: ./' docker-compose.yaml
  1. Создаем Dockerfile
    Добавляем Dockerfile для установки системных пакетов и Python зависимостей
Bash
echo 'FROM apache/airflow:2.10.2

USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
    libpq-dev gcc && apt-get clean && rm -rf /var/lib/apt/lists/*

USER airflow
RUN pip install --upgrade pip setuptools --disable-pip-version-check
COPY requirements.txt /requirements.txt
RUN pip install --no-cache-dir -r /requirements.txt' > Dockerfile
  1. Создаем requirements.txt
    Укажем библиотеки, которые нужно подтянуть в Airflow
Bash
echo 'apache-airflow[postgres,redis,celery]
psycopg2-binary
requests
pandas
numpy
apache-airflow-providers-amazon
apache-airflow-providers-http
apache-airflow-providers-docker
apache-airflow-providers-slack
apache-airflow-providers-postgres' > requirements.txt
  1. Собираем образ
Bash
docker-compose build --no-cache --pull

Шаг 5. Запуск контейнеров

Теперь, когда все необходимые настройки и файлы подготовлены, давайте запустим контейнеры Apache Airflow с помощью следующей команды:

Bash
docker-compose up -d

Эта команда загрузит все необходимые образы и запустит контейнеры в фоновом режиме. Подождите некоторое время, чтобы Docker Compose загрузил и запустил контейнеры.

Вы можете проверить состояние запущенных контейнеров с помощью команды:

Bash
docker-compose ps

Если все прошло успешно, вы должны увидеть список контейнеров, их статус и порты, на которых они слушают.

Теперь ваш Apache Airflow успешно запущен и готов к использованию. Вы можете получить доступ к его веб-интерфейсу, открыв веб-браузер и перейдя по адресу http://your_server_ip:8080.

Шаг 6. Вход в веб-интерфейс

При первом входе в веб-интерфейс вам будет предложено создать учетную запись администратора. По умолчанию, логин и пароль для этой учетной записи устанавливаются следующим образом:

Логин: airflow 
Пароль: airflow

Пожалуйста, используйте эти учетные данные для входа в веб-интерфейс Apache Airflow после его успешного развертывания. Обратите внимание, что по соображениям безопасности рекомендуется изменить пароль для учетной записи администратора после первого входа.

Шаг 7. Установка NGINX и создание конфигурационного файла для веб-приложения

Если NGINX еще не установлен на вашем сервере, выполните следующие команды:

Bash
sudo apt update
sudo apt install nginx

Далее мы создаем конфигурационный файл NGINX для веб-приложения. Обычно файлы конфигурации хранятся в /etc/nginx/sites-available/. Создайте новый файл, например, airflow, с помощью текстового редактора:

Bash
sudo nano /etc/nginx/sites-available/airflow

Пример базовой конфигурации:

Bash
server {
    listen 80;
    server_name airflow.domain.com www.airflow.domain.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Шаг 8. Создание символической ссылки и проверка конфигурации и перезапуск NGINX

Создайте символическую ссылку на ваш конфигурационный файл в папке sites-enabled, чтобы активировать его:

Bash
sudo ln -s /etc/nginx/sites-available/airflow /etc/nginx/sites-enabled/

Проверьте конфигурацию на наличие ошибок:

Bash
sudo nginx -t

Если конфигурация корректна, перезапустите NGINX:

Bash
sudo systemctl restart nginx

Шаг 9. Установка SSL-сертификата

Для установки SSL-сертификата вы можете воспользоваться Let’s Encrypt. Установите Certbot:

Bash
sudo apt install certbot python3-certbot-nginx

Затем выпустите SSL-сертификат для вашего домена (замените domain.com):

Bash
sudo certbot --nginx -d airflow.domain.com -d www.airflow.domain.com

Следуйте инструкциям Certbot для завершения установки. Certbot автоматически обновит конфигурацию NGINX, добавив SSL-сертификаты. После завершения, ваши запросы будут обслуживаться через HTTPS.

Перезапустите NGINX, чтобы применить изменения в конфигурации:

Bash
sudo systemctl restart nginx

Теперь веб-приложение Airflow будет доступно через HTTPS с помощью NGINX, который также выполняет проксирование запросов к вашему приложению.

После успешной установки SSL-сертификата рекомендуется оставить конфигурационный файл NGINX без изменений, за исключением ситуаций, когда требуется ручное внесение данных о SSL-сертификате.

Снова переходим к конфигурационному файлу

Bash
sudo nano /etc/nginx/sites-available/airflow

и меняем содержимое на 

Bash
server {
    listen 80;
    server_name airflow.domain.com www.airflow.domain.com;
    
    # Redirecting to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name airflow.domain.com www.airflow.domain.com;

    ssl_certificate /etc/letsencrypt/live/airflow.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/airflow.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Пожалуйста, обратите внимание и замените все упоминания «domain.com» на свой домен в каждом случае. После сохранения проверяем конфигурацию на наличие ошибок:

Bash
sudo nginx -t

Если конфигурация корректна, перезапустите NGINX:

Bash
sudo systemctl restart nginx

Шаг 10. Автообновление SSL-сертификата с помощью Certbot.

Для автоматического обновления SSL-сертификатов с помощью Certbot, необходимо настроить задачу cron (планировщик задач) для периодической проверки и обновления сертификатов. Сделать это можно следующим образом:

Откройте файл cron для редактирования:

Bash
sudo crontab -e

Добавьте строку, которая будет запускать Certbot для автоматической проверки и обновления сертификатов. Например, для обновления сертификатов каждый день в 2 часа ночи, вы можете добавить следующую строку:

Bash
0 2 * * * certbot renew

Сохраните файл и закройте редактор.

Эта строка задачи cron вызывает команду certbot renew, которая автоматически проверяет все установленные SSL-сертификаты и обновляет их, если это необходимо. Certbot умеет проверять срок действия сертификатов и обновлять их, если они скоро истекут.

Чтобы убедиться, что задача cron настроена правильно, вы можете выполнить следующую команду:

Bash
sudo certbot renew --dry-run

Эта команда выполняет проверку обновления сертификатов в режиме «сухого запуска», не внося никаких фактических изменений. Если команда завершится успешно, то задача cron должна быть правильно настроена.

После настройки задачи cron, Certbot будет автоматически проверять и обновлять SSL-сертификаты по расписанию. Вы можете следить за процессом обновления, проверяя логи Certbot:

Bash
sudo tail -f /var/log/letsencrypt/letsencrypt.log

Это позволит вам видеть, когда сертификаты успешно обновлены или если возникнут какие-либо проблемы.

Теперь у вас настроено автоматическое обновление SSL-сертификатов с помощью Certbot через задачу cron, что обеспечит надежную защиту вашего веб-приложения.

Post Scriptum

Если вы столкнулись с какими-либо проблемами или ошибками при установке и настройке Apache Airflow, обратитесь к официальной документации, сообществу пользователей или форумам для получения помощи. Установка и настройка Apache Airflow может быть сложной задачей, особенно для новичков, поэтому не стесняйтесь обращаться за помощью, чтобы облегчить свой опыт работы с этим мощным инструментом автоматизации и оркестрации рабочих процессов.

Удачи в вашем путешествии с Apache Airflow!

Пред.
RFM-Анализ в действии: как повысить лояльность и увеличить выручку

RFM-Анализ в действии: как повысить лояльность и увеличить выручку

Содержание Show Введение в RFM-анализЗачем нужен RFM-анализ?

След.
За гранью среднего: меры центральной тенденции

За гранью среднего: меры центральной тенденции

Содержание Show Зачем нужны меры центральной тенденции?

Вам также может понравиться