services: cloudflared: image: cloudflare/cloudflared:latest container_name: cloudflared restart: unless-stopped profiles: - cloudflare command: ["--config", "/etc/cloudflared/config.yml", "tunnel", "run"] volumes: - ./docker/cloudflared/config.yml:/etc/cloudflared/config.yml:ro - /etc/cloudflared/credentials.json:/etc/cloudflared/credentials.json:ro depends_on: nginx: condition: service_started nginx: image: nginx:1.27-alpine container_name: inventarsystem-nginx restart: unless-stopped depends_on: app: condition: service_started ports: - "${INVENTAR_HTTP_PORT:-80}:80" - "${INVENTAR_HTTPS_PORT:-443}:443" volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - ./certs:/etc/nginx/certs:ro mongodb: image: mongo:7.0 container_name: inventarsystem-mongodb restart: unless-stopped volumes: - mongodb_data:/data/db healthcheck: test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"] interval: 10s timeout: 5s retries: 10 redis: image: redis:7-alpine container_name: inventarsystem-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes", "--save", "60", "1000"] volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 10 app: build: context: . dockerfile: Dockerfile working_dir: /app/Web command: ["gunicorn", "app:app", "--bind", "0.0.0.0:8000", "--workers", "2", "--timeout", "30", "--graceful-timeout", "20", "--max-requests", "200", "--max-requests-jitter", "50", "--log-level", "info", "--access-logfile", "-", "--error-logfile", "-"] container_name: inventarsystem-app restart: unless-stopped security_opt: - no-new-privileges:true depends_on: mongodb: condition: service_healthy redis: condition: service_healthy environment: INVENTAR_MONGODB_HOST: mongodb INVENTAR_MONGODB_PORT: "27017" INVENTAR_MONGODB_DB: Inventarsystem INVENTAR_REDIS_HOST: redis INVENTAR_REDIS_PORT: "6379" INVENTAR_REDIS_CACHE_DB: "1" INVENTAR_NOTIFICATION_STATUS_CACHE_TTL: "8" INVENTAR_BACKUP_FOLDER: /data/backups INVENTAR_LOGS_FOLDER: /data/logs INVENTAR_DELETED_ARCHIVE_FOLDER: /data/deleted-archives expose: - "8000" volumes: - ./config.json:/app/config.json:ro - app_uploads:/app/Web/uploads - app_thumbnails:/app/Web/thumbnails - app_previews:/app/Web/previews - app_qrcodes:/app/Web/QRCodes - app_backups:/data/backups - app_logs:/data/logs - app_deleted_archives:/data/deleted-archives volumes: mongodb_data: app_uploads: app_thumbnails: app_previews: app_qrcodes: app_backups: app_logs: app_deleted_archives: redis_data: