gijl commited on
Commit
5c8a56f
·
verified ·
1 Parent(s): d1d467d

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +71 -36
Dockerfile CHANGED
@@ -1,36 +1,71 @@
1
- # استخدام الصورة الرسمية التي تدمج Open WebUI مع Ollama
2
- FROM ghcr.io/open-webui/open-webui:ollama
3
-
4
- # ── إعدادات المسارات الدائمة (HF Spaces يربط المخزن على /data) ──────────────
5
- ENV OLLAMA_MODELS=/data/ollama
6
- ENV DATA_DIR=/data/webui
7
- ENV PORT=7860
8
- ENV HOST=0.0.0.0
9
-
10
- # ── إبقاء النموذج في الذاكرة إلى الأبد (لا تفريغ عند الخمول) ───────────────
11
- ENV OLLAMA_KEEP_ALIVE=-1
12
-
13
- # ── إعدادات النموذج المراد تحميله من Hugging Face ────────────────────────────
14
- # غيّر هذه القيم فقط لتشغيل أي نموذج GGUF من HF دون تعديل أي شيء آخر:
15
- #
16
- # HF_REPO : مسار المستودع على HF (مثال: unsloth/gemma-4-E2B-it-GGUF)
17
- # HF_FILE : اسم ملف GGUF بدقة كما يظهر في المستودع
18
- # MODEL_NAME: الاسم الذي سيظهر به النموذج في واجهة Open WebUI
19
- # HF_TOKEN : (اختياري) مطلوب فقط للنماذج الخاصة/المحمية (gated models)
20
- ENV HF_REPO="gijl/gemma-4-E2B-it-GGUF"
21
- ENV HF_FILE="gemma-4-E2B-it-UD-Q5_K_XL.gguf"
22
- ENV MODEL_NAME="my-gemma"
23
- ENV HF_TOKEN=""
24
-
25
- # ── معاملات تشغيل النموذج (يمكن تعديلها حسب حجم النموذج والذاكرة المتاحة) ──
26
- ENV MODEL_CTX=128000
27
- ENV MODEL_THREADS=2
28
-
29
- # تثبيت أداة Hugging Face
30
- RUN pip install -U huggingface_hub
31
-
32
- # نسخ سكريبت التشغيل
33
- COPY run.sh /app/run.sh
34
- RUN chmod +x /app/run.sh
35
-
36
- CMD ["/app/run.sh"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # تحديد المسارات الأساسية
4
+ MODELS_DIR="/data/models"
5
+ MODEL_FILE="gemma-4-E2B-it-UD-Q5_K_XL.gguf"
6
+ OLLAMA_MODEL_NAME="my-gemma"
7
+
8
+ # إنشاء المجلدات المطلوبة في المخزن الدائم (بما فيها كاش Hugging Face)
9
+ mkdir -p "$MODELS_DIR"
10
+ mkdir -p /data/ollama
11
+ mkdir -p /data/webui
12
+ mkdir -p /data/.hf_cache
13
+
14
+ # تشغيل خادم Ollama في الخلفية
15
+ echo "Starting Ollama server in background..."
16
+ OLLAMA_MODELS=/data/ollama ollama serve &
17
+
18
+ # [العامل الخلفي] دالة مستقلة لمعالجة النموذج دون تعطيل إقلاع الواجهة
19
+ launch_model_setup_async() {
20
+ echo "[Async Worker] Checking Ollama availability..."
21
+ # الانتظار الذكي حتى يستجيب خادم Ollama بالكامل
22
+ while [ "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:11434/api/tags)" != "200" ]; do
23
+ sleep 3
24
+ done
25
+ echo "[Async Worker] Ollama server is ready."
26
+
27
+ # خطوة حاسمة: التحقق مما إذا كان النموذج مسجلاً مسبقاً لتوفير وقت الإقلاع اللاحق
28
+ if ollama list | grep -q "$OLLAMA_MODEL_NAME"; then
29
+ echo "[Async Worker] Model '$OLLAMA_MODEL_NAME' already registered in Ollama. Ready to chat!"
30
+ return 0
31
+ fi
32
+
33
+ # التحقق من وجود الملف الفعلي أو تحميله
34
+ if [ ! -f "$MODELS_DIR/$MODEL_FILE" ]; then
35
+ echo "[Async Worker] Model file not found. Downloading from Hugging Face..."
36
+ huggingface-cli download gijl/gemma-4-E2B-it-GGUF "$MODEL_FILE" \
37
+ --local-dir "$MODELS_DIR"
38
+ else
39
+ echo "[Async Worker] Model file detected in persistent storage."
40
+ fi
41
+
42
+ # تحميل ملف الرؤية (Adapter)
43
+ if [ ! -f "$MODELS_DIR/mmproj-BF16.gguf" ]; then
44
+ echo "[Async Worker] Downloading vision adapter..."
45
+ huggingface-cli download gijl/gemma-4-E2B-it-GGUF mmproj-BF16.gguf \
46
+ --local-dir "$MODELS_DIR"
47
+ fi
48
+
49
+ # إنشاء ملف الـ Modelfile ديناميكياً
50
+ echo "[Async Worker] Creating Modelfile..."
51
+ cat <<EOF > "$MODELS_DIR/Modelfile"
52
+ FROM $MODELS_DIR/$MODEL_FILE
53
+ # لتفعيل ميزة قراءة الصور لاحقاً، يمكنك إلغاء التعليق (#) عن السطر أدناه:
54
+ # ADAPTER $MODELS_DIR/mmproj-BF16.gguf
55
+
56
+ PARAMETER num_ctx 8192
57
+ EOF
58
+
59
+ # تسجيل النموذج في Ollama (يحدث الآن في الخلفية بأمان)
60
+ echo "[Async Worker] Registering model with Ollama..."
61
+ ollama create "$OLLAMA_MODEL_NAME" -f "$MODELS_DIR/Modelfile"
62
+ echo "[Async Worker] Task complete! Model '$OLLAMA_MODEL_NAME' is active."
63
+ }
64
+
65
+ # إطلاق عامل الخلفية كعملية منفصلة (تفرع باكتملال &)
66
+ launch_model_setup_async &
67
+
68
+ # تشغيل واجهة Open WebUI فوراً (يتولى الصدارة لمنع انهيار الحاوية بسبب مهلة الوقت)
69
+ echo "Launching Open WebUI interface immediately to pass host health checks..."
70
+ cd /app/backend
71
+ exec bash start.sh