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" ]