File size: 3,264 Bytes
9d44f8c
 
 
 
 
 
 
 
08dc3ef
 
 
9d44f8c
 
08dc3ef
 
 
 
 
 
 
9d44f8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
08dc3ef
 
 
 
 
 
 
ac6c827
 
 
 
 
 
 
 
9d44f8c
08dc3ef
 
 
 
 
9d44f8c
08dc3ef
 
 
 
 
 
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
# THE Z AI — Computer Mode Server v20.2 "Headless-Native + Camoufox"
# أخف بكثير من Dockerfile السابق (v11-v13): لا حاجة لـ Xvfb, xdotool,
# ImageMagick, x11-apps, أو python-xlib — Chromium بوضع headless=new يغني
# عن كل ذلك (لا X server منفصل، لا أدوات التقاط شاشة خارجية).
#
# إضافة v20.2: مكتبات نظام لدعم Camoufox (Firefox معدَّل مضاد للكشف) كمحرك
# بديل اختياري — يُستخدم فقط عند طلب switch_engine صراحة، فلا يُثقّل التشغيل
# العادي (Chromium يبقى المحرك الافتراضي السريع لكل الجلسات).

FROM python:3.11-slim

# Chromium (المحرك الافتراضي) + مكتبات نظام Firefox/Camoufox (المحرك البديل
# المضاد للكشف) + خطوط متعددة اللغات لعرض صحيح للعربية والصينية واليابانية.
RUN apt-get update && apt-get install -y --no-install-recommends \
    chromium \
    fonts-liberation \
    fonts-noto \
    fonts-noto-cjk \
    ca-certificates \
    curl \
    libasound2 \
    libatk1.0-0 \
    libcairo-gobject2 \
    libcairo2 \
    libdbus-1-3 \
    libfontconfig1 \
    libfreetype6 \
    libgdk-pixbuf-2.0-0 \
    libglib2.0-0 \
    libgtk-3-0 \
    libpango-1.0-0 \
    libpangocairo-1.0-0 \
    libx11-6 \
    libx11-xcb1 \
    libxcb-shm0 \
    libxcb1 \
    libxcomposite1 \
    libxcursor1 \
    libxdamage1 \
    libxext6 \
    libxfixes3 \
    libxi6 \
    libxrandr2 \
    libxrender1 \
    fonts-noto-color-emoji \
    fonts-unifont \
    fonts-ipafont-gothic \
    fonts-wqy-zenhei \
    fonts-freefont-ttf \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# ملاحظة v20.2.1: ثنائي Firefox المعدَّل الخاص بـ Camoufox لا يُنزَّل هنا وقت
# البناء — كان هذا يسبب "Job timeout" على HF Spaces لأن مجموع (apt + pip +
# تحميل Camoufox ~150-300MB) يتجاوز مهلة البناء المسموحة. بدلاً من ذلك،
# camoufox يُنزّل تلقائياً بأمان عند أول استخدام فعلي فقط (أول مرة يُرسل
# فيها action:"switch_engine" بـ engine:"camoufox") — انظر CamoufoxSession.start()
# في app.py: أول تشغيل قد يستغرق دقيقة إضافية (تحميل لمرة واحدة، يُخزَّن
# بعدها بشكل دائم داخل الحاوية)، لكن البناء نفسه يصبح أسرع بكثير ولا يتوقف.
# Chromium (المحرك الافتراضي السريع) يبقى جاهزاً فوراً بدون أي تأخير كالمعتاد.

COPY app.py .

# مستخدم غير root (مطلوب لتشغيل Chromium بأمان بدون --no-sandbox في بعض البيئات،
# لكن نبقي --no-sandbox في app.py لأن الحاويات المُدارة مثل HF Spaces عادة تمنع
# إنشاء namespaces اللازمة لـ sandbox الكامل لـ Chromium على أي حال)
RUN useradd -m -u 1000 zai && chown -R zai:zai /app
USER zai
ENV HOME=/home/zai

EXPOSE 7860

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