Files
admin/host-stacks/local/sched-pipelines/docker-compose.yml

151 lines
5.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sched-pipelines — локальный стенд: sched daemon + 2 HTTP-воркера (ym/ozon)
# + CDP-browser (ozon антибот) + локальный ntfy + alert-bridge (sched webhook → ntfy/email).
#
# Расписание (sched daemon, tasks.json): ozon 2:00, yandex 2:30 — ежедневно.
# Воркеры в DRY-RUN: реальные publish/push НЕ выполняются до отмашки оператора.
#
# Запуск: docker compose up -d --build
# Секреты: .env (gitignored; значения в pass: sched-pipelines/local/*)
# Миграция на VDS: образы в registry, сеть proxy, ntfy → ntfy.vds.kzntsv.site.
name: sched-pipelines
services:
# --- sched daemon (schedd) ---
schedd:
build:
context: .
dockerfile: schedd.Dockerfile
args:
VERDACCIO_TOKEN: ${VERDACCIO_TOKEN:-}
image: sched-pipelines/schedd:local
command:
- --tasks
- /app/tasks.json
- --db
- /data/sched.db
- --admin-port
- "8080"
- --admin-host
- 0.0.0.0
- --tick-interval
- "1000"
environment:
SCHED_ADMIN_KEY: ${SCHED_ADMIN_KEY:?задайте в .env}
volumes:
- ./tasks.generated.json:/app/tasks.json:ro
- sched-data:/data
ports:
- "127.0.0.1:18080:8080"
healthcheck:
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:8080/api/health',{headers:{authorization:'Bearer '+process.env.SCHED_ADMIN_KEY}}).then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
interval: 5s
timeout: 3s
retries: 10
restart: unless-stopped
networks: [sched-local]
# --- воркер Yandex Market (HTTP-воркер sched, envelope) ---
ym-client-builder:
build:
context: ../../../../yandex-market-partner-api-client
dockerfile: Dockerfile
image: sched-pipelines/ym-client-builder:local
environment:
PORT: "8080"
SCHED_API_KEY: ${SCHED_API_KEY:?задайте в .env}
UNISENDER_API_KEY: ${UNISENDER_API_KEY:-}
UNISENDER_FROM: ${UNISENDER_FROM:-}
NPM_TOKEN: ${NPM_TOKEN:-}
GITHUB_TOKEN: ${GITHUB_TOKEN:-}
volumes:
- ./data-ym:/app/data
ports:
- "127.0.0.1:18090:8080"
restart: unless-stopped
networks: [sched-local]
# --- воркер Ozon Seller (HTTP-воркер sched + внутренний крон ОТКЛЮЧЁН) ---
ozon-seller-builder:
build:
context: ../../../../ozon-seller-api-client
dockerfile: C:/Users/vitya/projects/.admin/host-stacks/local/sched-pipelines/ozon.Dockerfile
args:
VERDACCIO_TOKEN: ${VERDACCIO_TOKEN:-}
image: sched-pipelines/ozon-seller-builder:local
environment:
WORKER_PORT: "8080"
SCHED_API_KEY: ${SCHED_API_KEY:?задайте в .env}
# внутренний крон не нужен — расписанием рулит sched (ozon 2:00).
# 31 февраля не наступает никогда: страховая от двойного запуска.
CRON_SCHEDULE: "0 0 29 2 *"
STATE_FILE: /app/data/state.json
LOCK_FILE: /app/data/pipeline.lock
DRY_RUN: "1"
BROWSER_CDP_URL: http://browser:9222
NTFY_URL: http://ntfy
NTFY_TOPIC: ozon-seller-pipeline
UNISENDER_API_KEY: ${UNISENDER_API_KEY:-}
NOTIFY_EMAIL_TO: ${NOTIFY_EMAIL_TO:-}
GH_TOKEN: ${GITHUB_TOKEN:-}
NPM_TOKEN: ${NPM_TOKEN:-}
volumes:
- ozon-data:/app/data
ports:
- "127.0.0.1:18091:8080"
restart: unless-stopped
depends_on:
- browser
networks: [sched-local]
# --- headless Chrome + CDP (для антибот-fetch стадий ozon) ---
browser:
build:
context: ../../../../ozon-seller-api-client/service/browser
dockerfile: Dockerfile
image: sched-pipelines/browser-cdp:local
container_name: browser-cdp
shm_size: "1gb"
restart: unless-stopped
networks: [sched-local]
# --- локальный ntfy (на время локального периода; VDS-ntfy требует auth-топика) ---
ntfy:
image: binwiederhier/ntfy:v2.11.0
command: serve
environment:
NTFY_LISTEN_HTTP: ":80"
NTFY_CACHE_FILE: /var/cache/ntfy/cache.db
volumes:
- ./data-ntfy:/var/cache/ntfy
ports:
- "127.0.0.1:8096:80"
restart: unless-stopped
networks: [sched-local]
# --- alert-bridge: sched webhook-алерты → ntfy + email (unisender go2) ---
alert-bridge:
build: ./bridge
image: sched-pipelines/alert-bridge:local
environment:
PORT: "9090"
NTFY_URL: http://ntfy
NTFY_TOPIC: sched-alerts
WEBHOOK_SECRET: ${WEBHOOK_SECRET:?задайте в .env}
UNISENDER_API_KEY: ${UNISENDER_API_KEY:-}
UNISENDER_FROM: ${UNISENDER_FROM:-}
EMAIL_TO: ${NOTIFY_EMAIL_TO:-}
ports:
- "127.0.0.1:19090:9090"
restart: unless-stopped
depends_on:
- ntfy
networks: [sched-local]
volumes:
sched-data:
ozon-data:
networks:
sched-local:
driver: bridge