Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 93 additions & 17 deletions docs/vm-backend.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`:
Expand All @@ -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å) |
Expand All @@ -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
Expand Down Expand Up @@ -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`

Expand Down