From 041b96aa6022d8a449341127816b656f997ea6ad Mon Sep 17 00:00:00 2001 From: gilles Date: Sat, 21 Feb 2026 21:09:59 +0100 Subject: [PATCH] chore: scaffold projet + docker-compose Co-Authored-By: Claude Sonnet 4.6 --- .env.example | 5 +++++ .gitignore | 10 ++++++++++ backend/Dockerfile | 7 +++++++ backend/app/__init__.py | 0 backend/app/models/__init__.py | 0 backend/app/routers/__init__.py | 0 backend/tests/__init__.py | 0 data/.gitkeep | 0 docker-compose.yml | 20 ++++++++++++++++++++ frontend/Dockerfile | 11 +++++++++++ frontend/nginx.conf | 18 ++++++++++++++++++ 11 files changed, 71 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 backend/Dockerfile create mode 100644 backend/app/__init__.py create mode 100644 backend/app/models/__init__.py create mode 100644 backend/app/routers/__init__.py create mode 100644 backend/tests/__init__.py create mode 100644 data/.gitkeep create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile create mode 100644 frontend/nginx.conf diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..dfc7703 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +BACKEND_PORT=8000 +CORS_ORIGINS=http://localhost:5173,http://localhost +DATABASE_URL=sqlite:////data/jardin.db +UPLOAD_DIR=/data/uploads +VITE_API_URL=http://localhost:8000 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eea5960 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +data/*.db +data/uploads/ +backend/__pycache__/ +backend/.venv/ +backend/*.pyc +frontend/node_modules/ +frontend/dist/ +.env +*.egg-info/ +.pytest_cache/ diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..a5a077f --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.12-slim +WORKDIR /app +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY . . +RUN mkdir -p /data/uploads +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/routers/__init__.py b/backend/app/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/tests/__init__.py b/backend/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3f102b0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +services: + backend: + build: ./backend + volumes: + - ./data:/data + ports: + - "8000:8000" + environment: + - DATABASE_URL=sqlite:////data/jardin.db + - UPLOAD_DIR=/data/uploads + - CORS_ORIGINS=http://localhost + restart: unless-stopped + + frontend: + build: ./frontend + ports: + - "80:80" + depends_on: + - backend + restart: unless-stopped diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..a5cf7d4 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,11 @@ +FROM node:22-alpine AS build +WORKDIR /app +COPY package*.json ./ +RUN npm ci +COPY . . +RUN npm run build + +FROM nginx:alpine +COPY --from=build /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 0000000..3a231ff --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,18 @@ +server { + listen 80; + root /usr/share/nginx/html; + index index.html; + + location /api/ { + proxy_pass http://backend:8000; + proxy_set_header Host $host; + } + + location /uploads/ { + proxy_pass http://backend:8000; + } + + location / { + try_files $uri $uri/ /index.html; + } +}