feat: Ajout configuration Docker complète pour v2

 Fichiers Docker ajoutés:
- backend/Dockerfile: Image Python 3.11 avec uv et FastAPI
- frontend/Dockerfile: Build multi-stage avec Nginx
- docker-compose.yml: Orchestration complète des services
- frontend/nginx.conf: Configuration Nginx avec proxy API

📝 Documentation:
- DOCKER.md: Guide complet de déploiement Docker (monitoring, backup, prod)
- README.md: Section Docker ajoutée
- .env.docker: Template mis à jour pour v2

🔧 Configuration:
- .dockerignore pour backend et frontend
- Volume data/ pour la base de données
- Healthchecks pour les deux services
- Réseau bridge dédié

🚀 Démarrage simplifié:
  cp .env.docker .env
  docker-compose up -d

Accès: http://localhost (frontend) + http://localhost:8000 (API)
This commit is contained in:
2025-11-25 21:22:41 +01:00
parent 1f17b1e982
commit 634b6958bb
10 changed files with 683 additions and 12 deletions

29
frontend/.dockerignore Normal file
View File

@@ -0,0 +1,29 @@
# Node
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Build
dist/
.vite/
# Environment
.env.local
.env.*.local
# IDE
.vscode/
.idea/
*.swp
*.swo
# Tests
coverage/
# Git
.git/
.gitignore
# Logs
*.log

32
frontend/Dockerfile Normal file
View File

@@ -0,0 +1,32 @@
# Dockerfile pour Frontend Vue.js
# Stage 1: Build
FROM node:18-alpine AS builder
WORKDIR /app
# Copier package.json et package-lock.json
COPY package*.json ./
# Installer les dépendances
RUN npm ci
# Copier le code source
COPY . .
# Build de production
RUN npm run build
# Stage 2: Production avec Nginx
FROM nginx:alpine
# Copier le build depuis le stage précédent
COPY --from=builder /app/dist /usr/share/nginx/html
# Copier la configuration Nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Exposer le port
EXPOSE 80
# Commande de démarrage
CMD ["nginx", "-g", "daemon off;"]

41
frontend/nginx.conf Normal file
View File

@@ -0,0 +1,41 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# Gzip compression
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json application/javascript;
# SPA routing - toutes les routes vers index.html
location / {
try_files $uri $uri/ /index.html;
}
# Proxy API vers le backend
location /api/ {
proxy_pass http://backend:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
# Cache pour les assets statiques
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Sécurité
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
}