x-app-common: &app-common image: netslim-app:latest build: context: . dockerfile: docker/php/Dockerfile volumes: # Répertoire public partagé avec Nginx. # L'entrypoint y synchronise index.php et les assets compilés. - ./data/public:/data/public # Base SQLite persistée entre redéploiements. - ./data/database:/var/www/app/database # Cache applicatif et logs persistés entre redémarrages. - ./data/var:/var/www/app/var # Uploads utilisateurs. - ./data/public/media:/var/www/app/public/media # phpdotenv requiert un fichier physique lisible depuis le conteneur. - ./.env:/var/www/app/.env:ro env_file: - .env environment: TRUSTED_PROXIES: ${TRUSTED_PROXIES:-*} services: app: <<: *app-common restart: unless-stopped # Vérifie que PHP-FPM écoute bien sur le port 9000. # Pas de dépendance à bash : on utilise PHP directement. healthcheck: test: [ "CMD-SHELL", "php -r '$s=@fsockopen(\"127.0.0.1\", 9000); if(!$s){exit(1);} fclose($s);'" ] interval: 10s timeout: 3s retries: 3 start_period: 20s nginx: image: nginx:stable restart: unless-stopped depends_on: app: condition: service_healthy ports: - "127.0.0.1:8888:80" volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro # Nginx sert directement le répertoire public synchronisé par l'entrypoint. - ./data/public:/var/www/app/public:ro provision: <<: *app-common profiles: ["manual"] restart: "no" # Réutilise exactement la même image que le runtime HTTP. command: ["php", "bin/provision.php"]