From 21a02192875962afeaf2f6b935439389bd5c87d4 Mon Sep 17 00:00:00 2001 From: vitya Date: Sat, 29 Aug 2026 18:14:34 +0300 Subject: [PATCH] =?UTF-8?q?docs(runbook):=20sched-workers-vds-mock-runbook?= =?UTF-8?q?=20(wiki:3339)=20+=20=D1=81=D1=82=D0=B5=D0=BA=2029=20compose=20?= =?UTF-8?q?=E2=80=94=20=D0=B2=D0=BE=D1=80=D0=BA=D0=B5=D1=80=D1=8B=20@apilk?= =?UTF-8?q?i=20=D0=BD=D0=B0=20VDS=20(=D0=BC=D0=BE=D0=BA-=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=D0=BD,=20task:1537)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sched-workers-vds-mock-runbook.md | 6 ++ .../vds-kzntsv/sched-workers.compose.yml | 96 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 .wiki/concepts/sched-workers-vds-mock-runbook.md create mode 100644 host-stacks/vds-kzntsv/sched-workers.compose.yml diff --git a/.wiki/concepts/sched-workers-vds-mock-runbook.md b/.wiki/concepts/sched-workers-vds-mock-runbook.md new file mode 100644 index 0000000..cfb0c62 --- /dev/null +++ b/.wiki/concepts/sched-workers-vds-mock-runbook.md @@ -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")`. diff --git a/host-stacks/vds-kzntsv/sched-workers.compose.yml b/host-stacks/vds-kzntsv/sched-workers.compose.yml new file mode 100644 index 0000000..cf81ca2 --- /dev/null +++ b/host-stacks/vds-kzntsv/sched-workers.compose.yml @@ -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