From dbf54f59efa17111a9b93d68c8465b99a19ff0db Mon Sep 17 00:00:00 2001 From: Marcus Almert Date: Tue, 28 Oct 2025 12:18:48 +0100 Subject: [PATCH] add docker files --- .gitignore | 6 +++--- backend/Dockerfile | 16 ++++++++++++++++ backend/src/main.py | 9 ++++++++- docker-compose.prod.yml | 0 docker-compose.yml | 23 +++++++++++++++++++++++ frontend/Dockerfile | 24 ++++++++++++++++++++++++ 6 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 backend/Dockerfile create mode 100644 docker-compose.prod.yml create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/.gitignore b/.gitignore index 3327c5f..5123e09 100644 --- a/.gitignore +++ b/.gitignore @@ -72,9 +72,9 @@ backend/.benchmarks/ # ========================= # Docker # ========================= -**/Dockerfile* -**/docker-compose.yml -**/docker-compose.override.yml +# **/Dockerfile* +# **/docker-compose.yml +# **/docker-compose.override.yml **/.dockerignore # Docker artifacts diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..cbe679e --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,16 @@ +FROM python:3.11-slim + +WORKDIR /app + +# Dependencies installieren +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Source-Code kopieren +COPY src/ ./src + +# Port öffnen +EXPOSE 8000 + +# FastAPI starten (Uvicorn) +CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/backend/src/main.py b/backend/src/main.py index d0a0df0..caff68c 100644 --- a/backend/src/main.py +++ b/backend/src/main.py @@ -1,5 +1,6 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware +import os app = FastAPI() @@ -13,4 +14,10 @@ app.add_middleware( @app.get("/api/hello") def read_root(): - return {"message": "Hallo von FastAPI 🎉"} \ No newline at end of file + return {"message": "Hallo von FastAPI 🎉"} + + +@app.get("/api/versions") +def read_root(): + message = os.popen("python --version").read().strip() + return {"message": message} \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3ae8865 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: "3.8" + +services: + backend: + build: + context: ./backend + container_name: fastapi-backend + ports: + - "8000:8000" + volumes: + - ./backend/src:/app/src:Z + environment: + - PYTHONUNBUFFERED=1 + command: uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload + + frontend: + build: + context: ./frontend + container_name: react-frontend + ports: + - "3000:80" + depends_on: + - backend diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..49087d5 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,24 @@ +# --- Build Stage --- +FROM node:20 AS build +WORKDIR /app + +# 1. Nur package.json zuerst kopieren → Cache für Dependencies +COPY package*.json ./ + +# 2. Abhängigkeiten installieren +RUN npm ci + +# 3. Restlichen Code kopieren +COPY . . + +# 4. Sicherstellen, dass vite ausführbar ist (Windows-Berechtigungsfix) +RUN chmod +x node_modules/.bin/vite + +# 5. Frontend bauen +RUN npm run build + +# --- Serve Stage --- +FROM nginx:alpine +COPY --from=build /app/dist /usr/share/nginx/html +EXPOSE 3000 +CMD ["nginx", "-g", "daemon off;"]