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