# Hosting on valencia (2026-10-29) | What | Value | |---|---| | Host | `valencia` (Arch, x86_64, 8 cores, 23 GB RAM), Tailscale `valencia.tail142ce3.ts.net` / 100.108.90.108 | | URL | `http://valencia.tail142ce3.ts.net:8080` (**tailnet only**, not public) | | Code | `~/hackathon`: git checkout of nasrlol/eu-ai-challange, branch `api-help-shelters-models` (https, read-only: valencia has no GitHub key) | | Data | all of `working_data/` (18 GB) + `code/cache` + `code/outputs` | | Service | systemd `flood-api` (`FLOOD_ADDR=100.108.90.108:8080`, restart on failure, starts at boot) | | Python | `~/hackathon/.venv` via uv, 3.12, versions pinned to the local venv (sklearn 1.9.1 must match `model.joblib`) | | Rust | Arch `rust` package; build `cd flood_api && cargo build --release` | - Update: rsync code → `cargo build --release` → `sudo systemctl restart flood-api`. Logs: `journalctl -u flood-api -f`. - First `/region` in a new area is slow (~110 s, OSM PBF parse); cached after that. ## Test server (:8081, details in [14_test_resources.md](14_test_resources.md)) | What | Value | |---|---| | URL | `http://valencia.tail142ce3.ts.net:8081` (tailnet only) | | Code | `~/hackathon-test/srv`: same git checkout (still refreshed by rsync via `code/testrun.sh`; `working_data`, `.venv` symlinked to `~/hackathon`, in `.git/info/exclude`) | | Out | `FLOOD_OUT=~/hackathon-test/srv_out` (`help.sqlite`, survives restarts); `code/outputs` seeded from laptop | | Limits | `systemd-run --user --scope`: 5 GB RAM, no swap, 3 CPUs, nice 10, 12 h timeout; 2 slots via flock | | History | 15:58 first build (B1/G1/G2), 16:06 restart (B2–B9, E2–E5, G3), hot-sync G4 (no restart), 16:20 final restart under heavy.lock (B10, G5 CORS, G6, E6; empty-named zone deleted; CORS preflight OK) | - Restart: ask hackathon-11 → `flock flood_api/out/heavy.lock code/testrun.sh --stop srv` → rerun. Python-only fixes: rsync `code/*.py` under the same lock, no restart. - Live :8080 and the Java server are never touched by tests. - Not done: public exposure via nginx (no auth on the API; help endpoints hold health-related data → keep tailnet-only unless auth added). - 2026-10-29 21:53 + 21:58 (cems-efas-72, user OK): live :8080 redeployed with everything up to /region v2, async jobs, DELETE routes, B12. Synced code/notes only (rsync excludes code/outputs, code/cache, flood_api/out → live help.sqlite kept); model/outputs md5 = laptop. Smoke: /health, /models, /impact, CORS, async, DELETE 404, inverted bbox 422. ## Frontend (2026-10-30, cems-efas-72, user request) | What | Value | |---|---| | URL | `http://valencia.tail142ce3.ts.net:5500` (**tailnet only**) | | Code | `~/frontend` = rsync of laptop `AI-Challenge/` working copy (no .git; never commit/push there) | | Service | systemd `flood-frontend`: `python3 -m http.server 5500 --bind 100.108.90.108`, restart on failure, starts at boot | | API | page on valencia defaults to live `:8080` (same host); elsewhere `:8081`; `?api=` overrides | - Update: (old, before git) rsync; now `git pull` in `~/frontend`, see below. - Live pre-built for the default study bbox 5.6,50.55,5.96,50.64: help zone `zone_5600_50550_5960_50640`, `/region` `app_5600_50550_5960_50640`. - 2026-10-30 (user request): `~/frontend` is now a git clone of sistahoppet/AI-Challenge, branch `frontend-perf` (commit 017e2f8). Update: push from laptop → `ssh valencia 'cd ~/frontend && git pull'` (static, no restart). Old rsync copy kept in `~/frontend.rsync-bak`. - 2026-10-30 02:22: live redeployed with the OSM store (`flood_api/out/osm_store`, 802 MB; rebuild `./target/release/flood_api build-osm-store` after updating extracts, ~2.5 min, otherwise startup says "stale" and falls back to extracts). Test server shares it via symlink. ## Policy advisor API (2026-10-30, user request) - `http://valencia.tail142ce3.ts.net:8082`, systemd `policy-api`; ollama `qwen3:8b` on 127.0.0.1:11434. Details: [16_policy_api.md](16_policy_api.md). ## Public site dev.nsrddyn.com (2026-10-30, user request) | What | Value | |---|---| | URL | `https://dev.nsrddyn.com` (public): `/` → frontend :5500, `/api/` → live flood_api :8080, `/policy/` → policy_api :8082 | | nginx | `/etc/nginx/sites/dev.conf`; dev added to port-80 ACME block in `00-services-http.conf` | | Limits | DELETE → 405; region/flood/evacuation/timeline/help/zones 10/min/IP; `/policy/advise` 4/min/IP (spends server Claude key); 20 r/s/IP overall | | Cert | own LE cert `dev.nsrddyn.com` (webroot `/srv/http/acme`, auto-renew via certbot-renew.timer) | | Frontend | AI-Challenge `frontend-perf` ef59419: on host dev.nsrddyn.com the API defaults are `origin/api`, `origin/policy` | - Live 2026-10-30 ~10:40 (user added DNS A `dev` → 207.180.230.218 in Google Cloud DNS). Smoke OK: `/`, /api/health, /api/models, /policy/health 200; http→https 301; DELETE 405; POST / 403; POST /api/flood, /policy/advise reach the APIs (422 on empty body). - Help endpoints (help-requests, helpers) are now public with no auth. - api.dev.nsrddyn.com: staged then dropped (user, 2026-10-30): API stays as paths /api, /policy on dev.nsrddyn.com. ## Server dirs under git (2026-10-30, user request) | Dir | Repo / branch | |---|---| | `~/hackathon`, `~/hackathon-test/srv` | nasrlol/eu-ai-challange `api-help-shelters-models` (git init in place + `reset` to origin, files untouched) | | `~/frontend` | sistahoppet/AI-Challenge **`main`** (59d2942); `frontend-perf` deleted locally + on valencia (its last commit ef59419 superseded: main defaults to `https://dev.nsrddyn.com/api`) | | `~/policy_api` | nasrlol/flood-policy-advisor `main` | - Update: push from laptop → `ssh valencia 'cd