diff --git a/Dockerfile b/backend/Dockerfile.backend similarity index 62% rename from Dockerfile rename to backend/Dockerfile.backend index 4ef25eb..154e8e1 100644 --- a/Dockerfile +++ b/backend/Dockerfile.backend @@ -1,16 +1,8 @@ FROM python:3.12-slim - WORKDIR /app - -# Kein Systemd, keine Ports 80/443 - alles clean nach Coolify-Regeln - -COPY backend/requirements.txt . +COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt - -COPY backend/ . - +COPY . . RUN mkdir -p /app/data && chmod 777 /app/data - EXPOSE 8000 - CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/docker-compose.yml b/docker-compose.yml index e610728..c0e702c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,23 +1,24 @@ services: backend: build: - context: . - dockerfile: Dockerfile + context: ./backend + dockerfile: Dockerfile.backend image: wochenplaner-backend:latest - container_name: wochenplaner restart: unless-stopped - - # Kein ports: 80/443 - Traefik belegt diese - # Port 8000 für API - identischer Host/Container-Port - ports: - - "8000:8000" - environment: - PORT=8000 - - JWT_SECRET=${JWT_SECRET:-wochenplaner-jwt-secret-change-me} - + - JWT_SECRET=${SERVICE_BASE64_64_JWT:-wochenplaner-jwt-secret-change-me} volumes: - wochenplaner_data:/app/data + + frontend: + image: nginx:alpine + restart: unless-stopped + ports: + - "8000:80" + volumes: + - ./frontend:/var/www/html:ro + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro volumes: wochenplaner_data: diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..4dad473 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,1666 @@ + + + + + + Wochenplaner Pro + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..5397642 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,28 @@ +server { + listen 80; + server_name _; + + # Frontend static files + root /var/www/html; + index index.html; + + # API reverse proxy zum Backend + location /api/ { + proxy_pass http://backend:8000/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /health { + proxy_pass http://backend:8000/health; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # Alles andere → index.html (SPA fallback) + location / { + try_files $uri $uri/ /index.html; + } +}