diff --git a/.env.example b/.env.example index 56c0eb0..27e4134 100644 --- a/.env.example +++ b/.env.example @@ -10,14 +10,14 @@ APP_VERSION=2.0.0 DEBUG=false SECRET_KEY=changez-moi-par-une-valeur-longue-et-aleatoire -# ── Serveur ────────────────────────────────────────────────── -HOST=0.0.0.0 -PORT=8000 +# ── Serveur (pour dev seulement) ────────────────────────────── +# HOST=0.0.0.0 +# PORT=8000 # ── Base de données ────────────────────────────────────────── # SQLite (dev): sqlite+aiosqlite:///./data/imago.db -# PostgreSQL: postgresql+asyncpg://user:pass@host:5432/imago -DATABASE_URL=sqlite+aiosqlite:///./data/imago.db +PostgreSQL: postgresql+asyncpg://user:pass@host:5432/imago +# DATABASE_URL=sqlite+aiosqlite:///./data/imago.db # ── Stockage ───────────────────────────────────────────────── # local (fichiers sur disque) ou s3 (MinIO / AWS S3 / Cloudflare R2) @@ -25,6 +25,7 @@ STORAGE_BACKEND=local UPLOAD_DIR=./data/uploads THUMBNAILS_DIR=./data/thumbnails MAX_UPLOAD_SIZE_MB=50 +SIGNED_URL_SECRET=changez-moi-en-prod # ── Stockage S3 (si STORAGE_BACKEND=s3) ────────────────────── S3_BUCKET=imago diff --git a/docker-compose.production.yml b/docker-compose.production.yml index ab3f469..3eea3c1 100644 --- a/docker-compose.production.yml +++ b/docker-compose.production.yml @@ -1,12 +1,17 @@ # Imago — Docker Compose Production -# Usage: docker compose -f docker-compose.production.yml up -d +# Usage: +# 1. Copier .env.example → .env et remplir les secrets +# 2. docker compose -f docker-compose.production.yml up -d +# +# Docker Compose lit automatiquement le fichier .env du répertoire courant. +# Les variables d'environnement sont référencées avec ${VAR} ou ${VAR:-défaut}. services: # ── Admin Panel (React + Nginx) ─────────────────────────── admin: image: docker-registry.dev.home:5000/imago-admin:latest ports: - - "3001:80" + - "${ADMIN_PORT:-3001}:80" depends_on: - backend restart: unless-stopped @@ -15,17 +20,18 @@ services: backend: image: docker-registry.dev.home:5000/imago-backend:latest ports: - - "8001:8000" - env_file: .env.production + - "${BACKEND_PORT:-8001}:8000" + env_file: .env environment: - REDIS_URL: redis://redis:6379/0 + # Connexions internes Docker (hostnames fixes) DATABASE_URL: postgresql+asyncpg://imago:imago@db:5432/imago - STORAGE_BACKEND: s3 - S3_ENDPOINT_URL: http://minio:9000 - S3_BUCKET: imago - S3_ACCESS_KEY: minioadmin - S3_SECRET_KEY: minioadmin - S3_REGION: us-east-1 + REDIS_URL: redis://redis:6379/0 + # Variables de l'application (lues depuis .env, défaut local) + STORAGE_BACKEND: ${STORAGE_BACKEND:-local} + UPLOAD_DIR: ${UPLOAD_DIR:-/app/data/uploads} + THUMBNAILS_DIR: ${THUMBNAILS_DIR:-/app/data/thumbnails} + MAX_UPLOAD_SIZE_MB: ${MAX_UPLOAD_SIZE_MB:-50} + SIGNED_URL_SECRET: ${SIGNED_URL_SECRET:-changez-moi-en-prod} volumes: - uploads:/app/data/uploads - thumbnails:/app/data/thumbnails @@ -36,19 +42,22 @@ services: condition: service_healthy restart: unless-stopped + # ── ARQ Worker ──────────────────────────────────────────── worker: image: docker-registry.dev.home:5000/imago-backend:latest command: python worker.py - env_file: .env.production + env_file: .env environment: - REDIS_URL: redis://redis:6379/0 DATABASE_URL: postgresql+asyncpg://imago:imago@db:5432/imago - STORAGE_BACKEND: s3 - S3_ENDPOINT_URL: http://minio:9000 - S3_BUCKET: imago - S3_ACCESS_KEY: minioadmin - S3_SECRET_KEY: minioadmin - S3_REGION: us-east-1 + REDIS_URL: redis://redis:6379/0 + STORAGE_BACKEND: ${STORAGE_BACKEND:-local} + UPLOAD_DIR: ${UPLOAD_DIR:-/app/data/uploads} + THUMBNAILS_DIR: ${THUMBNAILS_DIR:-/app/data/thumbnails} + MAX_UPLOAD_SIZE_MB: ${MAX_UPLOAD_SIZE_MB:-50} + SIGNED_URL_SECRET: ${SIGNED_URL_SECRET:-changez-moi-en-prod} + volumes: + - uploads:/app/data/uploads + - thumbnails:/app/data/thumbnails depends_on: db: condition: service_healthy @@ -56,6 +65,7 @@ services: condition: service_healthy restart: unless-stopped + # ── Base de données ─────────────────────────────────────── db: image: postgres:16-alpine environment: @@ -72,6 +82,7 @@ services: retries: 5 restart: unless-stopped + # ── Redis ───────────────────────────────────────────────── redis: image: redis:7-alpine command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru @@ -84,6 +95,7 @@ services: retries: 3 restart: unless-stopped + # ── MinIO (optionnel — utilisé seulement si STORAGE_BACKEND=s3) minio: image: minio/minio command: server /data --console-address ':9001'