Краткая шпаргалка о том, как выполняется установка 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 глобально нужно выполнить две веши:
- Настроить прослушивание контейнера с Apache Airflow только на локальном адресе (127.0.0.1), чтобы исключить любые обращени к нему по незащищенному соединению.
- Настроить веб сервер (например, 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
