File size: 2,780 Bytes
01c88c0 ed5f8c7 641ff3e 37d982e 641ff3e 3f9e976 520f2c4 641ff3e 01c88c0 619a281 e5dfae7 a7adf55 01c88c0 ed5f8c7 01c88c0 7c7fd7c d0b63c6 7c7fd7c 3f9e976 01c88c0 641ff3e 71761cb 641ff3e 3f9e976 0b9e789 3f9e976 01c88c0 641ff3e 208e806 a265560 bf7bb79 3dc1171 7e8c1c9 05c20d6 641ff3e 71761cb 641ff3e a33b955 43287c3 a33b955 3f9e976 01c88c0 3f9e976 bf7bb79 a33b955 3f9e976 641ff3e a33b955 641ff3e 3f9e976 a33b955 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 88 89 90 91 92 93 94 95 96 97 98 99 |
# Stage 1: Build dependencies and download models
FROM public.ecr.aws/docker/library/python:3.11.11-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 \
git \
&& 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 .
COPY entrypoint.sh .
# Stage 2: Final runtime image
FROM public.ecr.aws/docker/library/python:3.11.11-slim-bookworm
# Define a build argument with a default value
ARG APP_MODE=gradio
# Echo the APP_MODE during the build to confirm its value
RUN echo "APP_MODE is set to: ${APP_MODE}"
# Set APP_MODE as an environment variable for runtime
ENV APP_MODE=${APP_MODE}
# 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,input,tld,logs,usage,feedback,config} \
&& chown -R user:user /home/user/app
# Copy installed packages from builder stage
COPY --from=builder /install /usr/local/lib/python3.11/site-packages/
# Download NLTK data packages - now no longer necessary
# RUN python -m nltk.downloader --quiet punkt stopwords punkt_tab
# Entrypoint helps to switch between Gradio and Lambda mode
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Switch to the "user" user
USER user
ENV APP_HOME=/home/user
# Set environmental variables
ENV PATH=$APP_HOME/.local/bin:$PATH \
PYTHONPATH=$APP_HOME/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_ANALYTICS_ENABLED=False \
TLDEXTRACT_CACHE=$APP_HOME/app/tld/.tld_set_snapshot \
SYSTEM=spaces
# Set the working directory to the user's home directory
WORKDIR $APP_HOME/app
# Copy the app code to the container
COPY --chown=user . $APP_HOME/app
# Ensure permissions are really user:user again after copying
RUN chown -R user:user $APP_HOME/app && chmod -R u+rwX $APP_HOME/app
ENTRYPOINT [ "/entrypoint.sh" ]
# Default command for Lambda mode
CMD [ "lambda_entrypoint.lambda_handler" ] |