Установка Apache Airflow

Краткая шпаргалка о том, как выполняется установка Apache Airflow в варианте через Docker Compose.

Используемые версии ПО

Версия Linux — Rocky Linux release 9.7 (Blue Onyx).

Apache Airflow — 3.2.2.

Предварительная настройка сервера

Сначала установим необходимые предварительные компоненты — Docker и утилиты (git. mc, nano).

Установка Docker

Первым шагом установим Docker:

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

Проверяем статус службы:

sudo systemctl status docker

Установка утилит

Выполнил установку необходимых утилит:

sudo dnf install -y nano mc git

Отключение SELinux

Отключаем SELinux:

nano /etc/selinux/config

Меняет значение параметра SELINUX на «disabled»:

SELINUX=disabled

Сохраняем изменения и перезагружаем сервер.

Установка Apache Airflow

Переходим к установке Apache Superset:

1. Создадим отдельную директрию для хранения всех необходимых файлов Apache Airflow:

mkdir /opt/airflow
cd /opt/airflow

2. Загрузим актуальный файл для Docker Compose:

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml'

3. Немного отредактируем файл docker-compose.yaml:

nano docker-compose.yaml

4. Скорректируем настройки публикации портов для сервиса Redis:

redis:
    # Redis is limited to 7.2-bookworm due to licencing change
    # https://redis.io/blog/redis-adopts-dual-source-available-licensing/
    image: redis:7.2-bookworm
    #expose:
    #  - 6379
    healthcheck:

5. Укажем в переменных окружения идентификатор пользователя:

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

6. Выполним первоначальную инициализацию:

docker compose up airflow-init

7. Теперь запускаем все остальные контейнеры:

docker compose up -d

8. Проверяем статус контейнеров:

docker compose ps

9. Все контейнеры должны быть запущены:

NAME                              IMAGE                  COMMAND                  SERVICE                 CREATED         STATUS                                 PORTS
airflow-airflow-apiserver-1       apache/airflow:3.2.2   "/usr/bin/dumb-init …"   airflow-apiserver       2 minutes ago   Up About a minute (healthy)            0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
airflow-airflow-dag-processor-1   apache/airflow:3.2.2   "/usr/bin/dumb-init …"   airflow-dag-processor   2 minutes ago   Up About a minute (health: starting)   8080/tcp
airflow-airflow-scheduler-1       apache/airflow:3.2.2   "/usr/bin/dumb-init …"   airflow-scheduler       2 minutes ago   Up About a minute (healthy)            8080/tcp
airflow-airflow-triggerer-1       apache/airflow:3.2.2   "/usr/bin/dumb-init …"   airflow-triggerer       2 minutes ago   Up About a minute (health: starting)   8080/tcp
airflow-airflow-worker-1          apache/airflow:3.2.2   "/usr/bin/dumb-init …"   airflow-worker          2 minutes ago   Up 24 seconds (health: starting)       8080/tcp
airflow-postgres-1                postgres:16            "docker-entrypoint.s…"   postgres                4 minutes ago   Up 4 minutes (healthy)                 5432/tcp
airflow-redis-1                   redis:7.2-bookworm     "docker-entrypoint.s…"   redis                   4 minutes ago   Up 4 minutes (healthy)                 6379/tcp

10. Проверяем доступность веб интерфейса:

login: airflow
password: airflow

Настройка HTTPS для Apache Airflow

Для настройки HTTPS глобально нужно выполнить две веши:

  1. Настроить прослушивание контейнера с Apache Airflow только на локальном адресе (127.0.0.1), чтобы исключить любые обращени к нему по незащищенному соединению.
  2. Настроить веб сервер (например, nginx) и создать публикацию ресурса.

Приступим:

1. Первым шагом установим nginx.

sudo dnf install -y nginx

2. Настроим автоматически запуск nginx:

sudo systemctl enable --now nginx

3. Проверяем статус службы:

sudo systemctl status nginx

4. Скорректируем файл для Docker Compose, чтобы настроить прослушивание только на адресе локального хоста:

cd /opt/airflow
nano docker-compose.yaml

5. Для сервиса airflow-apiserver необходимо указать следующие параметры публикации портов:

ports:
      - "127.0.0.1:8080:8080"

6. Сохраняем изменения и перезапускаем контейнеры:

cd /opt/airflow
docker compose -f docker-compose.yaml down
docker compose -f docker-compose.yaml up -d

7. Проверяем, что конейнер Superset прослушивает только локальные подключения:

ss -tulpn | grep 8080
[root@CHGA airflow]# ss -tulpn | grep 8080
tcp   LISTEN 0      4096       127.0.0.1:8080      0.0.0.0:*    users:(("docker-proxy",pid=67954,fd=8))

8. Создаем правило публикации на nginx:

nano /etc/nginx/conf.d/airflow.conf

9. Конфигурация публикации:

server {
    listen 80;
    server_name airflow.itproblog.ru;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    return 301 https://airflow.itproblog.ru$request_uri;

}

server {
    listen 443 ssl;
    server_name airflow.itproblog.ru;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ssl_certificate         /etc/nginx/ssl/itproblog.crt;
    ssl_certificate_key     /etc/nginx/ssl/itproblog.key;

    location / {
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8080/;
    }
}

9. Проверяем конфигурацию:

nginx -t
[root@CHGA superset]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@CHGA superset]#

10. Перезагружаем конфигурацию nginx:

systemctl reload nginx

11. Проверяем доступность веб интерфейса Superset по HTTPS.

https://airflow.itproblog.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *