gijl commited on
Commit
6ce6322
·
verified ·
1 Parent(s): 3b96db4

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +49 -0
  2. run.sh +104 -0
Dockerfile ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ===================================================================
2
+ # Open WebUI + llama.cpp (بديل خفيف عن Ollama)
3
+ # llama.cpp يقدم OpenAI-compatible API على المنفذ 8080
4
+ # Open WebUI يتصل به كـ OpenAI endpoint مباشرة
5
+ # ===================================================================
6
+ FROM ghcr.io/open-webui/open-webui:main
7
+
8
+ # ------------------------------------------------------------------
9
+ # متغيرات البيئة
10
+ # ------------------------------------------------------------------
11
+ # مسارات التخزين الدائم (نفس هيكلك السابق)
12
+ ENV MODELS_DIR=/data/models
13
+ ENV DATA_DIR=/data/webui
14
+ ENV PORT=7860
15
+ ENV HOST=0.0.0.0
16
+
17
+ # توجيه Open WebUI إلى خادم llama.cpp بدلاً من Ollama
18
+ ENV OPENAI_API_BASE_URL=http://localhost:8080/v1
19
+ ENV OPENAI_API_KEY=sk-llama-cpp-local
20
+
21
+ # إيقاف Ollama تماماً - لا نحتاجه
22
+ ENV ENABLE_OLLAMA_API=false
23
+
24
+ # تفعيل OpenAI API (يتصل بـ llama.cpp)
25
+ ENV ENABLE_OPENAI_API=true
26
+
27
+ # ------------------------------------------------------------------
28
+ # تثبيت المتطلبات
29
+ # ------------------------------------------------------------------
30
+ RUN apt-get update && apt-get install -y --no-install-recommends \
31
+ curl \
32
+ libgomp1 \
33
+ && rm -rf /var/lib/apt/lists/*
34
+
35
+ # أداة تحميل النماذج من Hugging Face
36
+ RUN pip install -U huggingface_hub --no-cache-dir
37
+
38
+ # تثبيت llama-cpp-python مع دعم الخادم (OpenAI-compatible server)
39
+ # CMAKE_ARGS تُفعّل OpenBLAS لتسريع الحسابات على CPU
40
+ RUN CMAKE_ARGS="-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS" \
41
+ pip install llama-cpp-python[server] --no-cache-dir
42
+
43
+ # ------------------------------------------------------------------
44
+ # سكريبت التشغيل
45
+ # ------------------------------------------------------------------
46
+ COPY run.sh /app/run.sh
47
+ RUN chmod +x /app/run.sh
48
+
49
+ CMD ["/app/run.sh"]
run.sh ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # ===================================================================
5
+ # إعدادات المسارات (نفس هيكل التخزين السابق)
6
+ # ===================================================================
7
+ MODELS_DIR="/data/models"
8
+ MODEL_FILE="gemma-4-E2B-it-UD-Q5_K_XL.gguf"
9
+ MMPROJ_FILE="mmproj-BF16.gguf"
10
+ LLAMA_PORT=8080
11
+
12
+ # ===================================================================
13
+ # إنشاء المجلدات في التخزين الدائم
14
+ # ===================================================================
15
+ mkdir -p "$MODELS_DIR"
16
+ mkdir -p /data/webui
17
+
18
+ # ===================================================================
19
+ # تحميل النموذج من Hugging Face (إن لم يكن موجوداً)
20
+ # نحفظه مباشرة في /data/models بدون نسخ إضافية
21
+ # ===================================================================
22
+ if [ ! -f "$MODELS_DIR/$MODEL_FILE" ]; then
23
+ echo ">>> النموذج غير موجود، جارٍ التحميل من Hugging Face..."
24
+ huggingface-cli download gijl/gemma-4-E2B-it-GGUF "$MODEL_FILE" \
25
+ --local-dir "$MODELS_DIR" \
26
+ --local-dir-use-symlinks False
27
+ echo ">>> تم تحميل النموذج بنجاح."
28
+ else
29
+ echo ">>> النموذج موجود مسبقاً، تخطي التحميل."
30
+ fi
31
+
32
+ # تحميل ملف الرؤية (mmproj) إن لم يكن موجوداً
33
+ if [ ! -f "$MODELS_DIR/$MMPROJ_FILE" ]; then
34
+ echo ">>> تحميل ملف الرؤية (mmproj)..."
35
+ huggingface-cli download gijl/gemma-4-E2B-it-GGUF "$MMPROJ_FILE" \
36
+ --local-dir "$MODELS_DIR" \
37
+ --local-dir-use-symlinks False
38
+ fi
39
+
40
+ # ===================================================================
41
+ # تشغيل خادم llama.cpp
42
+ #
43
+ # مزايا على Ollama:
44
+ # - بلا daemon ثقيل في الخلفية
45
+ # - يقرأ ملف GGUF مباشرة (بدون نسخ أو blobs)
46
+ # - يستخدم mmap لتعيين الملف في الذاكرة (توفير RAM)
47
+ # - يدعم OpenAI API مباشرة
48
+ #
49
+ # خيارات الذاكرة:
50
+ # --mmap : يعيّن الملف في الذاكرة بدلاً من تحميله كاملاً (افتراضي)
51
+ # --no-mlock : يسمح للنظام بتبادل الصفحات (swap) عند الضغط
52
+ # --flash-attn : يقلل استهلاك ذاكرة الـ attention
53
+ # ===================================================================
54
+ echo ">>> تشغيل خادم llama.cpp على المنفذ $LLAMA_PORT..."
55
+ python3 -m llama_cpp.server \
56
+ --model "$MODELS_DIR/$MODEL_FILE" \
57
+ --clip_model_path "$MODELS_DIR/$MMPROJ_FILE" \
58
+ --host 0.0.0.0 \
59
+ --port $LLAMA_PORT \
60
+ --n_ctx 8192 \
61
+ --n_threads 2 \
62
+ --n_gpu_layers 0 \
63
+ --chat_format gemma \
64
+ --flash_attn true \
65
+ --use_mmap true \
66
+ --use_mlock false \
67
+ --verbose false &
68
+
69
+ LLAMA_PID=$!
70
+ echo ">>> PID خادم llama.cpp: $LLAMA_PID"
71
+
72
+ # ===================================================================
73
+ # انتظر حتى يصبح الخادم جاهزاً
74
+ # ===================================================================
75
+ echo ">>> انتظار جهوزية خادم llama.cpp..."
76
+ MAX_WAIT=120
77
+ WAITED=0
78
+ until curl -sf "http://localhost:$LLAMA_PORT/health" > /dev/null 2>&1; do
79
+ if [ $WAITED -ge $MAX_WAIT ]; then
80
+ echo "!!! فشل تشغيل خادم llama.cpp بعد ${MAX_WAIT} ثانية"
81
+ exit 1
82
+ fi
83
+ sleep 2
84
+ WAITED=$((WAITED + 2))
85
+ done
86
+ echo ">>> خادم llama.cpp جاهز! (استغرق ${WAITED} ثانية)"
87
+
88
+ # ===================================================================
89
+ # تصدير متغيرات Open WebUI للاتصال بـ llama.cpp
90
+ # ===================================================================
91
+ export OPENAI_API_BASE_URL="http://localhost:$LLAMA_PORT/v1"
92
+ export OPENAI_API_KEY="sk-llama-cpp-local"
93
+ export ENABLE_OLLAMA_API=false
94
+ export ENABLE_OPENAI_API=true
95
+ export DATA_DIR=/data/webui
96
+ export PORT=7860
97
+ export HOST=0.0.0.0
98
+
99
+ # ===================================================================
100
+ # تشغيل Open WebUI
101
+ # ===================================================================
102
+ echo ">>> تشغيل Open WebUI..."
103
+ cd /app/backend
104
+ exec bash start.sh