docs(runbook): sched-workers-vds-mock-runbook (wiki:3339) + стек 29 compose — воркеры @apilki на VDS (мок-прогон, task:1537)

This commit is contained in:
2026-08-29 18:14:34 +03:00
parent 4a41be7943
commit 21a0219287
2 changed files with 102 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
# sched-workers-vds — СТУБ
> ⚙️ **Не читать, не править.** Канон — mappa wiki-сущность `concepts/sched-workers-vds-mock-runbook` (wiki:3339, проект .admin).
> Файловый канал ранбуков закрыт (2026-08-29, task:1507). Git-история хранит прежний контент.
См. `wiki_get(project=".admin", slug="concepts/sched-workers-vds-mock-runbook")`.

View File

@@ -0,0 +1,96 @@
# sched-workers — HTTP-воркеры пайплайнов клиентов @apilki (VDS, рядом с ядром sched).
# Ядро sched: стек 28 (sched.compose.yml). Воркеры — отдельный стек в той же сети proxy,
# sched ходит к ним по имени сервиса из sched.tasks.json.
# Моки: verdaccio.kzntsv.site (npm), git.kzntsv.site (Gitea = мок-GitHub, орга apilki),
# ntfy (VDS-сервис в proxy), unisender-mock (локальный мок писем в этом стеке).
# Deploy: Portainer-managed (см. portainer-stack-management-vds). Env через Portainer (не env_file).
# Source-of-truth: host-stacks/vds-kzntsv/sched-workers.compose.yml.
services:
ym-client-builder:
image: registry.kzntsv.site/ym-client-builder:0.1.2
container_name: ym-client-builder
restart: unless-stopped
mem_limit: 512m
networks:
- proxy
environment:
PORT: "8080"
SCHED_API_KEY: ${SCHED_API_KEY}
UNISENDER_API_KEY: mock-key
UNISENDER_FROM: noreply@snolla.com
NPM_TOKEN: ${NPM_TOKEN}
GITHUB_TOKEN: ${GITHUB_TOKEN}
# мок-publish: verdaccio (npm) + Gitea (репо/релизы) — без выхода в npmjs/github.com
PUBLISH_REGISTRY: ${PUBLISH_REGISTRY}
PUBLISH_REMOTE_BASE: ${PUBLISH_REMOTE_BASE}
PUBLISH_GH_API_BASE: ${PUBLISH_GH_API_BASE}
volumes:
- /opt/stacks/sched-workers/data-ym:/app/data
ozon-seller-builder:
image: registry.kzntsv.site/ozon-seller-builder:0.1.0
container_name: ozon-seller-builder
restart: unless-stopped
# tsc-сборка клиента ~700MB пик (openapi-generator + компилятор) — 512m OOM
mem_limit: 1g
networks:
- proxy
environment:
WORKER_PORT: "8080"
SCHED_API_KEY: ${SCHED_API_KEY}
# внутренний крон не нужен — расписанием рулит sched. 31 февраля не наступает никогда.
CRON_SCHEDULE: "0 0 29 2 *"
# персистентность state/output на хосте (bind-mount /app/data)
STATE_FILE: /app/data/state.json
OUTPUT_DIR: /app/data/output/typescript
# безопасный дефолт: DRY_RUN=1. Реальный мок-publish — только явным data.dryRun=false в таске.
DRY_RUN: "1"
BROWSER_CDP_URL: http://browser:9222
NTFY_URL: http://ntfy
NTFY_TOPIC: ozon-seller-pipeline
UNISENDER_API_KEY: mock-key
UNISENDER_SENDER_EMAIL: noreply@snolla.com
UNISENDER_SENDER_NAME: sched-pipeline
UNISENDER_ENDPOINT: http://unisender-mock:8080/ru/transactional/api/v1/email/send.json
NOTIFY_EMAIL_TO: ${NOTIFY_EMAIL_TO}
GH_TOKEN: ${GITHUB_TOKEN}
NPM_TOKEN: ${NPM_TOKEN}
# мок-publish: verdaccio (npm) + Gitea (репо/релизы) — без выхода в npmjs/github.com
PUBLISH_REGISTRY: ${PUBLISH_REGISTRY}
PUBLISH_REMOTE_BASE: ${PUBLISH_REMOTE_BASE}
PUBLISH_GH_API_BASE: ${PUBLISH_GH_API_BASE}
volumes:
- /opt/stacks/sched-workers/data-ozon:/app/data
# снапшот спеки из репо (fetch антиботом не ходим — dry-run от ручного снапшота)
- /opt/stacks/sched-workers/data-ozon-openapi:/app/openapi
depends_on:
- browser
# headless Chrome + CDP :9222 (для антибот-fetch стадий ozon), socat наружу 0.0.0.0:9222
browser:
image: registry.kzntsv.site/browser-cdp:0.1.0
container_name: browser-cdp
shm_size: "1gb"
restart: unless-stopped
mem_limit: 512m
networks:
- proxy
# мок Unisender Go: письма в /opt/stacks/sched-workers/data-mail, реальных отправок нет
unisender-mock:
image: registry.kzntsv.site/unisender-mock:0.1.0
container_name: unisender-mock
restart: unless-stopped
mem_limit: 128m
environment:
PORT: "8080"
MAIL_DIR: /mail
volumes:
- /opt/stacks/sched-workers/data-mail:/mail
networks:
- proxy
networks:
proxy:
external: true