File size: 2,486 Bytes
01c88c0 641ff3e 37d982e 641ff3e 3f9e976 641ff3e 01c88c0 619a281 e5dfae7 01c88c0 d0b63c6 3f9e976 01c88c0 641ff3e 71761cb 641ff3e 3f9e976 01c88c0 3f9e976 01c88c0 641ff3e 7e8c1c9 d0b63c6 7e8c1c9 d0b63c6 7e8c1c9 641ff3e 71761cb 641ff3e 43287c3 641ff3e 3f9e976 01c88c0 3f9e976 01c88c0 3f9e976 641ff3e 3f9e976 71761cb 641ff3e 3f9e976 e5dfae7 3f9e976 |
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 |
# Stage 1: Build dependencies and download models
FROM public.ecr.aws/docker/library/python:3.11.9-slim-bookworm AS builder
# Install system dependencies. Need to specify -y for poppler to get it to install
RUN apt-get update \
&& apt-get install -y \
g++ \
make \
cmake \
unzip \
libcurl4-openssl-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
COPY requirements.txt .
RUN pip install --no-cache-dir --target=/install -r requirements.txt
RUN rm requirements.txt
# Add lambda_entrypoint.py to the container
COPY lambda_entrypoint.py .
# Stage 2: Final runtime image
FROM public.ecr.aws/docker/library/python:3.11.9-slim-bookworm
# Define a build argument for the mode (gradio or lambda)
ARG APP_MODE=gradio
# Install system dependencies
RUN apt-get update \
&& apt-get install -y \
tesseract-ocr \
poppler-utils \
libgl1-mesa-glx \
libglib2.0-0 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Set up a new user named "user" with user ID 1000
RUN useradd -m -u 1000 user
# Create required directories
RUN mkdir -p /home/user/app/output \
&& mkdir -p /home/user/app/tld \
&& mkdir -p /home/user/app/logs \
&& chown -R user:user /home/user/app
# Copy installed packages from builder stage
COPY --from=builder /install /usr/local/lib/python3.11/site-packages/
# Use a conditional entrypoint based on the APP_MODE argument
RUN if [ "$APP_MODE" = "lambda" ]; then \
echo '#!/bin/sh\nexec python -m awslambdaric' > /entrypoint.sh; \
else \
echo '#!/bin/sh\nexec python app.py' > /entrypoint.sh; \
fi && chmod +x /entrypoint.sh
# Switch to the "user" user
USER user
# Set environmental variables
ENV HOME=/home/user \
PATH=/home/user/.local/bin:$PATH \
PYTHONPATH=/home/user/app \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
GRADIO_ALLOW_FLAGGING=never \
GRADIO_NUM_PORTS=1 \
GRADIO_SERVER_NAME=0.0.0.0 \
GRADIO_SERVER_PORT=7860 \
GRADIO_THEME=huggingface \
TLDEXTRACT_CACHE=$HOME/app/tld/.tld_set_snapshot \
SYSTEM=spaces
# Set the working directory to the user's home directory
WORKDIR $HOME/app
# Copy the app code to the container
COPY --chown=user . $HOME/app
ENTRYPOINT [ "/entrypoint.sh" ]
# Default command for Lambda mode
CMD [ "lambda_entrypoint.lambda_handler" ] |