From 965de3a0f2c8e4a2f461e0bcba8b9fac21cc7d92 Mon Sep 17 00:00:00 2001 From: zwitschi Date: Sat, 11 Oct 2025 17:25:51 +0200 Subject: [PATCH] feat: add Dockerfile for backend and frontend services with necessary configurations --- backend/Dockerfile | 22 ++++++++++++++++++++++ docker-compose.yml | 45 +++++++++++++++++++++++++++++++++++++++++++++ frontend/Dockerfile | 16 ++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..369536a --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,22 @@ +# syntax=docker/dockerfile:1 +FROM python:3.11-slim AS base + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_NO_CACHE_DIR=1 + +WORKDIR /app + +RUN apt-get update \ + && apt-get install -y --no-install-recommends build-essential libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY backend/requirements/base.txt ./backend/requirements/base.txt +RUN pip install --upgrade pip \ + && pip install -r backend/requirements/base.txt + +COPY backend ./backend + +EXPOSE 8000 + +CMD ["uvicorn", "backend.app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4ccae08 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,45 @@ +version: "3.9" + +services: + db: + build: + context: ./infra/postgres + image: rail-game-postgres + environment: + POSTGRES_USER: railgame + POSTGRES_PASSWORD: railgame + POSTGRES_DB: railgame_dev + ports: + - "5432:5432" + volumes: + - postgres-data:/var/lib/postgresql/data + + redis: + image: redis:7-alpine + ports: + - "6379:6379" + + backend: + build: + context: . + dockerfile: backend/Dockerfile + environment: + DATABASE_URL: postgresql+psycopg://railgame:railgame@db:5432/railgame_dev + TEST_DATABASE_URL: postgresql+psycopg://railgame:railgame@db:5432/railgame_test + REDIS_URL: redis://redis:6379/0 + depends_on: + - db + - redis + ports: + - "8000:8000" + + frontend: + build: + context: ./frontend + depends_on: + - backend + ports: + - "8080:80" + +volumes: + postgres-data: diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..8ebb247 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,16 @@ +# syntax=docker/dockerfile:1 +FROM node:20-alpine AS build + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +FROM nginx:1.27-alpine +COPY --from=build /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"]