File size: 4,817 Bytes
0df77ff 51364f2 7ce37bf e26861f 9d4903c 90f57a2 e26861f 64cf3a5 0df77ff b2b04b8 0df77ff 1f54115 0c0d5e5 64cf3a5 51364f2 64cf3a5 0ae370c 116ec26 64cf3a5 b2b04b8 5fc6cff b2b04b8 0df77ff b2b04b8 0df77ff 51364f2 0c0d5e5 64cf3a5 e26861f c3121a2 64cf3a5 b2b04b8 0c0d5e5 e26861f 0df77ff 51364f2 0df77ff 51364f2 496ca32 51364f2 0848c81 fbd2dcf 0848c81 443bf8a 302aead e26861f 302aead e26861f 302aead e26861f 496ca32 9f4c1e4 0404cc9 61e7c18 a4bef0b 64cf3a5 9f4c1e4 64cf3a5 5fc6cff 9f4c1e4 45ac7d0 0404cc9 51364f2 7ce37bf e3e3266 51364f2 a300380 08efa7b 51364f2 443bf8a 51364f2 61e7c18 0df77ff 51364f2 c7a62ec fbd2dcf 0404cc9 443bf8a |
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# ============================================
# Base stage for shared configuration
# ============================================
FROM python:3.10-slim-bookworm AS base
# Reduce layer size and memory usage
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
POETRY_VERSION=1.8.3 \
POETRY_VIRTUALENVS_CREATE=false \
POETRY_CACHE_DIR=/tmp/poetry_cache
# Install only essential build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
curl \
gnupg \
libgmp-dev \
libmpfr-dev \
libmpc-dev \
libssl-dev \
postgresql-client \
redis-tools \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js efficiently
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
npm install -g npm@latest && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# ============================================
# Web builder stage - optimized
# ============================================
FROM base AS web-builder
WORKDIR /app
# Copy web directory first
COPY web/ web/
WORKDIR /app/web
# Install dependencies and build
RUN yarn install --frozen-lockfile && \
yarn add --dev autoprefixer postcss tailwindcss code-inspector-plugin && \
NEXT_TELEMETRY_DISABLED=1 yarn build && \
mkdir -p .next/standalone && \
cp -r .next/static .next/standalone/.next/ && \
cp -r public .next/standalone/ && \
yarn cache clean
# ============================================
# Python builder stage - optimized
# ============================================
FROM base AS python-builder
WORKDIR /app
COPY api/pyproject.toml api/poetry.lock ./
RUN pip install --no-cache-dir poetry==1.8.3 && \
poetry config virtualenvs.create false && \
poetry install --no-dev --no-interaction --no-ansi
# Install core dependencies first
RUN pip install --no-cache-dir \
gunicorn \
gevent \
flask \
flask-cors \
Flask-SQLAlchemy==3.1.1 \
Flask-Migrate==4.0.7 \
redis \
psycopg2-binary
# Install ML dependencies separately with --no-deps
RUN pip install --no-cache-dir --no-deps \
numpy \
pandas \
torch \
transformers
# ============================================
# Final stage - minimal runtime
# ============================================
FROM base
# Create non-root user and storage directory
RUN apt-get update && \
useradd -m -u 1000 user && \
mkdir -p /storage/files /storage/cache /storage/logs && \
chown -R user:user /storage && \
mkdir -p /app/api && \
chown -R user:user /app
# Install runtime dependencies with proper repository update
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
curl \
gnupg \
libgmp-dev \
libmpfr-dev \
libmpc-dev \
libssl-dev \
postgresql-client \
redis-tools && \
# Install Node.js from NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
# Install npm separately
npm install -g npm@latest && \
# Cleanup
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set up directory structure
WORKDIR /app
RUN mkdir -p api web && chown -R user:user /app
# Copy Python environment and files
COPY --from=python-builder --chown=user /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages
COPY --chown=user api/ /app/api/
# Copy Next.js files with explicit directory creation
RUN mkdir -p /app/web/.next/standalone /app/web/.next/static
COPY --from=web-builder --chown=user /app/web/.next/standalone /app/web/.next/standalone
COPY --from=web-builder --chown=user /app/web/.next/static /app/web/.next/static
COPY --from=web-builder --chown=user /app/web/public /app/web/public
# Set environment variables for HF Spaces compatibility
ENV FLASK_APP=app.py \
EDITION=SELF_HOSTED \
DEPLOY_ENV=PRODUCTION \
PYTHONPATH=/app/api \
PATH="/usr/local/bin:${PATH}" \
STORAGE_DIR=/storage \
# Database configuration - match docker-compose.yaml
DB_USERNAME=postgres \
DB_PASSWORD=difyai123456 \
DB_HOST=db \
DB_PORT=5432 \
DB_DATABASE=dify \
SQLALCHEMY_POOL_SIZE=30 \
SQLALCHEMY_POOL_RECYCLE=3600 \
# Redis configuration - match docker-compose.yaml
REDIS_HOST=redis \
REDIS_PORT=6379 \
REDIS_PASSWORD=difyai123456 \
REDIS_DB=0
# Copy entrypoint script
COPY docker/entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
# Switch to non-root user
USER user
# HF Spaces uses port 7860
EXPOSE 7860 3000
# Set up storage volumes
VOLUME ["/storage/files", "/storage/cache", "/storage/logs"]
WORKDIR /app
CMD ["./entrypoint.sh"] |