File size: 2,427 Bytes
ebafe4b
a73f005
96d818b
 
a73f005
 
 
96d818b
a73f005
96d818b
 
 
 
 
 
 
 
 
 
 
 
49e32ea
 
 
96d818b
49e32ea
ebafe4b
 
96d818b
 
 
a73f005
96d818b
ebafe4b
a73f005
96d818b
 
 
 
 
49e32ea
 
 
96d818b
 
 
 
 
 
ebafe4b
96d818b
49e32ea
 
96d818b
49e32ea
96d818b
 
 
 
 
 
 
 
 
 
 
 
 
a73f005
49e32ea
 
96d818b
49e32ea
 
96d818b
 
 
 
49e32ea
 
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
FROM public.ecr.aws/docker/library/python:3.12.11-slim-trixie AS builder

RUN apt-get update && \
    apt-get install -y \
        g++ \
        make \
        cmake \
        pkg-config \
        unzip \
        libcurl4-openssl-dev \
        build-essential \
        libopenblas-dev \
        git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Upgrade pip
RUN python3 -m pip install --upgrade pip

# Optional: CMake args for BLAS for llama-cpp-python installation
ENV CMAKE_ARGS="-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS"

WORKDIR /src

COPY requirements_aws.txt .

RUN pip install torch>=2.6.0+cpu --target=/install --index-url https://download.pytorch.org/whl/cpu \
&& pip install --no-cache-dir --target=/install sentence-transformers==5.1.2 --no-deps \
&& pip install --no-cache-dir --target=/install span-marker==1.7.0 --no-deps \
&& pip install --no-cache-dir --target=/install keybert==0.9.0 --no-deps \
&& pip install --no-cache-dir --target=/install -r requirements_aws.txt

# Stage 2: Final runtime image
FROM public.ecr.aws/docker/library/python:3.12.11-slim-trixie

RUN apt-get update && \
    apt-get install -y \
    libopenblas0 && \
    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.12/site-packages/

# Switch to the "user" user
USER user

# Set home to the user's home directory
ENV APP_HOME=/home/user

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 \
	LLAMA_CUBLAS=0
 
# Set the working directory to the user's home directory
WORKDIR $APP_HOME/app

# Copy the current directory contents into the container at $HOME/app setting the owner to the user
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

CMD ["python", "app.py"]