food-market/docs/24x7.md
nurdotnet 5bcbff66de ci/deploy: GitHub Actions + Docker images + DB backup + 24x7 plan
.github/workflows/ci.yml — on push/PR:
  - backend job: dotnet restore/build/test with a live postgres service
  - web job: pnpm install + vite build + tsc, uploads dist artifact
  - pos job: windows-latest, dotnet publish self-contained win-x64
    single-file exe as artifact

.github/workflows/docker.yml — on push to main (if src changed) or manual:
  - api image → ghcr.io/nurdotnet/food-market-api:{latest,sha}
  - web image → ghcr.io/nurdotnet/food-market-web:{latest,sha}
  - uses buildx + GHA cache

deploy/Dockerfile.api — multi-stage (.NET 8 sdk → aspnet runtime),
  healthcheck on /health, App_Data + logs volumes mounted.

deploy/Dockerfile.web — node20 build → nginx 1.27 runtime; ships the
  Vite dist + nginx.conf that proxies /api, /connect, /health to api
  service and serves the SPA with fallback to index.html.

deploy/nginx.conf — SPA + API reverse-proxy configuration.

deploy/docker-compose.yml — production-shape stack: postgres 16 +
  api (from ghcr image) + web (from ghcr image), named volumes, env-
  driven tags so stage/prod can pin specific SHAs.

deploy/backup.sh — pg_dump wrapper with 3 modes: local (brew
  postgres), --docker (compose container), --remote HOST:PORT. Writes
  gzipped dumps to ~/food-market-backups, 30-day retention.

docs/24x7.md — explains where Claude/CI/stage live, which pieces
  depend on the Mac, and the exact steps to hand off secrets via
  ~/.food-market-secrets/ so I can push them into GitHub Secrets.

Next, once user supplies Proxmox + FTP + Telegram creds: stage deploy
workflow, notification workflow, and (optional) claude-runner VM so
I no longer depend on the Mac being awake.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 11:26:01 +05:00

6.5 KiB
Raw Blame History

24/7 автономный workflow

Картина: твой Mac/iPhone даёт команду → Claude работает → всё запускается в облаке независимо от твоего устройства.

        ┌──────────────┐        ┌──────────────┐
        │   Mac / iPhone │        │  Твой Proxmox │
        │ (даёшь команду)│        │  VM (будущее) │
        └───────┬──────┘        └───────┬──────┘
                │                       │
                │  Claude Code          │  Claude Code 24/7
                │  (когда открыт)       │  (когда поднимем VM)
                ▼                       ▼
        ┌──────────────────────────────────────┐
        │            GitHub (main branch)       │
        └──────┬──────────────────────────┬────┘
               │ push                     │
               ▼                          ▼
        ┌──────────────┐          ┌──────────────┐
        │ CI workflow  │          │Docker workflow│
        │ (backend+web │          │(api+web images│
        │ +POS builds) │          │ на ghcr.io)   │
        └──────┬──────┘          └──────┬──────┘
               │                         │
               │ artifacts:              │ images pulled by
               │ web-dist, POS .exe      │ stage / prod compose
               ▼                         ▼
        ┌──────────────┐          ┌──────────────┐
        │ GitHub        │          │ Proxmox-VM    │
        │ Releases      │          │ stage/prod    │
        │ (.exe, APK)   │          │ (docker-compose)│
        └──────────────┘          └──────────────┘

Что где живёт

Компонент Где Когда работает Зависит от Mac?
Claude Code (текущая сессия) твой Mac пока открыта app + Mac не спит Да
Claude Code (будущее 24/7) Proxmox VM всегда Нет
GitHub (код) github.com всегда Нет
GitHub Actions CI github.com срабатывает на push / cron Нет
Docker images ghcr.io всегда Нет
Тестовый стенд (stage) Proxmox VM всегда Нет
DB бэкапы Proxmox VM → локальный диск + S3 (опц.) cron nightly Нет

Сценарии

Ты заказал фичу → уснул

  1. (Днём) запустил Claude, дал команду «сделай X», Claude работает
  2. Перед сном Claude коммитит и пушит то что успел
  3. GitHub Actions автоматически собирает backend+web+POS, прогоняет тесты
  4. Docker-образы уходят в ghcr.io
  5. (Если stage настроен) — stage автопулит образ → перезапускается → готов к тесту
  6. Telegram-бот шлёт тебе «готово, проверь stage.food-market.xxx»
  7. Утром ты смотришь, ревьюишь, делаешь merge/revert

Ты дал команду с iPhone

  1. Открыл Claude на iPhone, сказал «обнови UI страницы X»
  2. Claude работает, пушит
  3. GitHub Actions → ghcr.io → stage → Telegram → ты проверяешь прямо с iPhone

Что-то пошло не так

  • Каждый коммит = одна точка отката. git revert <sha> за 10 секунд.
  • БД: ежедневный pg_dump .sql.gz, 30 дней ротации, скрипт deploy/backup.sh.
  • Критические операции (миграции с удалением данных, force-push на main) — всегда спрошу тебя.

Что нужно для полноценного 24/7 (ещё не сделано)

  • GitHub Actions для CI (backend/web/POS) — готов .github/workflows/ci.yml
  • Docker workflow — готов .github/workflows/docker.yml
  • docker-compose для стенда — готов deploy/docker-compose.yml
  • DB backup скрипт — готов deploy/backup.sh
  • Proxmox-VM food-market-stage — ждёт кредов от тебя
  • Proxmox-VM claude-runner (чтобы я не жил на твоём Mac) — ждёт кредов
  • SSH-ключ для деплоя в GitHub Secrets
  • Telegram bot + chat_id в GitHub Secrets
  • FTP для APK (если нужен) в GitHub Secrets
  • Домен + SSL для stage (опц., Cloudflare)

Секреты: безопасно передать мне

Пока твой Mac — единственное место, куда Claude Code имеет доступ. Безопасный путь:

  1. Создай папку: mkdir -p ~/.food-market-secrets && chmod 700 ~/.food-market-secrets
  2. Положи туда файлы (я буду читать только по твоей команде и не буду вставлять значения в чат):
    • ~/.food-market-secrets/proxmox.env — ssh creds для Proxmox API/VM
    • ~/.food-market-secrets/ftp.env — FTP для APK
    • ~/.food-market-secrets/telegram.envBOT_TOKEN=... + CHAT_ID=...
  3. Пришли в чат: "Секреты в ~/.food-market-secrets/"
  4. Я прочитаю, прокину в GitHub Secrets через gh secret set, больше нигде не сохраню.

Настройка Mac чтобы не засыпал ночью (временно, пока нет remote runner)

# Заблокировать sleep на время работы Claude (Ctrl+C чтобы отменить)
caffeinate -i -d

Или в System Settings → Lock Screen → «Turn display off after: Never» + «Prevent automatic sleeping when the display is off».

После того как поднимем claude-runner VM — этот обход больше не нужен.