services: app: image: floorvisualizer:latest container_name: floorvisualizer_app restart: unless-stopped ports: - "8099:8099" volumes: - floor_outputs:/app/outputs - floor_outputs:/app/outputs - floor_logs: floor_uploads:/app/uploads - floor_logs:/app/logs environment: - PORT=8099 - DATABASE_URL=postgres://postgres:floorviz123@db:5432/floorvisualizer?sslmode=disable - REDIS_ADDR=redis:6379 - JWT_SECRET=change-this-to-a-strong-secret-in-production - OPENROUTER_API_KEY=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 - WORKER_COUNT=5 - LOG_DIR=/app/logs - LOG_LEVEL=INFO - PROXY_URL= depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - floorviz_network healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:8099/products?limit=1"] interval: 30s timeout: 10s retries: 3 db: image: postgres:15 container_name: floorvisualizer_db restart: unless-stopped ports: - "8100:5432" environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=floorviz123 - POSTGRES_DB=floorvisualizer volumes: - floor_db_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 networks: - floorviz_network redis: image: redis:7-alpine container_name: floorvisualizer_redis restart: unless-stopped ports: - "8101:6379" volumes: - floor_redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - floorviz_network volumes: floor_db_data: floor_redis_data: floor_outputs: floor_logs: floor_uploads: networks: floorviz_network: name: floorviz_network driver: bridge