airflow / config.sh
Subham9126's picture
Upload 7 files
494a23b verified
Raw
History Blame Contribute Delete
4.2 kB
#!/bin/bash
# ===========================================
# Airflow Configuration β€” Single Source of Truth
# ===========================================
# Override any value by setting the corresponding environment
# variable (e.g. as an HF Secret).
# ---- Directory Paths ----
export AIRFLOW_HOME="${AIRFLOW_HOME:-/opt/airflow}"
export DAGS_DIR="${AIRFLOW_HOME}/dags"
export LOGS_DIR="${AIRFLOW_HOME}/logs"
# ---- Database ----
# Default: local SQLite so the container always boots.
# For production, set AIRFLOW__DATABASE__SQL_ALCHEMY_CONN as an HF Secret
# pointing to your PostgreSQL instance.
export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN="${AIRFLOW__DATABASE__SQL_ALCHEMY_CONN:-sqlite:///${AIRFLOW_HOME}/airflow.db}"
# Pool tuning β€” keeps connections low for Supabase / free-tier DBs
export AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_SIZE="${AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_SIZE:-2}"
export AIRFLOW__DATABASE__SQL_ALCHEMY_MAX_OVERFLOW="${AIRFLOW__DATABASE__SQL_ALCHEMY_MAX_OVERFLOW:-2}"
export AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_RECYCLE="${AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_RECYCLE:-1800}"
export AIRFLOW__DATABASE__SQL_ALCHEMY_POOL_PRE_PING="True"
# ---- DAG Repository ----
export DAG_REPO_URL="${DAG_REPO_URL:-https://github.com/subhamgiri460/myworkflows.git}"
export DAG_REPO_BRANCH="${DAG_REPO_BRANCH:-main}"
# For private repos: set DAG_REPO_TOKEN to a GitHub PAT (fine-grained or classic)
# The token is injected into the URL at runtime β€” never stored in config.
export DAG_REPO_TOKEN="${DAG_REPO_TOKEN:-}"
# ---- Admin Credentials ----
# Set these as HF Secrets for production.
export AIRFLOW_ADMIN_USER="${AIRFLOW_ADMIN_USER:-admin}"
export AIRFLOW_ADMIN_PASSWORD="${AIRFLOW_ADMIN_PASSWORD:-admin}"
# ---- Internal Ports ----
export AIRFLOW_WEB_PORT="${AIRFLOW_WEB_PORT:-8080}"
export REFRESH_SERVICE_PORT="${REFRESH_SERVICE_PORT:-5000}"
export NGINX_PORT="${NGINX_PORT:-7860}"
# ---- Core ----
export AIRFLOW__CORE__LOAD_EXAMPLES="${AIRFLOW__CORE__LOAD_EXAMPLES:-False}"
export AIRFLOW__CORE__EXECUTOR="${AIRFLOW__CORE__EXECUTOR:-LocalExecutor}"
export AIRFLOW__CORE__PARALLELISM="${AIRFLOW__CORE__PARALLELISM:-2}"
export AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG="${AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG:-2}"
export AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION="${AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION:-True}"
# Auto-generate Fernet key if not set (required for connection encryption)
if [ -z "${AIRFLOW__CORE__FERNET_KEY:-}" ]; then
export AIRFLOW__CORE__FERNET_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" 2>/dev/null || echo "")
fi
# ---- Webserver ----
export AIRFLOW__WEBSERVER__WEB_SERVER_PORT="${AIRFLOW_WEB_PORT}"
export AIRFLOW__WEBSERVER__WEB_SERVER_MASTER_TIMEOUT="${AIRFLOW__WEBSERVER__WEB_SERVER_MASTER_TIMEOUT:-300}"
export AIRFLOW__WEBSERVER__WORKER_CLASS="${AIRFLOW__WEBSERVER__WORKER_CLASS:-gevent}"
export AIRFLOW__WEBSERVER__SECRET_KEY="${AIRFLOW__WEBSERVER__SECRET_KEY:-$(python3 -c 'import secrets; print(secrets.token_hex(32))' 2>/dev/null)}"
export AIRFLOW__WEBSERVER__WORKERS="${AIRFLOW__WEBSERVER__WORKERS:-1}"
export AIRFLOW__WEBSERVER__EXPOSE_CONFIG="${AIRFLOW__WEBSERVER__EXPOSE_CONFIG:-False}"
# ---- Scheduler ----
export AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL="${AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL:-30}"
# ---- API ----
export AIRFLOW__API__AUTH_BACKENDS="${AIRFLOW__API__AUTH_BACKENDS:-airflow.api.auth.backend.session}"
# ---- Logging ----
export AIRFLOW__LOGGING__LOGGING_LEVEL="${AIRFLOW__LOGGING__LOGGING_LEVEL:-INFO}"
# ---- Validation ----
validate_config() {
local warn=0
if [[ "${AIRFLOW__DATABASE__SQL_ALCHEMY_CONN}" == sqlite* ]]; then
echo "[WARN] Using SQLite β€” not suitable for production. Set AIRFLOW__DATABASE__SQL_ALCHEMY_CONN as an HF Secret."
# SQLite requires SequentialExecutor
export AIRFLOW__CORE__EXECUTOR="SequentialExecutor"
warn=1
fi
if [ "${AIRFLOW_ADMIN_PASSWORD}" = "admin" ]; then
echo "[WARN] Using default admin password. Set AIRFLOW_ADMIN_PASSWORD as an HF Secret."
warn=1
fi
if [ "${warn}" -eq 0 ]; then
echo "[OK] Configuration validated."
fi
}