7.2 KiB
Handmatige deploy naar Unraid (1 container, poort 1202)
Voor als de bestaande deploy stuk is en je de code met de hand kopieert
(zip/scp/SMB) in plaats van via git clone. Eindresultaat: één container
met de naam geointel, bereikbaar op http://192.168.10.150:1202.
1. Kopiëren
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.
Eén waarschuwing bij het overschrijven: laat storage/, postgres-data/,
backups/ en models/ op de server staan. Dat is je bestaande data, en
die staat niet in je Windows-map. Kopieer dus overschrijvend, niet met een
"mirror"/"purge"-optie die bestanden aan de doelzijde weggooit.
# Vanaf Windows, veilig: kopieert en overschrijft, verwijdert niets aan de doelkant.
robocopy C:\Projects\geointel \\192.168.10.150\appdata\geointel /E
2. Rechten en regeleindes goedzetten
Na een kopie via Windows zijn de execute-bits weg. Op de Unraid-shell:
cd /mnt/user/appdata/geointel
find . -name '*.sh' -exec sed -i 's/\r$//' {} +
sed -i 's/\r$//' deploy/unraid/gosu-setpriv
chmod +x deploy/unraid/*.sh scripts/*.sh deploy/unraid/gosu-setpriv
3. .env aanmaken
cd /mnt/user/appdata/geointel
cp deploy/unraid/geointel.env.example .env
nano .env
Verplicht aan te passen:
GEOINTEL_POSTGRES_PASSWORD— de deploy weigert te starten met een lege of standaardwaarde (geointel,postgres,changeme,change-me-before-shared-use). Gebruik hier dezelfde waarde als je vorige installatie, anders kan de bestaande PostGIS-data niet worden geopend.
Controleer dat deze op de bestaande data wijzen:
GEOINTEL_FRONTEND_PORT=1202
GEOINTEL_STORAGE_PATH=/mnt/user/appdata/geointel/storage
GEOINTEL_POSTGIS_DATA_PATH=/mnt/user/appdata/geointel/postgres-data
GEOINTEL_MODELS_PATH=/mnt/user/appdata/geointel/models
GEOINTEL_BACKUPS_PATH=/mnt/user/appdata/geointel/backups
GEOINTEL_CORS_ORIGINS=https://geointel.itworx.tech,http://geointel.itworx.tech,http://localhost:1202,http://127.0.0.1:1202,http://192.168.10.150:1202
Staat Nginx Proxy Manager voor poort 1202 op geointel.itworx.tech, dan moet
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):
GEOINTEL_INSTALL_AI=true
YOLO_ENABLED=true
YOLO_DEVICE=cuda:0
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.
4. Login instellen
De app slaat geen plaintext wachtwoord op: .env bevat alleen een
pbkdf2_sha256-hash. Dit script maakt die hash plus een sessiegeheim en zet ze
in .env:
cd /mnt/user/appdata/geointel
bash scripts/configure_operator_login.sh --username jens@itworx.tech --guest-access true
--guest-access true is nodig om de demo-ingang te behouden; zonder die vlag
zet het script GEOINTEL_GUEST_ACCESS_ENABLED=false.
Het script vraagt het wachtwoord tweemaal (je typt het niet zichtbaar en het komt niet in je shell-history), en zet:
GEOINTEL_AUTH_ENABLED=true
GEOINTEL_AUTH_USERNAME=jens@itworx.tech
GEOINTEL_AUTH_PASSWORD_HASH=pbkdf2_sha256$600000$...
GEOINTEL_AUTH_SESSION_SECRET=<48 willekeurige tekens>
GEOINTEL_GUEST_ACCESS_ENABLED=false
Gastentoegang wordt bewust uitgezet — met auth aan zou anders de publieke
demo-ingang "Als gast verkennen" op de loginpagina blijven staan. Wil je die
wel: --guest-access true.
Wachtwoord later wijzigen: draai hetzelfde commando opnieuw en deploy. Er wordt dan ook een nieuw sessiegeheim gemaakt, dus openstaande browsersessies worden ongeldig.
Het wachtwoord dat je me in de chat gaf staat nu in die chatgeschiedenis. Draai het script met een nieuw wachtwoord zodra de deploy staat.
5. Deployen
cd /mnt/user/appdata/geointel
docker compose -f docker-compose.unraid.yml config >/dev/null # syntaxcheck
bash deploy/unraid/deploy-release.sh
Het script:
- ruimt een eventueel achtergebleven Compose-stack op (ook de oude 3-container dev-stack die óók poort 1202 pakt);
- bewaart de huidige image als
geointel-all-in-one:previous; - bouwt
deploy/unraid/Dockerfile.all-in-one; - start één container
geointelmet-p 1202:80en--gpus all; - rolt automatisch terug naar
:previousals de healthcheck of smoke faalt.
De eerste build duurt lang (PostGIS + GDAL + npm build). Volgende deploys hergebruiken de Docker-layercache.
6. Controleren
docker ps --filter name=geointel # exact 1 regel verwacht
curl -fsS http://127.0.0.1:1202/health/live
curl -fsS http://127.0.0.1:1202/health/ready
curl -fsS http://127.0.0.1:1202/api/v1/system/capabilities
Browser: http://192.168.10.150:1202
Bij problemen:
docker logs --tail 200 geointel
7. Belangrijk: dubbele projectmap lokaal
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.ymlniet 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:
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.
8. Terugrollen
cd /mnt/user/appdata/geointel
bash deploy/unraid/rollback-dockerman-container.sh
Rollback hergebruikt dezelfde PostGIS- en storage-paden en draait nooit een Alembic-downgrade.
Wat er is aangepast om dit mogelijk te maken
| Bestand | Aanpassing |
|---|---|
.dockerignore |
Sluit root-node_modules, de dubbele geointel/-map, .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 |
deploy/unraid/geointel.env.example |
COMPOSE_FILE=docker-compose.unraid.yml, zodat een kaal docker compose up -d nooit per ongeluk de 3-container dev-stack start |
scripts/configure_operator_login.sh |
Nieuw. Zet de operator-login in .env met een correcte pbkdf2_sha256-hash (600.000 iteraties, identiek aan AuthService.hash_password) en een vers sessiegeheim |