services: # =================== # Infrastructure # =================== mongodb: image: mongo:7.0 container_name: ${PROJECT_NAME}-mongodb restart: unless-stopped environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER:-admin} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD:-password123} ports: - "${MONGO_PORT:-27017}:27017" volumes: - mongodb_data:/data/db networks: - app-network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 30s timeout: 10s retries: 3 redis: image: redis:7-alpine container_name: ${PROJECT_NAME}-redis restart: unless-stopped ports: - "${REDIS_PORT:-6379}:6379" volumes: - redis_data:/data networks: - app-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 # =================== # Backend # =================== backend: build: context: ./backend dockerfile: Dockerfile container_name: ${PROJECT_NAME}-backend restart: unless-stopped ports: - "${BACKEND_PORT:-8000}:8000" environment: - MONGODB_URL=mongodb://${MONGO_USER:-admin}:${MONGO_PASSWORD:-password123}@mongodb:27017/ - DB_NAME=${DB_NAME:-app_db} - REDIS_URL=redis://redis:6379 volumes: - upload_data:/app/uploads depends_on: mongodb: condition: service_healthy redis: condition: service_healthy networks: - app-network # =================== # Frontend # =================== frontend: build: context: ./frontend dockerfile: Dockerfile container_name: ${PROJECT_NAME}-frontend restart: unless-stopped ports: - "${FRONTEND_PORT:-3000}:3000" networks: - app-network volumes: mongodb_data: redis_data: upload_data: networks: app-network: driver: bridge