sghorbal
add pgbouncer and use it to pool db connexions
684d2f7
FROM python:3.9-slim
# Airflow environment variables
ENV AIRFLOW_VERSION=2.10.5
ENV AIRFLOW_HOME=/opt/airflow
ENV AIRFLOW__CORE__LOAD_EXAMPLES=False
ENV PATH="/home/airflow/.local/bin:$PATH"
ENV HOME="/home/airflow"
# System deps
RUN apt-get update && apt-get install -y \
build-essential \
default-libmysqlclient-dev \
libpq-dev \
pgbouncer \
git \
curl \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Create Airflow user
RUN useradd -ms /bin/bash airflow
# Create folders & give ownership
RUN mkdir -p $AIRFLOW_HOME \
&& chown -R airflow:airflow $AIRFLOW_HOME
# Copy project files
COPY --chown=airflow:airflow requirements.txt /requirements.txt
COPY --chown=airflow:airflow dags $AIRFLOW_HOME/dags
COPY --chown=airflow:airflow entrypoint.sh /entrypoint.sh
# Create the pgbouncer configuration directory
# and give ownership to airflow user
RUN mkdir -p /etc/pgbouncer \
&& chown -R airflow:airflow /etc/pgbouncer
# Make entrypoint executable
RUN chmod +x /entrypoint.sh
# Switch to airflow user
USER airflow
# Set working directory
WORKDIR $AIRFLOW_HOME
# Install Airflow and Python dependencies
RUN pip install --no-cache-dir apache-airflow==${AIRFLOW_VERSION} \
&& pip install --no-cache-dir -r /requirements.txt
# Expose Airflow ports
EXPOSE 8088
EXPOSE 8793
# Healthcheck (webserver)
HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=10 \
CMD curl --fail http://localhost:8088/health || exit 1
# Entrypoint
ENTRYPOINT ["/entrypoint.sh"]