# sched — шедулер (ядро daemon + admin API) на инфра-VDS. # Прод: VDS рядом с общей MariaDB (стек 11, сеть shared-dbs, отдельная база sched — свой role, решение 2026-08-27). # Daemon: published @schedjs/daemon@0.12.1 + @schedjs/storage-mysql@0.4.0 (Dockerfile.mysql). # Endpoint: https://sched.vds.kzntsv.site (admin API /api/*; health /api/health открыт, остальное Bearer SCHED_ADMIN_KEY). # Deploy: Portainer-managed (см. portainer-stack-management-vds). Env через Portainer (не env_file). services: schedd: image: registry.kzntsv.site/sched-daemon:0.12.1-mysql container_name: schedd restart: unless-stopped mem_limit: 512m networks: - shared-dbs - proxy command: - --tasks - /app/config/tasks.json - --storage - mysql - --admin-port - "8080" - --admin-host - 0.0.0.0 environment: MYSQL_URL: mysql://sched:${SCHED_DB_PASS}@mariadb:3306/sched?ssl={"rejectUnauthorized":false} SCHED_ADMIN_KEY: ${SCHED_ADMIN_KEY} volumes: - /opt/stacks/sched/tasks.json:/app/config/tasks.json:ro healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:8080/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"] interval: 15s timeout: 5s retries: 3 start_period: 10s labels: traefik.enable: "true" traefik.http.routers.sched.entrypoints: websecure traefik.http.routers.sched.rule: Host(`sched.vds.kzntsv.site`) traefik.http.routers.sched.tls.certresolver: letsEncrypt traefik.http.services.sched.loadbalancer.server.port: "8080" networks: shared-dbs: external: true proxy: external: true