docs(runbook): sched-workers-vds-mock-runbook (wiki:3339) + стек 29 compose — воркеры @apilki на VDS (мок-прогон, task:1537)
This commit is contained in:
6
.wiki/concepts/sched-workers-vds-mock-runbook.md
Normal file
6
.wiki/concepts/sched-workers-vds-mock-runbook.md
Normal 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")`.
|
||||||
96
host-stacks/vds-kzntsv/sched-workers.compose.yml
Normal file
96
host-stacks/vds-kzntsv/sched-workers.compose.yml
Normal 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
|
||||||
Reference in New Issue
Block a user