services: postgres: image: postgres:16-alpine container_name: proxpanel-postgres restart: unless-stopped environment: POSTGRES_USER: proxpanel POSTGRES_PASSWORD: proxpanel POSTGRES_DB: proxpanel ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U proxpanel -d proxpanel"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend container_name: proxpanel-backend restart: unless-stopped depends_on: postgres: condition: service_healthy environment: NODE_ENV: production PORT: 8080 DATABASE_URL: postgresql://proxpanel:proxpanel@postgres:5432/proxpanel JWT_SECRET: change_this_to_a_long_secret_key_please JWT_REFRESH_SECRET: change_this_to_another_long_secret_key JWT_EXPIRES_IN: 15m JWT_REFRESH_EXPIRES_IN: 30d CORS_ORIGIN: http://localhost:80 RATE_LIMIT_WINDOW_MS: 60000 RATE_LIMIT_MAX: 600 AUTH_RATE_LIMIT_WINDOW_MS: 60000 AUTH_RATE_LIMIT_MAX: 20 ENABLE_SCHEDULER: "true" BILLING_CRON: "0 * * * *" BACKUP_CRON: "*/15 * * * *" POWER_SCHEDULE_CRON: "* * * * *" MONITORING_CRON: "*/5 * * * *" PROXMOX_TIMEOUT_MS: 15000 ports: - "8080:8080" frontend: build: context: . args: VITE_API_BASE_URL: http://localhost:8080 container_name: proxpanel-frontend restart: unless-stopped depends_on: - backend ports: - "80:80" volumes: postgres_data: