version: "3.8" name: atlas-cmms services: # Nginx Proxy Manager nginx-proxy-manager: image: jc21/nginx-proxy-manager:latest container_name: nginx-proxy-manager restart: unless-stopped ports: # Public HTTP/HTTPS ports - "80:80" - "443:443" # Admin interface - "81:81" volumes: - npm_data:/data - npm_letsencrypt:/etc/letsencrypt networks: - atlas-network environment: # Optional: Disable IPv6 DISABLE_IPV6: 'true' postgres: image: postgres:16-alpine container_name: atlas_db environment: POSTGRES_DB: atlas POSTGRES_USER: ${DB_USER:-rootUser} POSTGRES_PASSWORD: ${DB_PASSWORD:-mypassword} ports: - "5432:5432" expose: - "5432" volumes: - postgres_data:/var/lib/postgresql/data networks: - atlas-network restart: unless-stopped minio: image: minio/minio:latest container_name: atlas_minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin123} expose: - "9000" - "9001" volumes: - minio_data:/data networks: - atlas-network restart: unless-stopped api: image: intelloop/atlas-cmms-backend:latest container_name: atlas_api depends_on: - postgres - minio environment: # Database Configuration DB_URL: postgres/atlas DB_USER: ${DB_USER:-rootUser} DB_PWD: ${DB_PASSWORD:-mypassword} # API Configuration PUBLIC_API_URL: ${PUBLIC_API_URL:-http://localhost:8080} JWT_SECRET_KEY: ${JWT_SECRET_KEY:-your-jwt-secret-key-change-in-production} # Frontend URL PUBLIC_FRONT_URL: ${PUBLIC_FRONT_URL:-http://localhost:3000} # MinIO Configuration MINIO_ENDPOINT: minio:9000 MINIO_ACCESS_KEY: ${MINIO_ROOT_USER:-minioadmin} MINIO_SECRET_KEY: ${MINIO_ROOT_PASSWORD:-minioadmin123} MINIO_BUCKET: ${MINIO_BUCKET:-atlas-bucket} STORAGE_TYPE: ${STORAGE_TYPE:-minio} # Email Configuration (Optional) SMTP_HOST: ${SMTP_HOST:-} SMTP_PORT: ${SMTP_PORT:-587} SMTP_USER: ${SMTP_USER:-} SMTP_PWD: ${SMTP_PASSWORD:-} MAIL_FROM: ${MAIL_FROM:-noreply@atlas-cmms.com} # Application Configuration SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-prod} # Optional Features ENABLE_SSO: ${ENABLE_SSO:-false} ENABLE_INVITATIONS: ${ENABLE_INVITATIONS:-false} ENABLE_EMAIL_NOTIFICATIONS: ${ENABLE_EMAIL_NOTIFICATIONS:-false} INVITATION_VIA_EMAIL: ${INVITATION_VIA_EMAIL:-false} # Google OAuth2 (Optional) GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-} GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-} # Microsoft OAuth2 (Optional) MICROSOFT_CLIENT_ID: ${MICROSOFT_CLIENT_ID:-} MICROSOFT_CLIENT_SECRET: ${MICROSOFT_CLIENT_SECRET:-} expose: - "8080" volumes: - ./backend/logos:/app/logos networks: - atlas-network restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"] interval: 30s timeout: 10s retries: 3 frontend: build: context: ./frontend dockerfile: Dockerfile container_name: atlas_frontend depends_on: - api environment: VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:8080/api} VITE_APP_NAME: ${VITE_APP_NAME:-Atlas CMMS} VITE_APP_VERSION: ${VITE_APP_VERSION:-1.0.0} expose: - "80" networks: - atlas-network restart: unless-stopped volumes: postgres_data: driver: local minio_data: driver: local npm_data: driver: local npm_letsencrypt: driver: local networks: atlas-network: driver: bridge