services: db: image: postgis/postgis:18-3.6 container_name: ${CONTAINER_PREFIX}_db restart: unless-stopped ports: - "127.0.0.1:${DB_HOST_PORT:-5438}:5432" # Conserve l'accès local sécurisé pour l'hôte (port personnalisable) environment: POSTGRES_DB: streetup POSTGRES_USER: streetup_admin POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - ${SRV_DIR:-/srv/streetup}/db_data:/var/lib/postgresql networks: - streetup_network healthcheck: test: [ "CMD-SHELL", "pg_isready -U streetup_admin -d streetup" ] interval: 10s timeout: 5s retries: 5 web: # Utilise l'image avec le tag approprié (latest en prod, test en environnement de test) image: ghcr.io/kdeterme/streetup:${IMAGE_TAG:-latest} container_name: ${CONTAINER_PREFIX}_web restart: unless-stopped command: /docker-entrypoint.sh networks: - streetup_network volumes: - ${SRV_DIR:-/srv/streetup}/media:/app/media - ${SRV_DIR:-/srv/streetup}/private_media:/app/private_media - ${SRV_DIR:-/srv/streetup}/static:/app/static - ${SRV_DIR:-/srv/streetup}/backups:/app/backups - ${BACKUP_HOST_SSH_KEY:-${HOME}/.ssh/id_ed25519}:/app/backup_key:ro env_file: - .env environment: - DB_HOST=db - DB_PORT=5432 - GDAL_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgdal.so - GEOS_LIBRARY_PATH=/opt/conda/envs/streetup-env/lib/libgeos_c.so - PROJ_DATA=/opt/conda/envs/streetup-env/share/proj - LOG_FILE_PATH=/app/django.log depends_on: db: condition: service_healthy rclone-backup: image: rclone/rclone:latest container_name: ${CONTAINER_PREFIX}_backup_rclone restart: unless-stopped volumes: - ${SRV_DIR:-/srv/streetup}/media:/data/media:ro - ${SRV_DIR:-/srv/streetup}/private_media:/data/private_media:ro - ./rclone:/config/rclone environment: - BACKUP_INTERVAL=86400 - DESTINATION=gdrive:streetup_backup entrypoint: > sh -c ' echo "=== Démarrage du daemon de sauvegarde Rclone ==="; while true; do echo "=== Début de la synchronisation : $$(date) ==="; rclone sync /data/media $${DESTINATION}/media --verbose; rclone sync /data/private_media $${DESTINATION}/private_media --verbose; echo "=== Fin de la synchronisation : $$(date) ==="; echo "Sommeil de $${BACKUP_INTERVAL} secondes..."; sleep $${BACKUP_INTERVAL}; done ' caddy: image: caddy:latest container_name: ${CONTAINER_PREFIX}_caddy restart: unless-stopped ports: - "80:80" - "443:443" - "443:443/udp" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ${CONTAINER_PREFIX}_caddy_data:/data - ${CONTAINER_PREFIX}_caddy_config:/config - ${SRV_DIR:-/srv/streetup}/static:/srv/static:ro - ${SRV_DIR:-/srv/streetup}/media:/srv/media:ro - /srv/streetup-test/static:/srv/static_test:ro - /srv/streetup-test/media:/srv/media_test:ro depends_on: - web networks: - streetup_network volumes: streetup_prod_caddy_data: streetup_prod_caddy_config: streetup_test_caddy_data: streetup_test_caddy_config: networks: streetup_network: external: true