version: '3.8' services: # 1. Base de données : PostgreSQL db: image: postgres:18-alpine container_name: gim_db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-gim_db_admin} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-gim_db_password} POSTGRES_DB: ${POSTGRES_DB:-gim_db} volumes: # Persistance des données : crucial pour ne rien perdre au redémarrage - db_data:/var/lib/postgresql/data networks: - gim_network # 2. Back-end : API NestJS api: build: context: ./packages/backend dockerfile: Dockerfile container_name: gim_api restart: unless-stopped depends_on: - db environment: # Connexion à la BDD via le nom du conteneur ("db") - DB_HOST=db - DB_PORT=5432 - DB_USER=${POSTGRES_USER:-gim_db_admin} - DB_PASSWORD=${POSTGRES_PASSWORD:-gim_db_password} - DB_NAME=${POSTGRES_DB:-gim_db} # Clé de chiffrement applicatif - ENCRYPTION_MASTER_KEY=${ENCRYPTION_MASTER_KEY} ports: - "3000:3000" networks: - gim_network # 3. Front-end : Vue.js servi par Nginx web: build: context: ./packages/frontend dockerfile: Dockerfile container_name: gim_web restart: unless-stopped depends_on: - api ports: - "80:80" # - "443:443" # À décommenter lors de la mise en place du certificat SSL/TLS networks: - gim_network # Définition du réseau virtuel privé pour isoler les conteneurs networks: asso_network: driver: bridge # Définition du volume physique sur le serveur pour la base de données volumes: db_data: