Содержание Show
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 это выглядит следующим образом: заходим в терминал и прописываем учетные данные для доступа к серверу.
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:
# далее вводим пароль
После входа, мы создаем папку и входим в неё:
mkdir airflow
cd airflow
Не забудьте установить A-запись вашего домена, указывающую на IP-адрес вашего сервера. Это позволит вашему доменному имени разрешаться в соответствующий IP-адрес, обеспечивая корректную работу вашего контейнера Docker и связанных с ним сервисов.
Шаг 2. Получение файла конфигурации docker-compose.yaml
Для развертывания Apache Airflow с использованием Docker Compose необходимо получить файл конфигурации docker-compose.yaml. Используйте следующую команду для загрузки файла docker-compose.yaml из официальной документации Apache Airflow:
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 необходимо подготовить свою среду, т.е. создать необходимые файлы, каталоги и инициализировать базу данных.
mkdir -p ./dags ./logs ./plugins ./config
Внутри созданной директории создаются следующие поддиректории:
—
– в этой директории будут храниться ваши даги (рабочие процессы) в формате Python.dags
—
– в этой директории будут храниться логи выполнения ваших дагов. logs
—
– в этой директории вы можете разместить дополнительные плагины для Apache Airflow.plugins
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 образ:
- Правим
docker-compose.yaml
Одной командой закомментируем строку с образом Airflow и раскомментируем блокbuild
sed -i 's/^ *image: ${AIRFLOW_IMAGE_NAME:-apache\/airflow:2.10.2}/ # &/; s/^ *# build: \./ build: ./' docker-compose.yaml
- Создаем
Dockerfile
Добавляем Dockerfile для установки системных пакетов и Python зависимостей
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
- Создаем
requirements.txt
Укажем библиотеки, которые нужно подтянуть в Airflow
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
- Собираем образ
docker-compose build --no-cache --pull
Шаг 5. Запуск контейнеров
Теперь, когда все необходимые настройки и файлы подготовлены, давайте запустим контейнеры Apache Airflow с помощью следующей команды:
docker-compose up -d
Эта команда загрузит все необходимые образы и запустит контейнеры в фоновом режиме. Подождите некоторое время, чтобы Docker Compose загрузил и запустил контейнеры.
Вы можете проверить состояние запущенных контейнеров с помощью команды:
docker-compose ps
Если все прошло успешно, вы должны увидеть список контейнеров, их статус и порты, на которых они слушают.
Теперь ваш Apache Airflow успешно запущен и готов к использованию. Вы можете получить доступ к его веб-интерфейсу, открыв веб-браузер и перейдя по адресу http://your_server_ip:8080.
Шаг 6. Вход в веб-интерфейс
При первом входе в веб-интерфейс вам будет предложено создать учетную запись администратора. По умолчанию, логин и пароль для этой учетной записи устанавливаются следующим образом:
Логин: airflow
Пароль: airflow
Пожалуйста, используйте эти учетные данные для входа в веб-интерфейс Apache Airflow после его успешного развертывания. Обратите внимание, что по соображениям безопасности рекомендуется изменить пароль для учетной записи администратора после первого входа.
Шаг 7. Установка NGINX и создание конфигурационного файла для веб-приложения
Если NGINX еще не установлен на вашем сервере, выполните следующие команды:
sudo apt update
sudo apt install nginx
Далее мы создаем конфигурационный файл NGINX для веб-приложения. Обычно файлы конфигурации хранятся в /etc/nginx/sites-available/
. Создайте новый файл, например, airflow, с помощью текстового редактора:
sudo nano /etc/nginx/sites-available/airflow
Пример базовой конфигурации:
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
, чтобы активировать его:
sudo ln -s /etc/nginx/sites-available/airflow /etc/nginx/sites-enabled/
Проверьте конфигурацию на наличие ошибок:
sudo nginx -t
Если конфигурация корректна, перезапустите NGINX:
sudo systemctl restart nginx
Шаг 9. Установка SSL-сертификата
Для установки SSL-сертификата вы можете воспользоваться Let’s Encrypt. Установите Certbot:
sudo apt install certbot python3-certbot-nginx
Затем выпустите SSL-сертификат для вашего домена (замените domain.com):
sudo certbot --nginx -d airflow.domain.com -d www.airflow.domain.com
Следуйте инструкциям Certbot для завершения установки. Certbot автоматически обновит конфигурацию NGINX, добавив SSL-сертификаты. После завершения, ваши запросы будут обслуживаться через HTTPS.
Перезапустите NGINX, чтобы применить изменения в конфигурации:
sudo systemctl restart nginx
Теперь веб-приложение Airflow будет доступно через HTTPS с помощью NGINX, который также выполняет проксирование запросов к вашему приложению.
После успешной установки SSL-сертификата рекомендуется оставить конфигурационный файл NGINX без изменений, за исключением ситуаций, когда требуется ручное внесение данных о SSL-сертификате.
Снова переходим к конфигурационному файлу
sudo nano /etc/nginx/sites-available/airflow
и меняем содержимое на
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» на свой домен в каждом случае. После сохранения проверяем конфигурацию на наличие ошибок:
sudo nginx -t
Если конфигурация корректна, перезапустите NGINX:
sudo systemctl restart nginx
Шаг 10. Автообновление 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
Если вы столкнулись с какими-либо проблемами или ошибками при установке и настройке Apache Airflow, обратитесь к официальной документации, сообществу пользователей или форумам для получения помощи. Установка и настройка Apache Airflow может быть сложной задачей, особенно для новичков, поэтому не стесняйтесь обращаться за помощью, чтобы облегчить свой опыт работы с этим мощным инструментом автоматизации и оркестрации рабочих процессов.
Удачи в вашем путешествии с Apache Airflow!