Squash merge de la branche develop dans master : un seul commit sur master pour regrouper la livraison liée au ticket #50 (affichage dynamique des CGU et de la politique de confidentialité à l'inscription) ainsi que la documentation et les ajustements associés. Frontend (P'titsPas) : modale de validation bloquante avec onglets CGU / confidentialité, chargement des PDF depuis l'API des documents légaux actifs, affichage via pdfx (PdfViewPinch et barre de progression latérale sur le web, repli PdfView sous Windows). Branchement dans le flux d'inscription (écran de présentation), enrichissement du UserService et correction des chemins média pour les URL absolues. Documentation: jeux de fichiers juridiques (markdown et PDF de référence), réorganisation (dossier docs/juridique, archives, renommage du briefing), mises à jour index, liste de tickets et décisions projet. Scripts et métadonnées mineures (Gitea, pubspec, index web). Made-with: Cursor
12 KiB
12 KiB
Architecture Technique - P'titsPas
Archivé (
docs/archive/obsolete/) — non maintenu à la racinedocs/. Voir02_ARCHITECTURE.mdpour la référence courante.
Guide d'Infrastructure et de Déploiement
Vue d'ensemble
P'titsPas est une application de gestion de garde d'enfants pour les collectivités locales, basée sur une architecture client-serveur moderne :
- Frontend : Application web Flutter (Single Page Application)
- Backend : API REST Node.js/Express avec TypeScript
- Base de données : PostgreSQL avec ORM Prisma
- Architecture : Séparation claire frontend/backend avec API REST
Prérequis Serveur
Environnement d'exécution
Backend
- Node.js : Version 18+ (LTS recommandée : 18.19.0+)
- npm : Version 9+
- TypeScript : Inclus dans les dépendances du projet
Base de données
- PostgreSQL : Version 15+
- Extensions : UUID (pour les clés primaires)
Frontend
- Serveur web statique : nginx, Apache, ou similaire
- Flutter Web : Compilation en JavaScript (pas de prérequis runtime)
Ressources recommandées
Environnement de développement
- RAM : 4GB minimum
- CPU : 2 vCPU
- Storage : 10GB
Environnement de production
- RAM : 8GB recommandé (4GB minimum)
- CPU : 4 vCPU recommandé (2 vCPU minimum)
- Storage : 50GB minimum (base de données + logs + backups)
- Réseau :
- Port 3000 : API Backend (interne)
- Port 80/443 : Web (externe)
- Port 5432 : PostgreSQL (interne uniquement)
Stack Technique Détaillée
Backend (API)
{
"runtime": "Node.js 18+",
"language": "TypeScript",
"framework": "Express.js 4.18+",
"orm": "Prisma 6.7+",
"database_client": "@prisma/client",
"security": [
"helmet (sécurité headers)",
"cors (CORS policy)",
"bcrypt (hashage mots de passe)",
"jsonwebtoken (JWT auth)"
],
"logging": "morgan",
"validation": "@nestjs/common"
}
Frontend (Web)
{
"framework": "Flutter 3.2.6+",
"language": "Dart 3.0+",
"compilation": "JavaScript (Flutter Web)",
"navigation": "go_router 13.2+",
"state_management": "provider 6.1+",
"ui_framework": "Material Design",
"fonts": "Google Fonts",
"http_client": "http 1.2+"
}
Base de données
-- Structure PostgreSQL
-- Tables principales :
-- - Parent (utilisateurs parents)
-- - Child (enfants)
-- - Contract (contrats de garde)
-- - Admin (administrateurs)
-- - Theme (thèmes interface)
-- - AppSettings (paramètres app)
-- Types de données :
-- - UUID pour toutes les clés primaires
-- - Timestamps automatiques (createdAt, updatedAt)
-- - Enums pour les statuts
Installation et Configuration
1. Prérequis système
# Ubuntu/Debian
sudo apt update
sudo apt install -y nodejs npm postgresql postgresql-contrib nginx
# Vérification versions
node --version # >= 18.0.0
npm --version # >= 9.0.0
psql --version # >= 15.0
2. Configuration base de données
-- Se connecter en tant que postgres
sudo -u postgres psql
-- Créer la base de données et l'utilisateur
CREATE DATABASE ptitspas;
CREATE USER ptitspas_user WITH PASSWORD 'secure_password_here';
GRANT ALL PRIVILEGES ON DATABASE ptitspas TO ptitspas_user;
ALTER USER ptitspas_user CREATEDB; -- Pour les migrations
-- Quitter
\q
3. Installation Backend
cd backend
# Installation des dépendances
npm install
# Configuration environnement
cp .env.example .env
# Éditer .env avec vos paramètres
# Génération du client Prisma et migrations
npx prisma generate
npx prisma migrate deploy
# Initialisation admin (optionnel)
npm run init-admin
4. Installation Frontend
cd frontend
# Installation des dépendances Flutter
flutter pub get
# Build pour production
flutter build web --release
Variables d'Environnement
Backend (.env)
# Base de données
DATABASE_URL="postgresql://ptitspas_user:secure_password_here@localhost:5432/ptitspas"
# Sécurité
JWT_SECRET="your-super-secret-jwt-key-minimum-32-characters"
JWT_EXPIRES_IN="24h"
# Serveur
PORT=3000
NODE_ENV=production
# Optionnel
CORS_ORIGIN="https://ptitspas.yourdomain.com"
Déploiement
Option 1 : Déploiement classique (recommandé)
Backend
cd backend
# Installation production
npm ci --only=production
# Build TypeScript
npm run build
# Démarrage (avec PM2 recommandé)
npm install -g pm2
pm2 start dist/index.js --name "ptitspas-api"
pm2 startup
pm2 save
Frontend
cd frontend
# Build production
flutter build web --release
# Copier vers serveur web
sudo cp -r build/web/* /var/www/ptitspas/
sudo chown -R www-data:www-data /var/www/ptitspas/
Option 2 : Conteneurisation Docker
Dockerfile Backend
FROM node:18-alpine
# Créer répertoire app
WORKDIR /app
# Copier package files
COPY package*.json ./
COPY prisma ./prisma/
# Installer dépendances
RUN npm ci --only=production
# Copier code source
COPY . .
# Build
RUN npm run build
# Générer client Prisma
RUN npx prisma generate
# Exposer port
EXPOSE 3000
# Variables d'environnement
ENV NODE_ENV=production
# Commande démarrage
CMD ["npm", "start"]
Dockerfile Frontend
FROM nginx:alpine
# Copier build Flutter
COPY build/web /usr/share/nginx/html
# Configuration nginx
COPY nginx.conf /etc/nginx/nginx.conf
# Exposer port
EXPOSE 80
# Démarrage nginx
CMD ["nginx", "-g", "daemon off;"]
Docker Compose
version: '3.8'
services:
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: ptitspas
POSTGRES_USER: ptitspas_user
POSTGRES_PASSWORD: secure_password_here
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
backend:
build: ./backend
environment:
DATABASE_URL: postgresql://ptitspas_user:secure_password_here@postgres:5432/ptitspas
JWT_SECRET: your-super-secret-jwt-key
NODE_ENV: production
ports:
- "3000:3000"
depends_on:
- postgres
frontend:
build: ./frontend
ports:
- "80:80"
depends_on:
- backend
volumes:
postgres_data:
Configuration Nginx
Configuration complète
server {
listen 80;
server_name ptitspas.yourdomain.com;
# Redirection HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name ptitspas.yourdomain.com;
# Certificats SSL
ssl_certificate /etc/letsencrypt/live/ptitspas.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ptitspas.yourdomain.com/privkey.pem;
# Configuration SSL sécurisée
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Frontend statique (Flutter Web)
location / {
root /var/www/ptitspas;
index index.html;
try_files $uri $uri/ /index.html;
# Cache statique
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# API Backend
location /api/ {
proxy_pass http://localhost:3000;
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;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Logs
access_log /var/log/nginx/ptitspas_access.log;
error_log /var/log/nginx/ptitspas_error.log;
}
Sécurité
Obligatoire
-
HTTPS avec certificat SSL
# Installation Certbot sudo apt install certbot python3-certbot-nginx # Génération certificat sudo certbot --nginx -d ptitspas.yourdomain.com # Renouvellement automatique sudo crontab -e # Ajouter : 0 12 * * * /usr/bin/certbot renew --quiet -
Firewall
# UFW (Ubuntu) sudo ufw allow 22 # SSH sudo ufw allow 80 # HTTP sudo ufw allow 443 # HTTPS sudo ufw enable -
Base de données sécurisée
# PostgreSQL : accès local uniquement sudo nano /etc/postgresql/15/main/postgresql.conf # Commenter : #listen_addresses = 'localhost' sudo nano /etc/postgresql/15/main/pg_hba.conf # Vérifier que seules les connexions locales sont autorisées -
Backup automatique
# Script backup #!/bin/bash BACKUP_DIR="/var/backups/ptitspas" DATE=$(date +%Y%m%d_%H%M%S) pg_dump -U ptitspas_user -h localhost ptitspas > $BACKUP_DIR/ptitspas_$DATE.sql # Nettoyer les backups > 30 jours find $BACKUP_DIR -name "*.sql" -mtime +30 -delete # Crontab : tous les jours à 2h # 0 2 * * * /path/to/backup_script.sh
Recommandé
-
Fail2Ban (protection brute force)
sudo apt install fail2ban sudo systemctl enable fail2ban -
Monitoring des logs
# Logrotate pour éviter les gros fichiers sudo nano /etc/logrotate.d/ptitspas -
Updates automatiques
sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades
Commandes de Gestion
Démarrage des services
# Backend (développement)
cd backend && npm run dev
# Backend (production avec PM2)
pm2 start ptitspas-api
pm2 status
# Base de données
sudo systemctl start postgresql
sudo systemctl status postgresql
# Serveur web
sudo systemctl start nginx
sudo systemctl status nginx
Maintenance
# Migrations base de données
cd backend
npx prisma migrate deploy
# Logs Backend
pm2 logs ptitspas-api
# Logs Nginx
sudo tail -f /var/log/nginx/ptitspas_access.log
sudo tail -f /var/log/nginx/ptitspas_error.log
# Restart services
pm2 restart ptitspas-api
sudo systemctl restart nginx
Monitoring et Healthcheck
Endpoints de santé
# API Health (à implémenter)
curl https://ptitspas.yourdomain.com/api/health
# Base de données
psql -h localhost -U ptitspas_user -d ptitspas -c "SELECT 1;"
# Frontend
curl -I https://ptitspas.yourdomain.com/
Logs à surveiller
- Backend : Via PM2 ou logs applicatifs
- PostgreSQL :
/var/log/postgresql/postgresql-15-main.log - Nginx :
/var/log/nginx/ptitspas_*.log - Système :
/var/log/syslog
Métriques importantes
- CPU/RAM : Usage serveur
- Espace disque : Base de données et logs
- Connexions DB : Nombre de connexions actives
- Temps de réponse : API et frontend
- Erreurs 5xx : Erreurs serveur
Troubleshooting
Problèmes courants
-
Backend ne démarre pas
# Vérifier variables d'environnement cd backend && cat .env # Vérifier connexion DB npx prisma db pull # Logs détaillés npm run dev -
Frontend ne s'affiche pas
# Vérifier build cd frontend && flutter build web # Vérifier nginx sudo nginx -t sudo systemctl reload nginx -
Erreurs base de données
# Vérifier statut PostgreSQL sudo systemctl status postgresql # Vérifier connexions sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"
Évolutivité
Optimisations possibles
- Cache Redis : Pour les sessions et cache applicatif
- CDN : Pour les assets statiques
- Load Balancer : Pour haute disponibilité
- Clustering : Multiple instances Node.js
- Database replication : Master/Slave PostgreSQL
Monitoring avancé
- Prometheus + Grafana : Métriques système et applicatif
- ELK Stack : Centralisation des logs
- Uptime monitoring : Surveillance externe
Cette architecture est conçue pour être scalable, maintenable et sécurisée pour un environnement de production professionnel.