wulf-pulse/docker-compose.yml
lorentz ea3471d38d feat: Veeam RPO analysis, comparison, ticket analysis + company teams table
- Add Veeam RPO analysis page (/veeam-analysis) and comparison page (/veeam-comparison)
- Add API routes: /api/veeam/rpo-analyze, rpo-comparison, rpo-offline-log, ticket-analysis
- Add veeam-rpo-service.ts enhancements (RPO logic, offline detection, comparison)
- Add veeam-analysis-state.ts and rmm-device-resolver.ts services
- Add migrations 065-068: company_teams, veeam_rpo_offline_log, rpo_comparison_tables, veeam_ticket_analysis
- Add backup-status page updates and nav links for new Veeam pages
- Add scripts: deactivate-cis-for-inactive-companies, workstation category updates
- Add docs: mimecast-api-guide, veeam-backup-alerting-recommendation, workstation-backup-overview, ticket-analyzer-prompt
- Minor: webhook-service, entity-sync, entity-mapper, sync-helpers, sync.ts, middleware.ts updates
2026-04-29 09:16:46 -04:00

154 lines
4.7 KiB
YAML

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"
labels:
- "traefik.enable=true"
- "traefik.http.routers.pulse.rule=Host(`pulse.wulfconsulting.cloud`)"
- "traefik.http.routers.pulse.entrypoints=websecure"
- "traefik.http.routers.pulse.tls=true"
- "traefik.http.routers.pulse.tls.certresolver=cloudflare"
- "traefik.http.services.pulse.loadbalancer.server.port=3100"
- "traefik.docker.network=frontend"
networks:
- default
- frontend
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}
# Veeam VSPC Configuration
VEEAM_VSPC_URL: ${VEEAM_VSPC_URL}
VEEAM_VSPC_API_KEY: ${VEEAM_VSPC_API_KEY}
VEEAM_RPO_SHADOW_MODE: "true"
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
# Zabbix API Configuration
ZABBIX_API_URL: ${ZABBIX_API_URL}
ZABBIX_API_TOKEN: ${ZABBIX_API_TOKEN}
# ipinfo.io API token (optional)
IPINFO_TOKEN: ${IPINFO_TOKEN:-}
# Mimecast API Configuration
MIMECAST_CLIENT_ID: ${MIMECAST_CLIENT_ID}
MIMECAST_CLIENT_SECRET: ${MIMECAST_CLIENT_SECRET}
MIMECAST_BASE_URL: ${MIMECAST_BASE_URL:-https://api.services.mimecast.com}
MIMECAST_ACCOUNT_CODE: ${MIMECAST_ACCOUNT_CODE}
# IT Glue Configuration
ITGLUE_API_KEY: ${ITGLUE_API_KEY}
# Backblaze B2 Storage (S3-compatible)
B2_KEY_ID: ${B2_KEY_ID}
B2_APP_KEY: ${B2_APP_KEY}
B2_BUCKET: ${B2_BUCKET:-wulf-audits}
B2_REGION: ${B2_REGION:-us-west-002}
B2_ENDPOINT: ${B2_ENDPOINT:-s3.us-west-002.backblazeb2.com}
# Webhook Configuration
WEBHOOK_BASE_URL: ${WEBHOOK_BASE_URL:-https://pulse.wulfconsulting.cloud}
AUTOTASK_WEBHOOK_SECRET: ${AUTOTASK_WEBHOOK_SECRET}
# 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
frontend:
external: true