refactor: remove obsolete docker-compose configurations

This commit is contained in:
Karl Determe 2026-07-23 14:57:04 +02:00
parent bb5fcab2c2
commit bc138c47f0
3 changed files with 0 additions and 314 deletions

View file

@ -1,135 +0,0 @@
services:
panoramax_db:
image: postgis/postgis:16-3.4
container_name: panoramax_db
restart: unless-stopped
environment:
POSTGRES_DB: panoramax
POSTGRES_USER: panoramax_user
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- ${SRV_DIR:-/srv/panoramax}/db_data:/var/lib/postgresql/data
networks:
- panoramax_network
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U panoramax_user -d panoramax" ]
interval: 10s
timeout: 5s
retries: 5
panoramax_api:
image: panoramax/api:latest
container_name: panoramax_api
restart: unless-stopped
depends_on:
panoramax_db:
condition: service_healthy
env_file:
- .env
environment:
- DB_HOST=panoramax_db
- DB_PORT=5432
- DB_NAME=panoramax
- DB_USERNAME=panoramax_user
- DB_PASSWORD=${DB_PASSWORD}
# Désactive le traitement interne pour déléguer au picture-worker
- PICTURE_PROCESS_THREADS_LIMIT=0
# Permet à Gunicorn de faire confiance aux en-têtes de proxy (comme X-Forwarded-Proto) envoyés par Caddy
- GUNICORN_CMD_ARGS=--forwarded-allow-ips=*
# Visibilité par défaut publique pour les métadonnées (images protégées au niveau du proxy)
- API_DEFAULT_PICTURE_VISIBILITY=anyone
# ports:
# Optionnel : Exposer localement pour le débug si besoin (décommenter si nécessaire)
# - "127.0.0.1:5001:5000"
# - "5000:5000"
networks:
- panoramax_network
- streetup_network
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G
panoramax_worker:
image: panoramax/api:latest
restart: unless-stopped
command: picture-worker
depends_on:
panoramax_db:
condition: service_healthy
panoramax_api:
condition: service_started
panoramax_blur:
condition: service_healthy
env_file:
- .env
environment:
- DB_HOST=panoramax_db
- DB_PORT=5432
- DB_NAME=panoramax
- DB_USERNAME=panoramax_user
- DB_PASSWORD=${DB_PASSWORD}
# Visibilité par défaut publique pour les métadonnées (images protégées au niveau du proxy)
- API_DEFAULT_PICTURE_VISIBILITY=anyone
networks:
- panoramax_network
deploy:
replicas: 4
resources:
limits:
cpus: '2.0'
memory: 4G
panoramax_blur:
image: panoramax/sgblur:latest
container_name: panoramax_blur
restart: unless-stopped
environment:
- WEB_CONCURRENCY=4 # Limite le nombre de workers concurrents pour préserver le CPU
- DETECT_URL=http://panoramax_detect:8001
depends_on:
panoramax_detect:
condition: service_healthy
networks:
- panoramax_network
deploy:
resources:
limits:
cpus: '2.0'
memory: 1G
healthcheck:
test: python -c "import requests; requests.get('http://localhost:8000/').raise_for_status()"
interval: 10s
timeout: 5s
retries: 5
start_period: 2s
panoramax_detect:
image: panoramax/sgblur:latest
container_name: panoramax_detect
entrypoint: ["uvicorn", "src.detect.detect_api:app", "--host", "0.0.0.0", "--port", "8001", "--workers", "4"]
restart: unless-stopped
environment:
- OMP_NUM_THREADS=1 # 1 seul thread PyTorch par processus pour éviter la surcharge de synchronisation
- MKL_NUM_THREADS=1 # 1 seul thread MKL par processus
- MKL_DYNAMIC=FALSE # Désactive la mise à l'échelle dynamique des threads de MKL
networks:
- panoramax_network
deploy:
resources:
limits:
cpus: '4.0'
memory: 6G
healthcheck:
test: python -c "import requests; requests.get('http://localhost:8001/').raise_for_status()"
interval: 10s
timeout: 5s
retries: 5
start_period: 2s
networks:
panoramax_network:
driver: bridge
streetup_network:
external: true

View file

@ -1,102 +0,0 @@
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/${IMAGE_NAME:-streetup-core}:${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

View file

@ -1,77 +0,0 @@
# ==============================================================================
# Configuration d'environnement pour Panoramax (GeoVisio)
# ==============================================================================
# Copiez ce fichier sous le nom '.env' (dans le dossier /srv/panoramax/) sur votre
# serveur de production et renseignez les valeurs appropriées.
# ==============================================================================
# ------------------------------------------------------------------------------
# 1. Sécurité et Base de données
# ------------------------------------------------------------------------------
# Le mot de passe de la base de données PostGIS dédiée de Panoramax.
# Doit correspondre à la variable de la base de données pour que l'API et
# le worker puissent s'y connecter.
DB_PASSWORD=choisissez_un_mot_de_passe_robuste
# Clé secrète de Flask utilisée pour signer les sessions et jetons (tokens).
# Requis pour générer le jeton d'administration permanent.
# Générez une clé robuste avec : openssl rand -hex 32
FLASK_SECRET_KEY=choisissez_une_cle_secrete_aleatoire
# ------------------------------------------------------------------------------
# 2. Stockage S3 Privé (OVHcloud Roubaix - rbx)
# ------------------------------------------------------------------------------
# Identifiants de l'utilisateur ayant le rôle 'ObjectStore operator' sur OVHcloud.
# IMPORTANT : Le bucket S3 doit être configuré en ACCÈS PRIVÉ (non public).
AWS_ACCESS_KEY_ID=votre_access_key_id_ovh
AWS_SECRET_ACCESS_KEY=votre_secret_access_key_ovh
# URL d'accès PyFilesystem vers le stockage S3 d'OVHcloud (Roubaix).
# Remplacez 'nom-du-bucket' par le nom de votre bucket S3 privé créé sur OVHcloud.
# Notez que le endpoint_url doit être encodé pour l'URL (https%3A%2F%2Fs3.rbx.io.cloud.ovh.net)
FS_URL=
# ------------------------------------------------------------------------------
# 3. URLs de l'API et Performance (Option B : Liens Privés + Signature)
# ------------------------------------------------------------------------------
# URL publique principale de l'API Panoramax.
API_PUBLIC_URL=
# Avec l'Option B (Sécurité maximale), nous désactivons le service direct de photos
# publiques par Panoramax. Nous laissons ces variables commentées.
#
# C'est StreetUp (Django) qui utilisera les mêmes identifiants AWS ci-dessus pour
# générer des URLs de lecture S3 temporaires signées (S3 Presigned URLs)
# valables 30 minutes (1800 secondes) pour les utilisateurs connectés.
#
# API_PERMANENT_PICTURES_PUBLIC_URL=
# API_DERIVATES_PICTURES_PUBLIC_URL=
# Stratégie de génération des vignettes/tuiles.
# 'PREPROCESS' force le picture-worker à précalculer et envoyer toutes les vignettes
# sur le S3 dès le versement de la photo par StreetUp.
PICTURE_PROCESS_DERIVATES_STRATEGY=PREPROCESS
# ------------------------------------------------------------------------------
# 4. Authentification & Sécurité d'écriture
# ------------------------------------------------------------------------------
# Désactivation de l'authentification OAuth externe (laissé vide).
# Aucun utilisateur externe ne pourra se connecter via navigateur.
OAUTH_PROVIDER=
# Force l'authentification obligatoire pour tous les téléversements (uploads).
# Seul StreetUp, muni du jeton d'administration généré en console, pourra verser
# des images et créer des séquences après avoir validé leur qualité.
API_FORCE_AUTH_ON_UPLOAD=true
# Visibilité par défaut pour les nouvelles images ('anyone', 'logged-only' ou 'owner-only').
# Par défaut, nous utilisons 'anyone' (le catalogue de métadonnées reste accessible
# au public), et nous protégeons l'accès direct aux images (S3) au niveau du proxy.
API_DEFAULT_PICTURE_VISIBILITY=anyone
# ------------------------------------------------------------------------------
# 5. Floutage (Anonymisation) des visages et plaques
# ------------------------------------------------------------------------------
# Renseignez l'URL du service de floutage (SGBlur) exécuté localement.
# Si cette variable est commentée ou vide, le floutage automatique est désactivé.
API_BLUR_URL=