66 lines
1.7 KiB
YAML
66 lines
1.7 KiB
YAML
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"]
|