102 lines
3.7 KiB
Markdown
102 lines
3.7 KiB
Markdown
# 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`.
|