build: panel w osobnym kontenerze za nginxem

Rozdzielenie na dwie niezależne usługi:

- frontend/Dockerfile buduje panel w etapie node:22-alpine, a artefakt
  serwuje nginx:1.27-alpine. Obraz nie zawiera Node'a ani źródeł.
- frontend/nginx.conf serwuje aplikację jednostronicową (nieznane ścieżki
  wracają jako index.html), cache'uje /assets z sumą kontrolną w nazwie,
  a /api i /ws przekazuje do usługi discord-bot. Przeglądarka widzi jedno
  źródło, więc backend nie potrzebuje CORS-u.
  Adres backendu siedzi w zmiennej nginxa, więc nazwa jest rozwiązywana
  przy żądaniu i panel wstaje niezależnie od kolejności startu kontenerów.
- Proxy nie limituje rozmiaru ciała żądania i nie buforuje go, żeby
  wysyłka dużych plików wideo/audio przechodziła bez zmian w backendzie.
  Timeouty podniesione, bo panel trzyma WebSocket otwarty na stałe.
- Root Dockerfile wraca do samego Pythona i wystawia port 8000.
- compose.yaml uruchamia obie usługi we wspólnej sieci: panel na :80,
  API na :8000 (wystawione do diagnostyki).
- Katalog static/ znika z repozytorium - nie ma już czego serwować.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
lgooseandClaude Bot committed 2026-08-21 01:08:50 +02:00
1 parent 8d32d5afc6
commit bbd8a321f4
7 files changed
+124 -11

No files matched your search

+6 -8
View File
@@ -1,6 +1,6 @@
FROM python:3.13-slim
# Install system dependencies including opus and ffmpeg
# Zależności systemowe: opus dla głosu, ffmpeg do dekodowania audio
RUN apt-get update && apt-get install -y \
libopus0 \
libopus-dev \
@@ -8,17 +8,15 @@ RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy requirements first to leverage Docker cache
# Zależności przed źródłami, aby korzystać z cache warstw.
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the application
COPY . .
# Command to run the bot
CMD ["python", "-u", "main.py"]
EXPOSE 8000
# Serwis wystawia wyłącznie API i steruje botem - panel ma własny obraz.
CMD ["python", "-u", "main.py"]