fix(release): make deployment backup and rollback immutable
This commit is contained in:
@@ -11,9 +11,8 @@ met de naam `geointel`, bereikbaar op `http://192.168.10.150:1202`.
|
||||
Kopieer de **volledige** map `C:\Projects\geointel` naar
|
||||
`/mnt/user/appdata/geointel` op de server. Verder niets uitzoeken.
|
||||
|
||||
`.dockerignore` regelt de rest: `node_modules/`, `.git/`, de dubbele
|
||||
`geointel/`-map, `docs/`, `artifacts/` en testoutput gaan niet mee de
|
||||
build-context in, ook al staan ze in de map.
|
||||
`.dockerignore` regelt de rest: `node_modules/`, `.git/`, `docs/`, `artifacts/`
|
||||
en testoutput gaan niet mee de build-context in, ook al staan ze in de map.
|
||||
|
||||
Eén waarschuwing bij het overschrijven: laat `storage/`, `postgres-data/`,
|
||||
`backups/` en `models/` op de server **staan**. Dat is je bestaande data, en
|
||||
@@ -71,7 +70,8 @@ die hostname in `GEOINTEL_CORS_ORIGINS` staan — anders blokkeert de browser de
|
||||
API-calls vanaf het publieke adres. De backend doet geen host-validatie, dus
|
||||
verder is er niets nodig aan applicatiekant.
|
||||
|
||||
Voor GPU-inferentie (optioneel, kan ook later):
|
||||
De productie-image bevat altijd de gepinde AI-runtime. Inferentie zelf kan
|
||||
uitblijven totdat een lokaal, gevalideerd model beschikbaar is:
|
||||
|
||||
```env
|
||||
GEOINTEL_INSTALL_AI=true
|
||||
@@ -81,8 +81,8 @@ YOLO_REQUIRE_CUDA=true
|
||||
YOLO_MODEL_PATH=/app/models/<jouw-model>.pt
|
||||
```
|
||||
|
||||
Laat `GEOINTEL_INSTALL_AI=false` staan als je eerst gewoon wilt dat de app
|
||||
draait — dat scheelt een paar GB aan PyTorch-lagen in de build.
|
||||
Laat `YOLO_ENABLED=false` zolang er geen geschikt modelbestand is. Het
|
||||
release-deployscript weigert bewust een GIS-only productie-image.
|
||||
|
||||
---
|
||||
|
||||
@@ -134,12 +134,21 @@ bash deploy/unraid/deploy-release.sh
|
||||
|
||||
Het script:
|
||||
|
||||
1. ruimt een eventueel achtergebleven Compose-stack op (ook de oude
|
||||
1. bindt het exacte huidige image-ID aan een unieke backup-specifieke
|
||||
`rollback-predeploy-*`-tag;
|
||||
2. bouwt of hergebruikt de AI-candidate terwijl de huidige release beschikbaar
|
||||
blijft, legt het exacte lokale image-ID vast en maakt daarop SBOM- en
|
||||
Trivy-evidence;
|
||||
3. controleert vóór het pauzeren de vrije ruimte en maakt vervolgens een
|
||||
byte-complete, SHA-256-geverifieerde database-, storage- en modelsnapshot in
|
||||
`/mnt/user/appdata/geointel/backups`; ongewijzigde bestanden mogen alleen
|
||||
vanuit een oudere geverifieerde backup worden gehardlinkt;
|
||||
4. ruimt een eventueel achtergebleven Compose-stack op (ook de oude
|
||||
3-container dev-stack die óók poort 1202 pakt);
|
||||
2. bewaart de huidige image als `geointel-all-in-one:previous`;
|
||||
3. bouwt `deploy/unraid/Dockerfile.all-in-one`;
|
||||
4. start één container `geointel` met `-p 1202:80` en `--gpus all`;
|
||||
5. rolt automatisch terug naar `:previous` als de healthcheck of smoke faalt.
|
||||
5. start één container `geointel` met `-p 1202:80` en `--gpus all`;
|
||||
6. bewijst een rollbackdump eerst in een geïsoleerde tijdelijke database,
|
||||
bewaart de oude productiedatabase als herstelpad en start pas daarna
|
||||
automatisch het image-ID dat cryptografisch in die pre-deploybackup staat.
|
||||
|
||||
De eerste build duurt lang (PostGIS + GDAL + npm build). Volgende deploys
|
||||
hergebruiken de Docker-layercache.
|
||||
@@ -165,24 +174,13 @@ docker logs --tail 200 geointel
|
||||
|
||||
---
|
||||
|
||||
## 7. Belangrijk: dubbele projectmap lokaal
|
||||
## 7. Geretireerde dubbele projectmap
|
||||
|
||||
In `C:\Projects\geointel` staat een tweede, volledige kopie van het project
|
||||
onder `C:\Projects\geointel\geointel\`. Die bevat dezelfde bestanden en
|
||||
dezelfde datum, maar staat buiten git. Zolang die er staat:
|
||||
|
||||
- wordt de Docker build-context onnodig verdubbeld;
|
||||
- weet je bij het bewerken van bijvoorbeeld `docker-compose.unraid.yml` niet
|
||||
welke versie je te pakken hebt.
|
||||
|
||||
`.dockerignore` sluit hem nu uit, maar ruim hem op zodra je zeker weet dat er
|
||||
niets unieks in staat. Vergelijk eerst:
|
||||
|
||||
```powershell
|
||||
robocopy C:\Projects\geointel\geointel C:\Projects\geointel /L /E /NJH /NJS /NDL /XF *.pyc
|
||||
```
|
||||
|
||||
Regels die als `New File` verschijnen bestaan alleen in de kopie.
|
||||
De vroegere geneste mirror `C:\Projects\geointel\geointel` is geretireerd. De
|
||||
immutable Git-herkomst, niet-getrackte recoverybestanden en verificatiegrens
|
||||
staan in `docs/accuracy-program/13-nested-mirror-retirement.md`. Behandel die
|
||||
evidence als herstelreferentie; deze handleiding vraagt geen extra kopieer- of
|
||||
opruimactie.
|
||||
|
||||
---
|
||||
|
||||
@@ -190,11 +188,15 @@ Regels die als `New File` verschijnen bestaan alleen in de kopie.
|
||||
|
||||
```bash
|
||||
cd /mnt/user/appdata/geointel
|
||||
bash deploy/unraid/rollback-dockerman-container.sh
|
||||
bash deploy/unraid/rollback-dockerman-container.sh \
|
||||
--backup-dir /mnt/user/appdata/geointel/backups/<predeploy-release-id> \
|
||||
--confirm-production-database-restore
|
||||
```
|
||||
|
||||
Rollback hergebruikt dezelfde PostGIS- en storage-paden en draait nooit een
|
||||
Alembic-downgrade.
|
||||
Rollback hergebruikt dezelfde storage-paden, bewijst de geverifieerde dump
|
||||
eerst geïsoleerd, wisselt daarna databases via no-clobber namen en draait nooit
|
||||
een Alembic-downgrade. De oude productiedatabase blijft staan totdat een
|
||||
operator haar na controle expliciet opruimt.
|
||||
|
||||
---
|
||||
|
||||
@@ -202,7 +204,7 @@ Alembic-downgrade.
|
||||
|
||||
| Bestand | Aanpassing |
|
||||
|---|---|
|
||||
| `.dockerignore` | Sluit root-`node_modules`, de dubbele `geointel/`-map, `.git`, `docs/`, `artifacts/` en testoutput uit de build-context |
|
||||
| `.dockerignore` | Sluit root-`node_modules`, `.git`, `docs/`, `artifacts/` en testoutput uit de build-context |
|
||||
| `deploy/unraid/deploy-release.sh` | `git rev-parse HEAD` crashte op een kopie zonder `.git`. Valt nu terug op `GEOINTEL_BUILD_SHA`, een `RELEASE_SHA`-bestand of een content-hash van de broncode |
|
||||
| `deploy/unraid/deploy-release.sh` | Smoke-scripts worden op bestaan getest in plaats van op de execute-bit, die bij een Windows-kopie verloren gaat |
|
||||
| `deploy/unraid/run-dockerman-container.sh` | Ruimt expliciet zowel `docker-compose.yml` (3 containers) als `docker-compose.unraid.yml` op, zodat poort 1202 gegarandeerd vrij is |
|
||||
|
||||
Reference in New Issue
Block a user