diff --git a/docs/vm-backend.md b/docs/vm-backend.md index f07e0fa..9399709 100644 --- a/docs/vm-backend.md +++ b/docs/vm-backend.md @@ -14,17 +14,32 @@ Dette dokumentet gjelder **kun** den delte VM-en. Følgende er **på plass** og testet: -| Komponent | Detalj | -| -------------- | -------------------------------------------------------- | -| PostgreSQL | 18.6, cluster `18/main`, port 5432, autostart | -| Database | `t36_project2` | -| Databasebruker | `t36_project2` | -| Node.js | 24.21.0 via nvm (npm 11.x) | -| Schema/data | `npm run migrate` og seed med 10 annonser i `listings` | -| GraphQL | systemd `t36-project2-backend`, `127.0.0.1:3001/graphql` | +| Komponent | Detalj | +| -------------- | -------------------------------------------------------------------- | +| PostgreSQL | 18.6, cluster `18/main`, port 5432, autostart | +| Database | `t36_project2` | +| Databasebruker | `t36_project2` | +| Node.js | 24.21.0 via nvm (npm 11.x) | +| Schema/data | To migrasjoner, 10 seed-annonser og 10 000 genererte (totalt 10 010) | +| GraphQL | systemd `t36-project2-backend`, `127.0.0.1:3001/graphql` | Repo for prosjekt 2 ligger i `~/T36-Project-2` på VM. +### Stort datasett (verifisert 15. oktober 2026) + +Lastet inn etter fremgangsmåten i [Stort datasett](#stort-datasett), fra +`/home/andretg/T36-Project-2/backend` med koden fra grenen til #41 (samme kode som `dev` etter #39, pluss +dokumentasjon). + +| Punkt | Resultat | +| ------------ | ------------------------------------------------------------------------------ | +| Backup | `~/t36_project2-for-datasett-20261015.dump` hos `andretg`, tatt før endringene | +| Migrasjon | `1791978982612_add-listings-created-at` kjørt. `pgmigrations` har to rader | +| `seed:large` | 10 000 nye, 0 hoppet over, 0,4 s | +| Antall rader | 10 010 i `listings`, hvorav 10 000 genererte (`gen-…`) | +| GraphQL | `health` gir `ok`. `listing(id: "gen-000001")` gir «Båndsliper med støvpose» | +| Restart | Ikke nødvendig. Tjenesten så de nye radene uten restart | + ### GraphQL/systemd (verifisert oktober 2026) Deploy er kjørt og kontrollert på `it2810-36.idi.ntnu.no`: @@ -37,7 +52,7 @@ Deploy er kjørt og kontrollert på `it2810-36.idi.ntnu.no`: | `ExecStart` (Node) | `/home/birkjr/.nvm/versions/node/v24.21.0/bin/node` + lokal `tsx` | | `User` / `Group` | `birkjr` / `eall_s` (på VM; mal i repo bruker `Group=__DEPLOY_USER__` — sett `Group` til primærgruppen din om den avviker) | | Miljøfil | `/etc/t36-project2/backend.env` (`DATABASE_URL`, `HOST=127.0.0.1`, `PORT=3001`) | -| Data | `listings` returnerer 10 seed-annonser via GraphQL | +| Data | 10 seed-annonser og 10 000 genererte (se [Stort datasett](#stort-datasett-verifisert-15-oktober-2026)) | | Mutasjon | `createListing` testet; testannonse slettet i PostgreSQL | | Drift | `systemctl restart t36-project2-backend` verifisert | | Gjenstår | Full **VM-reboot** for å bekrefte autostart etter boot (ikke kjørt ennå) | @@ -47,7 +62,7 @@ med mindre enheten endres; de kan bruke GraphQL med `curl` mot `127.0.0.1:3001` inne på VM. **Andre gruppemedlemmer** trenger normalt bare NTNU VPN, SSH-tilgang til VM-en og -`DATABASE_URL` (databasepassord) etter avtale med gruppen. De skal **ikke** kjøre +`DATABASE_URL` (databasepassord). De skal **ikke** kjøre førstegangsoppsettet under med mindre noe må bygges på nytt. ## 1. SSH via NTNU VPN @@ -98,19 +113,80 @@ npm run seed ### Stort datasett -Etter migrasjon og seed, fra **`~/T36-Project-2/backend`**: +Fyller den delte databasen med 10 000 genererte annonser. Se +[docs/datasett.md](datasett.md) for kilde, fordelinger og målinger. + +**Før du starter:** Avtal med gruppen hvem som kjører, slik at ikke to gjør det +samtidig. Skriptene kan kjøres fra hvilken som helst kopi av repoet på VM-en, +for eksempel din egen i `~/T36-Project-2`, fordi alle peker på samme database. +Du trenger Node 24 for din egen bruker (se +[Node.js 24 via nvm](#nodejs-24-via-nvm)) og `backend/.env` med +`DATABASE_URL` (se §3). + +**1. Hent nyeste kode fra `dev`:** ```bash +cd ~/T36-Project-2 +git checkout dev +git pull +cd backend +npm ci +``` + +**2. Ta backup** (passord via `-W`). Filen havner i hjemmemappen din: + +```bash +pg_dump -h localhost -U t36_project2 -d t36_project2 -Fc -W -f ~/t36_project2-for-datasett-$(date +%Y%m%d).dump +``` + +**3. Migrer og last inn datasettet:** + +```bash +npm run migrate npm run seed:large ``` -- Første kjøring: forvent **10 000 nye** og totalt **10 010** rader i `listings`. -- Senere kjøringer: **0 nye** (idempotent). -- `npm run migrate` må være kjørt først, fordi datasettet bruker `created_at`. -- GraphQL ser de nye radene med en gang. Tjenesten trenger bare restart når - koden er oppdatert med `git pull` (se §7.3). +- `migrate` legger til `created_at` i `listings`. Det må gjøres før + `seed:large`, som bruker kolonnen. +- `seed:large` skal skrive «10000 nye» og «Totalt 10010 rader». +- Kjøres `seed:large` på nytt, skal den skrive «0 nye» (idempotent). + +**4. Kontroller databasen:** + +```bash +psql -h localhost -U t36_project2 -d t36_project2 -W +``` + +```sql +SELECT COUNT(*) FROM listings; -- 10010 +SELECT COUNT(*) FROM listings WHERE id LIKE 'gen-%'; -- 10000 +\d listings -- har created_at +SELECT name FROM pgmigrations ORDER BY run_on; -- to migrasjoner +``` + +**5. Kontroller GraphQL.** Den kjørende tjenesten ser de nye radene med en +gang, uten restart: + +```bash +curl -sS -X POST http://127.0.0.1:3001/graphql \ + -H 'Content-Type: application/json' \ + -d '{"query":"{ health listing(id: \"gen-000001\") { id title dailyPrice } }"}' +``` + +Forvent `"health":"ok"` og annonsen `gen-000001`. Bruk ikke `listings` til +kontrollen: den returnerer alle 10 010 annonsene i ett svar. + +Tjenesten trenger bare restart når koden i mappen den kjører fra, er oppdatert +med `git pull` (se §7.3). Det gjøres av den som eier tjenesten. + +**Angre:** Slett de genererte annonsene og fjern kolonnen igjen: + +```bash +psql -h localhost -U t36_project2 -d t36_project2 -W -c "DELETE FROM listings WHERE id LIKE 'gen-%';" +npx node-pg-migrate down --envPath .env +``` -Se [docs/datasett.md](datasett.md) for kilde, fordelinger og målinger. +Backupen fra steg 2 kan også gjenopprettes med `pg_restore --clean`. ## 3. Sikker håndtering av `DATABASE_URL`