services: # Redis cache service on custom port 6380 (instead of default 6379) redis: image: redis:7-alpine container_name: pulse-redis restart: unless-stopped ports: - "6380:6379" volumes: - redis_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 # PostgreSQL database for Autotask sync postgres: image: postgres:16-alpine container_name: pulse-postgres restart: unless-stopped ports: - "5432:5432" env_file: - .env.local environment: POSTGRES_DB: ${POSTGRES_DB:-pulse_autotask} POSTGRES_USER: ${POSTGRES_USER:-pulse_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data - ./migrations:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-pulse_user} -d ${POSTGRES_DB:-pulse_autotask}"] interval: 10s timeout: 5s retries: 5 # Next.js application on port 3100 (instead of 3000) app: build: context: . dockerfile: Dockerfile container_name: pulse-app restart: unless-stopped ports: - "3100:3100" env_file: - .env.local environment: # Application settings NODE_ENV: production PORT: 3100 # Redis configuration REDIS_URL: redis://redis:6379 # Autotask API Configuration AUTOTASK_API_URL: ${AUTOTASK_API_URL} AUTOTASK_USERNAME: ${AUTOTASK_USERNAME} AUTOTASK_SECRET: ${AUTOTASK_SECRET} AUTOTASK_API_INTEGRATION_CODE: ${AUTOTASK_API_INTEGRATION_CODE} # Datto RMM API Configuration DATTO_RMM_API_URL: ${DATTO_RMM_API_URL} DATTO_RMM_API_KEY: ${DATTO_RMM_API_KEY} DATTO_RMM_API_SECRET: ${DATTO_RMM_API_SECRET} # Addigy API Configuration ADDIGY_API_URL: ${ADDIGY_API_URL} ADDIGY_API_TOKEN: ${ADDIGY_API_TOKEN} ADDIGY_ORG_ID: ${ADDIGY_ORG_ID} # Auvik API Configuration AUVIK_API_URL: ${AUVIK_API_URL} AUVIK_API_USER: ${AUVIK_API_USER} AUVIK_API_KEY: ${AUVIK_API_KEY} # SalesBldr API Configuration SALESBLDR_API_URL: ${SALESBLDR_API_URL} SALESBLDR_API_KEY: ${SALESBLDR_API_KEY} # PostgreSQL Configuration POSTGRES_HOST: postgres POSTGRES_PORT: 5432 POSTGRES_DB: ${POSTGRES_DB:-pulse_autotask} POSTGRES_USER: ${POSTGRES_USER:-pulse_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-your_secure_password_here_change_in_production} DATABASE_URL: postgresql://${POSTGRES_USER:-pulse_user}:${POSTGRES_PASSWORD:-your_secure_password_here_change_in_production}@postgres:5432/${POSTGRES_DB:-pulse_autotask} depends_on: redis: condition: service_healthy postgres: condition: service_healthy volumes: # Mount .env.local for development (remove in production) - ./.env.local:/app/.env.local:ro volumes: redis_data: driver: local postgres_data: driver: local networks: default: name: pulse-network