Skip to content

Commit 5a4b1e6

Browse files
update
1 parent 483579d commit 5a4b1e6

6 files changed

Lines changed: 193 additions & 35 deletions

File tree

containers/browser-service/Dockerfile

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,11 @@ FROM debian:bullseye-slim
33
# Temporarily redirect interactive dialogs during installation
44
ENV DEBIAN_FRONTEND=noninteractive
55

6-
# Ustawienie zmiennych środowiskowych dla pip, aby zoptymalizować cache
7-
ENV PIP_NO_CACHE_DIR=0 \
8-
PIP_DISABLE_PIP_VERSION_CHECK=1 \
9-
PYTHONDONTWRITEBYTECODE=1 \
6+
# Ustawienie zmiennych środowiskowych dla pip
7+
ENV PYTHONDONTWRITEBYTECODE=1 \
108
PYTHONUNBUFFERED=1 \
11-
PIP_CACHE_DIR=/root/.cache/pip \
129
DISPLAY=:99
1310

14-
# Utworzenie katalogów dla cache
15-
RUN mkdir -p /root/.cache/pip /root/.cache/pip/wheels /root/.cache/google-chrome
16-
1711
# Install dependencies
1812
RUN apt-get update && apt-get install -y xvfb
1913
RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -140,7 +134,7 @@ RUN echo '[DEBUG] Creating application directory structure...'; \
140134
# Copy scripts
141135
COPY scripts/ /opt/scripts/
142136
RUN echo '[DEBUG] Setting execution permissions for .sh scripts...'; \
143-
chmod +x /opt/scripts/*.sh; \
137+
chmod +x /opt/scripts/*.sh || true; \
144138
echo '[DEBUG] .sh scripts have execution permissions.'
145139

146140
# Copy configuration files
@@ -150,10 +144,9 @@ RUN echo '[DEBUG] Copied supervisord.conf configuration file.'
150144
# Copy requirements.txt first for better caching
151145
COPY requirements.txt /app/
152146

153-
# Install Python dependencies with cache
154-
RUN --mount=type=cache,target=/root/.cache/pip \
155-
echo '[DEBUG] Installing Python dependencies...'; \
156-
pip3 install --cache-dir=/root/.cache/pip -r /app/requirements.txt; \
147+
# Install Python dependencies without using BuildKit
148+
RUN echo '[DEBUG] Installing Python dependencies...'; \
149+
pip3 install --no-cache-dir -r /app/requirements.txt; \
157150
echo '[DEBUG] Python dependencies installation completed.'
158151

159152
# Configure TigerVNC
Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,62 @@
1-
FROM python:3.9-slim
1+
FROM python:3.9-slim as builder
2+
3+
# Ustawienie zmiennych środowiskowych
4+
ENV PYTHONDONTWRITEBYTECODE=1 \
5+
PYTHONUNBUFFERED=1 \
6+
PIP_NO_CACHE_DIR=0 \
7+
PIP_DISABLE_PIP_VERSION_CHECK=1
28

3-
# Instalacja zależności systemowych
9+
# Instalacja podstawowych zależności systemowych
410
RUN apt-get update && apt-get install -y --no-install-recommends \
511
build-essential \
6-
git \
7-
curl \
8-
wget \
9-
ca-certificates \
1012
&& rm -rf /var/lib/apt/lists/*
1113

14+
# Utworzenie katalogu aplikacji
1215
WORKDIR /app
1316

14-
# Ustawienie zmiennych środowiskowych dla pip
17+
# Kopiowanie tylko pliku requirements.txt, aby wykorzystać cache Docker
18+
COPY containers/llm-orchestrator-min/requirements.txt .
19+
20+
# Instalacja zależności Pythona z wykorzystaniem cache
21+
RUN --mount=type=cache,target=/root/.cache/pip \
22+
pip install --upgrade pip && \
23+
pip wheel --wheel-dir=/app/wheels -r requirements.txt
24+
25+
# Druga faza - obraz docelowy
26+
FROM python:3.9-slim
27+
28+
# Ustawienie zmiennych środowiskowych
1529
ENV PYTHONDONTWRITEBYTECODE=1 \
1630
PYTHONUNBUFFERED=1 \
17-
# Domyślny port API - można nadpisać przy uruchomieniu kontenera
18-
API_PORT=5000 \
19-
# Domyślne ustawienia optymalizacji
20-
USE_INT8=true
31+
USE_INT8=true \
32+
API_PORT=5000
33+
34+
# Instalacja podstawowych zależności systemowych
35+
RUN apt-get update && apt-get install -y --no-install-recommends \
36+
wget \
37+
&& rm -rf /var/lib/apt/lists/*
2138

22-
# Utworzenie katalogów dla aplikacji
23-
RUN mkdir -p /app/models /app/config /app/model-configs /app/data
39+
# Utworzenie katalogu aplikacji
40+
WORKDIR /app
2441

25-
# Kopiowanie tylko pliku requirements.txt najpierw, aby lepiej wykorzystać cache
42+
# Kopiowanie skompilowanych pakietów z poprzedniej fazy
43+
COPY --from=builder /app/wheels /app/wheels
2644
COPY containers/llm-orchestrator-min/requirements.txt .
2745

28-
# Instalacja zależności bez użycia BuildKit
29-
RUN pip install --no-cache-dir -r requirements.txt
46+
# Instalacja pakietów z lokalnych plików wheel
47+
RUN pip install --no-index --find-links=/app/wheels -r requirements.txt && \
48+
rm -rf /app/wheels
3049

31-
# Kopiowanie pozostałych plików aplikacji
50+
# Kopiowanie kodu aplikacji
3251
COPY containers/llm-orchestrator-min/api.py ./
3352
COPY containers/llm-orchestrator-min/model-configs/ ./model-configs/
3453
COPY containers/llm-orchestrator-min/data/ ./data/
3554

36-
# Pobieranie małego modelu LLM (TinyLlama-1.1B) tylko jeśli nie istnieje
37-
# Używamy wolumenu, aby zachować model między uruchomieniami
55+
# Pobieranie modelu
3856
ARG MODEL_VERSION=1.0
3957
RUN mkdir -p /app/models/tinyllama
4058

41-
# Skrypt do sprawdzania i pobierania modelu tylko jeśli jest to konieczne
59+
# Skrypt do pobierania modelu
4260
RUN echo '#!/bin/bash \n\
4361
if [ ! -f /app/models/tinyllama/pytorch_model.bin ]; then \n\
4462
echo "Pobieranie modelu TinyLlama..." \n\
@@ -52,8 +70,12 @@ else \n\
5270
echo "Model TinyLlama już istnieje, pomijanie pobierania." \n\
5371
fi' > /app/download_model.sh && chmod +x /app/download_model.sh
5472

55-
# Ekspozycja portu API - domyślnie 5000, ale można zmienić przez zmienną środowiskową API_PORT
73+
# Dodanie skryptów diagnostycznych i naprawczych
74+
COPY containers/llm-orchestrator-min/scripts/ /app/scripts/
75+
RUN chmod +x /app/scripts/*.sh || echo "No scripts to make executable"
76+
77+
# Ekspozycja portu API
5678
EXPOSE ${API_PORT}
5779

58-
# Uruchomienie API z wcześniejszym sprawdzeniem modelu
80+
# Uruchomienie aplikacji
5981
CMD ["/bin/bash", "-c", "/app/download_model.sh && python -u api.py"]

containers/llm-orchestrator-min/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ python-dotenv==1.0.0
1111
psutil==5.9.5
1212
bitsandbytes==0.40.2
1313
protobuf==3.20.3
14+
accelerate==0.20.3
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash
2+
3+
# Skrypt do diagnostyki API LLM
4+
# Autor: Tom
5+
# Data: 2025-05-13
6+
7+
echo "=== Diagnostyka API LLM ==="
8+
echo "Sprawdzanie procesów Python..."
9+
pgrep -a python || echo "Brak uruchomionych procesów Python!"
10+
11+
echo -e "\nSprawdzanie dostępności API na porcie ${API_PORT:-5000}..."
12+
curl -s http://localhost:${API_PORT:-5000}/api/health || echo "API nie odpowiada na endpoint /api/health!"
13+
14+
echo -e "\nSprawdzanie zależności Pythona..."
15+
pip list | grep -E 'torch|transformers|accelerate|protobuf|bitsandbytes'
16+
17+
echo -e "\nSprawdzanie dostępności modelu..."
18+
if [ -f /app/models/tinyllama/pytorch_model.bin ]; then
19+
echo "Model TinyLlama istnieje ($(du -h /app/models/tinyllama/pytorch_model.bin | cut -f1))"
20+
else
21+
echo "BŁĄD: Model TinyLlama nie istnieje!"
22+
fi
23+
24+
echo -e "\nSprawdzanie logów aplikacji..."
25+
tail -n 50 /var/log/api.log 2>/dev/null || echo "Brak pliku logów /var/log/api.log"
26+
27+
echo -e "\nSprawdzanie wykorzystania zasobów..."
28+
free -h
29+
df -h
30+
top -b -n 1 | head -n 20
31+
32+
echo "=== Diagnostyka zakończona ==="
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
3+
# Skrypt do naprawy typowych problemów z API LLM
4+
# Autor: Tom
5+
# Data: 2025-05-13
6+
7+
echo "=== Naprawa typowych problemów API LLM ==="
8+
9+
# Sprawdzenie i naprawienie brakujących zależności
10+
echo "Sprawdzanie i instalacja brakujących zależności..."
11+
pip install --no-cache-dir torch==2.0.1 transformers==4.30.2 accelerate==0.20.3 protobuf==3.20.3 bitsandbytes==0.40.2 2>/dev/null
12+
13+
# Sprawdzenie i pobranie modelu jeśli brakuje
14+
if [ ! -f /app/models/tinyllama/pytorch_model.bin ]; then
15+
echo "Model TinyLlama nie istnieje, pobieram..."
16+
mkdir -p /app/models/tinyllama
17+
cd /app/models/tinyllama
18+
wget -q https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0/resolve/main/tokenizer.model
19+
wget -q https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0/resolve/main/tokenizer_config.json
20+
wget -q https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0/resolve/main/config.json
21+
wget -q https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0/resolve/main/pytorch_model.bin
22+
echo "Model pobrany pomyślnie."
23+
else
24+
echo "Model TinyLlama istnieje, pomijam pobieranie."
25+
fi
26+
27+
# Sprawdzenie i restart API
28+
echo "Sprawdzanie czy API działa..."
29+
if ! curl -s http://localhost:${API_PORT:-5000}/api/health > /dev/null; then
30+
echo "API nie odpowiada, restartuję..."
31+
pkill -f "python -u api.py" || true
32+
nohup python -u api.py > /var/log/api.log 2>&1 &
33+
echo "API zrestartowane, czekam 10 sekund na uruchomienie..."
34+
sleep 10
35+
if curl -s http://localhost:${API_PORT:-5000}/api/health > /dev/null; then
36+
echo "API działa poprawnie!"
37+
else
38+
echo "BŁĄD: API nadal nie odpowiada po restarcie."
39+
fi
40+
else
41+
echo "API działa poprawnie!"
42+
fi
43+
44+
# Czyszczenie cache Pythona
45+
echo "Czyszczenie niepotrzebnych plików cache..."
46+
find /root/.cache -type f -name "*.json" -delete
47+
find /tmp -type f -name "*.py[co]" -delete 2>/dev/null || true
48+
49+
echo "=== Naprawa zakończona ==="
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/bash
2+
3+
# Skrypt do testowania API LLM
4+
# Autor: Tom
5+
# Data: 2025-05-13
6+
7+
echo "=== Testy API LLM ==="
8+
9+
API_PORT=${API_PORT:-5000}
10+
API_URL="http://localhost:$API_PORT"
11+
TESTS_PASSED=0
12+
TESTS_FAILED=0
13+
14+
# Funkcja do testowania endpointu
15+
test_endpoint() {
16+
local endpoint=$1
17+
local method=${2:-GET}
18+
local data=$3
19+
local expected_status=${4:-200}
20+
21+
echo -n "Test $endpoint ($method): "
22+
23+
if [ "$method" == "GET" ]; then
24+
response=$(curl -s -o /dev/null -w "%{http_code}" $API_URL$endpoint)
25+
else
26+
response=$(curl -s -o /dev/null -w "%{http_code}" -X $method -H "Content-Type: application/json" -d "$data" $API_URL$endpoint)
27+
fi
28+
29+
if [ "$response" == "$expected_status" ]; then
30+
echo "OK (status $response)"
31+
TESTS_PASSED=$((TESTS_PASSED+1))
32+
else
33+
echo "BŁĄD (oczekiwano: $expected_status, otrzymano: $response)"
34+
TESTS_FAILED=$((TESTS_FAILED+1))
35+
fi
36+
}
37+
38+
# Test 1: Endpoint zdrowia
39+
test_endpoint "/api/health"
40+
41+
# Test 2: Endpoint generowania tekstu
42+
test_endpoint "/api/generate" "POST" '{"prompt": "Hello, how are you?", "max_length": 50}' 200
43+
44+
# Test 3: Endpoint generowania z nieprawidłowymi danymi
45+
test_endpoint "/api/generate" "POST" '{"invalid": "data"}' 400
46+
47+
# Test 4: Nieistniejący endpoint
48+
test_endpoint "/api/nonexistent" "GET" "" 404
49+
50+
# Podsumowanie testów
51+
echo -e "\n=== Podsumowanie testów ==="
52+
echo "Testy udane: $TESTS_PASSED"
53+
echo "Testy nieudane: $TESTS_FAILED"
54+
55+
if [ $TESTS_FAILED -eq 0 ]; then
56+
echo "Wszystkie testy zakończone sukcesem!"
57+
exit 0
58+
else
59+
echo "Niektóre testy nie powiodły się. Sprawdź logi."
60+
exit 1
61+
fi

0 commit comments

Comments
 (0)