# NODA1 Safe Deploy (Canonical Workflow) **Ціль:** синхронізувати ноут ↔ GitHub ↔ NODA1 ↔ реальний Docker-стек так, щоб: - не ламати працюючий прод; - не плодити "невидимі" гілки; - не мати `unrelated history` на сервері; - мати один канонічний стан коду та документації. **Канонічна правда:** `origin/main` (GitHub). Усе інше або runtime (Docker), або secrets поза git. --- ## 1) Ролі директорій на NODA1 На NODA1 використовуємо **один deploy root**: - `/opt/microdao-daarion` — **canonical deployment checkout** (runtime source of truth). - `/root/microdao-daarion` — не runtime-tree (marker/історичні артефакти), не використовувати для deploy. Ціль: не мати дубльованих runtime дерев і уникнути deployment drift. --- ## 2) Golden Rules (не порушувати) 1. Не редагувати код/доки "на проді руками", окрім аварійної ситуації. 2. Не створювати гілки на сервері; сервер не місце для розробки. 3. Для docker compose завжди використовувати один і той самий project name: `-p microdao-daarion`. 4. Секрети (токени/паролі) не комітяться; для них тримати `*.example` + короткий опис, де лежить на сервері. --- ## 3) Нормальний (правильний) цикл змін ### A) На ноуті 1. Зміни в коді/доках → PR/merge в `origin/main`. 2. Після merge: оновити `PROJECT-MASTER-INDEX.md`, якщо змінювались сервіси/порти/шляхи. ### B) На NODA1: синхронізація коду (без простою) ```bash ssh root@144.76.224.179 cd /opt/microdao-daarion git fetch origin git pull --ff-only git rev-parse --short HEAD ``` ### C) Deploy одного сервісу (мінімальний ризик) Приклад: router ```bash cd /opt/microdao-daarion docker compose -p microdao-daarion -f docker-compose.node1.yml build router docker compose -p microdao-daarion -f docker-compose.node1.yml up -d --no-deps --force-recreate router curl -fsS http://127.0.0.1:9102/health ``` Аналогічно для gateway: ```bash docker compose -p microdao-daarion -f docker-compose.node1.yml build gateway docker compose -p microdao-daarion -f docker-compose.node1.yml up -d --no-deps --force-recreate gateway curl -fsS http://127.0.0.1:9300/health ``` --- ## 4) Runtime snapshot (звірка "реальної архітектури") Після деплою (або перед ним) зробити snapshot: ```bash cd /opt/microdao-daarion ./scripts/node1/snapshot_node1.sh > "/opt/backups/node1_snapshot_$(date +%Y%m%d-%H%M%S).txt" /opt/microdao-daarion/ops/drift-check.sh ``` Це дає: - який git commit реально задеплоєний; - які контейнери/образи/health активні; - базові health endpoints. --- ## 5) Якщо на NODA1 знову з’явились конфлікти `git pull` Не робити `rebase` у прод-директорії. Правильний шлях: 1. `cd /opt/microdao-daarion && git fetch origin` 2. Звірити локальні правки: `git status --short` 3. Якщо є emergency hotfix на сервері: заархівувати diff і перенести в PR. 4. Далі `git pull --ff-only` і деплой тільки з `/opt/microdao-daarion`.