File size: 1,856 Bytes
fbcb88a
 
b9bc222
 
 
 
fbcb88a
b9bc222
fbcb88a
 
 
 
 
 
 
 
b9bc222
 
fbcb88a
b9bc222
 
 
 
fbcb88a
 
b9bc222
 
 
 
 
fbcb88a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b9bc222
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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"]