loko/docker-compose.prod.yml
2026-07-22 14:48:40 +02:00

102 lines
3.2 KiB
YAML

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