# 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`.
