File size: 5,028 Bytes
39c82d4
29c235c
39c82d4
 
 
 
 
 
b16a042
 
bab8f6d
0f4bc68
bab8f6d
7b5402d
b16a042
 
 
 
 
 
 
 
 
faa1ee3
9bca023
 
 
2ec410f
39c82d4
 
de03d4b
 
17e9f19
 
 
39c82d4
 
d8dae77
219c282
17e9f19
 
 
 
4d889a8
17e9f19
 
 
 
9bca023
 
17e9f19
 
 
 
4d889a8
17e9f19
4d889a8
 
 
 
39c82d4
17e9f19
39c82d4
17e9f19
39c82d4
1f8e9f5
 
b09deac
 
 
 
 
 
 
 
 
 
29c235c
 
 
 
 
 
d8dae77
810e0e0
 
 
b5aebe0
 
 
d11461c
b5aebe0
d11461c
b5aebe0
 
 
8214c69
 
d11461c
b5aebe0
 
 
8214c69
 
b5aebe0
8214c69
b5aebe0
 
d8dae77
d11461c
8214c69
1f8e9f5
 
 
39c82d4
8763181
9bca023
 
8763181
 
 
9bca023
920a576
39c82d4
 
 
17e9f19
 
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

FROM python:3.11-slim

# Install system dependencies
RUN apt-get update && apt-get install -y \
    wget \
    curl \
    fonts-dejavu \
    ca-certificates \
    fonts-liberation \
    xvfb \
    unzip \
    dbus-x11 \
    gnupg \
    libnss3 \
    libxss1 \
    libasound2 \
    libatk-bridge2.0-0 \
    libgtk-3-0 \
    libdrm2 \
    libgbm1 \
    libu2f-udev \
    xdg-utils \
    --no-install-recommends \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
    && apt-get update \
    && apt-get install -y google-chrome-stable && google-chrome-stable --version \
    && rm -rf /var/lib/apt/lists/*

RUN apt-get update && apt-get install -y jq

# Set up Xvfb and working directory
ENV DISPLAY=:99
RUN mkdir -p /tmp/.xvfb && chmod 1777 /tmp/.xvfb
WORKDIR /app



# Configure environment
ENV MPLCONFIGDIR=/tmp/matplotlib \
    XDG_CACHE_HOME=/tmp/.cache \
    XDG_CONFIG_HOME=/tmp/.config \
    XDG_DATA_HOME=/tmp/.local/share \
    FONTCONFIG_PATH=/etc/fonts \
    FONTCONFIG_FILE=/etc/fonts/fonts.conf \
    FONTCONFIG_CACHE=/tmp/fontconfig \
    GRADIO_TEMP_DIR=/tmp/gradio \
    CHROMEDRIVER_PATH=/usr/local/bin/chromedriver \
    CHROME_BIN=/usr/bin/google-chrome-stable

# Create directories with correct permissions
RUN mkdir -p ${XDG_CACHE_HOME} && chmod 777 ${XDG_CACHE_HOME} \
    && mkdir -p ${XDG_CONFIG_HOME} && chmod 777 ${XDG_CONFIG_HOME} \
    && mkdir -p ${XDG_DATA_HOME} && chmod 777 ${XDG_DATA_HOME} \
    && mkdir -p ${FONTCONFIG_CACHE} && chmod 777 ${FONTCONFIG_CACHE} \
    && mkdir -p /app/flagged && chmod 777 /app/flagged \
    && mkdir -p /tmp/.local/share/applications \
    && touch /tmp/.local/share/applications/mimeapps.list \
    && chmod 777 /tmp/.local/share/applications/mimeapps.list

# Install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Install ChromeDriver - Manual version specification
# Check Chrome version first and then install matching ChromeDriver

# RUN CHROME_VERSION=$(google-chrome-stable --version | awk '{print $3}' | cut -d'.' -f1) \
#     && echo "Chrome major version: $CHROME_VERSION" \
#     && CHROME_DRIVER_VERSION=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION) \
#     && echo "Installing ChromeDriver version: $CHROME_DRIVER_VERSION" \
#     && wget -q https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip \
#     && unzip chromedriver_linux64.zip \
#     && rm chromedriver_linux64.zip \
#     && mv chromedriver /usr/local/bin/ \
#     && chmod +x /usr/local/bin/chromedriver

# Hardcoded ChromeDriver version (replace with the version you need)
# RUN wget -q https://huggingface.co/datasets/Juna190825/chromedriver/resolve/main/chromedriver \
#    && mv chromedriver /usr/local/bin/ \
#    && chmod +x /usr/local/bin/chromedriver

COPY install_chromedriver.sh /tmp/install_chromedriver.sh
# RUN apt-get install -y dos2unix && dos2unix /tmp/install_chromedriver.sh
# RUN bash /tmp/install_chromedriver.sh && /tmp/install_chromedriver.sh
RUN bash -c '\
    CHROME_VERSION=$(google-chrome-stable --version | awk "{print \$3}" | cut -d"." -f1); \
    echo "Detected Chrome major version: $CHROME_VERSION"; \
    if [ "$CHROME_VERSION" -ge 115 ]; then \
        CHROMEDRIVER_VERSION=$(curl -s https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json | \
            jq -r ".channels.Stable.downloads.chromedriver[0].version"); \
        DRIVER_URL=$(curl -s https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json | \
            jq -r ".channels.Stable.downloads.chromedriver[0].url"); \
        echo "Using ChromeDriver version: $CHROMEDRIVER_VERSION from $DRIVER_URL"; \
        wget -q "$DRIVER_URL" -O chromedriver.zip; \
        unzip chromedriver.zip; \
        mv chromedriver-linux64/chromedriver /usr/local/bin/; \
    else \
        CHROMEDRIVER_VERSION=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_"$CHROME_VERSION"); \
        echo "Using legacy ChromeDriver version: $CHROMEDRIVER_VERSION"; \
        wget -q https://chromedriver.storage.googleapis.com/"$CHROMEDRIVER_VERSION"/chromedriver_linux64.zip -O chromedriver.zip; \
        unzip chromedriver.zip; \
        mv chromedriver /usr/local/bin/; \
    fi; \
    rm -rf chromedriver.zip chromedriver-linux64; \
    chmod +x /usr/local/bin/chromedriver'




# Verify installations
RUN echo "Chrome version:" && google-chrome-stable --version \
    && echo "ChromeDriver version:" && chromedriver --version

# Ensure proper port exposure
EXPOSE 7860
EXPOSE 9222

# Add health check
HEALTHCHECK --interval=30s --timeout=30s \
  CMD curl -f http://localhost:7860 || exit 1

# Copy application
COPY . .

# Start script
CMD ["sh", "-c", "Xvfb :99 -screen 0 1024x768x24 & python app.py"]