# base image FROM python:3.12-slim-bookworm AS base # Create non-root user early (HF requirement) RUN useradd -m -u 1000 user WORKDIR /app/api # Install Poetry ENV POETRY_VERSION=1.8.4 ENV POETRY_HOME=/opt/poetry ENV POETRY_CACHE_DIR=/tmp/poetry_cache ENV POETRY_NO_INTERACTION=1 ENV POETRY_VIRTUALENVS_IN_PROJECT=true ENV POETRY_VIRTUALENVS_CREATE=true ENV POETRY_REQUESTS_TIMEOUT=15 # Install system dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ gcc g++ libc-dev libffi-dev libgmp-dev libmpfr-dev libmpc-dev \ postgresql postgresql-contrib postgresql-server-dev-all \ curl git nodejs npm && \ rm -rf /var/lib/apt/lists/* && \ pip install --no-cache-dir "poetry==${POETRY_VERSION}" # Set up directories and permissions RUN mkdir -p /var/run/postgresql /var/lib/postgresql/data /data/storage && \ chown -R postgres:postgres /var/run/postgresql /var/lib/postgresql/data && \ chmod 2777 /var/run/postgresql && \ chmod 700 /var/lib/postgresql/data # Copy Poetry files COPY --chown=user pyproject.toml poetry.lock ./ # Install dependencies RUN poetry install --no-root # Copy application code COPY --chown=user . . # Set environment variables ENV FLASK_APP=/app/api/app.py ENV PYTHONPATH=/app/api ENV HOME=/home/user ENV PATH=/home/user/.local/bin:$PATH # Create and set up entrypoint script COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh && \ chown user:user /entrypoint.sh && \ chown -R user:user /app # Switch to user USER user # Set required environment variables ENV EDITION=SELF_HOSTED \ DEPLOY_ENV=PRODUCTION \ MODE=api \ DB_USERNAME=postgres \ DB_PASSWORD=difyai123456 \ DB_HOST=localhost \ DB_PORT=5432 \ DB_DATABASE=dify \ MIGRATION_ENABLED=true EXPOSE 7860 ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]