From 907b2a4fb8dea2e9ef9f2d0e13e214e791ab5685 Mon Sep 17 00:00:00 2001 From: Birk Jonathan Ramstad Date: Fri, 30 Oct 2026 12:09:03 +0100 Subject: [PATCH] docs: oppdater VM-dokumentasjon for innlevering 3 (#68) --- backend/deploy/README.md | 2 +- docs/vm-backend.md | 523 ++++++++------------------------------- 2 files changed, 98 insertions(+), 427 deletions(-) diff --git a/backend/deploy/README.md b/backend/deploy/README.md index 9b8eae6..43002bc 100644 --- a/backend/deploy/README.md +++ b/backend/deploy/README.md @@ -1,7 +1,7 @@ # Deploy: systemd og port 3001 (prosjekt 2) Mal for å kjøre GraphQL-backenden som egen systemd-tjeneste på -`it2810-36.idi.ntnu.no`. Steg-for-steg på VM: [docs/vm-backend.md §7](../../docs/vm-backend.md#7-graphql-med-systemd-port-3001). +`it2810-36.idi.ntnu.no`. Steg-for-steg på VM: [docs/vm-backend.md §7](../../docs/vm-backend.md). **Verifisert på VM (oktober 2026):** tjenesten kjører som `User=`, `Group=eall_s` (primærgruppe på IT2810-VM), med Node diff --git a/docs/vm-backend.md b/docs/vm-backend.md index 505378f..f12da29 100644 --- a/docs/vm-backend.md +++ b/docs/vm-backend.md @@ -1,504 +1,175 @@ # VM: PostgreSQL og backend (prosjekt 2) -Kort beskrivelse av databaselaget og GraphQL-backenden på gruppens NTNU-VM. -GraphQL kjører på **`127.0.0.1:3001`** inne på VM-en (systemd). Apache serverer -frontenden på `/project2/` og sender `/project2/api/` videre til backenden, se -[deploy/apache/README.md](../deploy/apache/README.md). +Guide til gruppens delte NTNU-VM: SSH, deploy, testing og feilsøking. -**Lokal utvikling på egen maskin** (egen PostgreSQL, egen `.env`) står i -README under [Lokal backend-utvikling](../README.md#lokal-backend-utvikling). -Dette dokumentet gjelder **kun** den delte VM-en. +Lokal utvikling: [README § Lokal backend-utvikling](../README.md#lokal-backend-utvikling). +Dette gjelder **bare VM-en**. -**VM:** `it2810-36.idi.ntnu.no` (Ubuntu 26.04.1 LTS) +| | | +| --- | --- | +| VM | `it2810-36.idi.ntnu.no` | +| App | | +| GraphQL (nettleser) | `/project2/api/graphql` | +| GraphQL (på VM) | `http://127.0.0.1:3001/graphql` | +| Database | `t36_project2` (PostgreSQL, port 5432) | +| Backend | systemd `t36-project2-backend` → `127.0.0.1:3001` | +| Frontend | `/var/www/project2` (Apache) | +| Repo | `~/T36-Project-2`, branch `dev` | -## Status på VM (verifisert) +Apache og frontend-deploy: [deploy/apache/README.md](../deploy/apache/README.md). +Systemd og `/etc/t36-project2/backend.env`: [backend/deploy/README.md](../backend/deploy/README.md). +`seed:large` og stort datasett: [docs/datasett.md](datasett.md). -Følgende er **på plass** og testet: +## Status (innlevering 3, 30. oktober 2026) -| 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` | +| | | +| --- | --- | +| Kode | `dev`, commit `fedc6a2` | +| Node | 24 (nvm) | +| Migrasjoner | 6 kjørt | +| Annonser | 10 016 i `listings` | +| Vurderinger | 9 seed-vurderinger | +| Bilder | 609 med `image_url`, resten `null` | +| Backup | Dump før migrasjon under deployen | +| Bygg | Frontend build + backend typecheck OK | -Repo for prosjekt 2 ligger i `~/T36-Project-2` på VM. +Testet i nettleser: katalog, søk, annonser, bilder, vurderinger. Søk «drill»: 70 +treff. `listing-001`: 3 vurderinger, snitt 4,67. -### Stort datasett (verifisert 15. oktober 2026) +Tjenesten er `active (running)`. Autostart etter reboot er ikke testet. -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). +## SSH -| 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`: - -| Punkt | Verdi | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------- | -| Tjeneste | `t36-project2-backend` — `active`, `enabled` | -| Endepunkt | `http://127.0.0.1:3001/graphql` (kun på VM / via SSH) | -| `WorkingDirectory` | `/home/birkjr/T36-Project-2/backend` | -| `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 | 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å) | - -Andre gruppemedlemmer med SSH til samme VM trenger ikke ny systemd-installasjon -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). De skal **ikke** kjøre -førstegangsoppsettet under med mindre noe må bygges på nytt. - -## 1. SSH via NTNU VPN - -1. Koble til [NTNU VPN](https://i.ntnu.no/vpn). -2. Logg inn (bytt ut brukernavn med ditt NTNU-brukernavn): +[NTNU VPN](https://i.ntnu.no/vpn) ved behov, deretter: ```bash ssh @it2810-36.idi.ntnu.no ``` -Passord eller SSH-nøkkel avhenger av VM-oppsettet fra faget. - -## 2. Repo og backend (vanlig flyt) - -### Første gang på VM +Første gang: ```bash -cd ~ -git clone https://git.ntnu.no/IT2810-H26/T36-Project-2.git -cd T36-Project-2 -git checkout dev -git pull +git clone https://git.ntnu.no/IT2810-H26/T36-Project-2.git ~/T36-Project-2 +cd ~/T36-Project-2 && git checkout dev ``` -### Senere besøk +Systemd og Apache er satt opp. Vanlig deploy = `git pull`, migrasjon, restart, build. -```bash -cd ~/T36-Project-2 -git pull -``` +## Deploy (oppdatert versjon) -### Avhengigheter, migrasjon og seed +Avtal hvem som deployer — én migrasjon om gangen. -Alle kommandoer under kjøres fra **`~/T36-Project-2/backend`**: +**1. Backup** (passord med `-W`, ikke i kommandolinjen): ```bash -cd ~/T36-Project-2/backend -nvm use 24 # eller tilsvarende, slik at node -v viser 24.x -npm ci -npm run typecheck -npm run migrate -npm run seed +pg_dump -h localhost -U t36_project2 -d t36_project2 -Fc -W \ + -f ~/t36_project2-$(date +%Y%m%d).dump ``` -- Første seed på tom database: forvent **10 nye** annonser. -- Senere kjøringer: **0 nye**, 10 hoppet over (idempotent). - -### Stort datasett - -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`:** +**2. Kode** ```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 -``` - -- `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 -``` - -Backupen fra steg 2 kan også gjenopprettes med `pg_restore --clean`. - -## 3. Sikker håndtering av `DATABASE_URL` - -- **`DATABASE_URL` skal aldri committes.** Kun `backend/.env.example` med - plassholdere ligger i git. -- På VM: opprett `backend/.env` (fra `.env.example`), fyll inn verdi gruppen har - avtalt, og begrens filrettigheter — **fra katalogen `backend/`**: - -```bash -cd ~/T36-Project-2/backend -cp .env.example .env -# Rediger .env i editor (ikke lim passord inn i terminalkommandoer) -chmod 600 .env -``` - -- Eksempelformat i `.env` (erstatt passord med gruppen sitt, ikke skriv det i - dokumentasjon eller issues): - -```env -DATABASE_URL=postgresql://t36_project2:PASSORD@localhost:5432/t36_project2 -``` - -Erstatt `PASSORD` i editoren med gruppen sitt databasepassord (ikke i terminal -eller git). Alternativt kan gruppen senere vurdere -[pgpass](https://www.postgresql.org/docs/current/libpq-pgpass.html) om gruppen -velger det senere. - -- **Ikke** eksporter `DATABASE_URL` i shell med passord i klartekst (historikk). - `npm run migrate` og `npm run seed` leser `.env` via `--envPath` / `--env-file`. - -## 4. Kontroll at oppsettet fungerer - -Fra **`~/T36-Project-2/backend`**: - -```bash -npm run typecheck -npm run migrate # forvent «No migrations to run!» når schema er oppdatert -npm run seed # forvent 0 nye når data allerede finnes +git pull --ff-only origin dev ``` -SQL (passord **interaktivt**, ikke i kommandolinjen): - -```bash -psql -h localhost -U t36_project2 -d t36_project2 -W -c "SELECT COUNT(*) FROM listings;" -psql -h localhost -U t36_project2 -d t36_project2 -W -c "SELECT id, title, daily_price FROM listings ORDER BY id;" -``` - -Forvent **10** rader i `listings`. - -Tjenester og Node: +**3. Backend** ```bash -sudo systemctl is-active postgresql -node -v -``` - -## 5. Prosjekt 1 på samme VM - -- **Ikke** stopp, avinstaller eller rekonfigurer Apache, databaser eller tjenester - som prosjekt 1 bruker uten å sjekke med gruppen. -- Prosjekt 2 bruker egen database (`t36_project2`) — ikke del eller overskriv - prosjekt 1s data. -- Apache-siten `t36-project2.conf` gjelder bare `/project2/` og - `/project2/api/`. Backenden lytter fortsatt bare på `127.0.0.1:3001` og nås - utenfra kun gjennom Apache-proxyen. - -Etter endringer: verifiser at prosjekt 1 fortsatt fungerer. - -## 6. Backup - -VM-en har **ikke** automatisk backup. Ved behov, fra **`~/T36-Project-2/backend`** -(passord via `-W`): - -```bash -pg_dump -h localhost -U t36_project2 -d t36_project2 -Fc -W -f "t36_project2-$(date +%Y%m%d).dump" -``` - -Lagre dump utenfor VM. Gjenoppretting er gruppens ansvar. - ---- - -## Referanse: førstegangsoppsett på VM - -> **Kun ved ny VM eller gjenoppbygging.** Gruppemedlemmer som kobler til -> eksisterende VM skal **ikke** kjøre dette på nytt uten avtale. - -### PostgreSQL: installasjon og tjeneste - -```bash -sudo apt update -sudo apt install -y postgresql postgresql-contrib -sudo systemctl enable postgresql -sudo systemctl start postgresql -pg_lsclusters -``` - -### Database og bruker (passord interaktivt) - -Ikke endre databaser som tilhører prosjekt 1. - -```bash -sudo -u postgres psql -``` - -I `psql`: - -```sql -CREATE USER t36_project2; -CREATE DATABASE t36_project2 OWNER t36_project2; -GRANT ALL PRIVILEGES ON DATABASE t36_project2 TO t36_project2; -\password t36_project2 -\q -``` - -Test ( `-W` ber om passord): - -```bash -psql -h localhost -U t36_project2 -d t36_project2 -W -c 'SELECT 1 AS ok;' -``` - -### Node.js 24 via nvm - -Prosjektet krever Node 22.22.2+ eller 24.15+ (se `.nvmrc`). - -Installer nvm etter [nvm-dokumentasjonen](https://github.com/nvm-sh/nvm), logg ut -og inn, deretter: - -```bash -nvm install 24 -nvm use 24 -node -v -``` - -## 7. GraphQL med systemd (port 3001) - -Detaljer og feilsøking: [backend/deploy/README.md](../backend/deploy/README.md). - -| Fil | Formål | -| --------------------------------------------- | ----------------------------------------------------------------- | -| `backend/deploy/t36-project2-backend.service` | systemd-mal (plassholdere erstattes på VM) | -| `/etc/t36-project2/backend.env` | Hemmeligheter for **tjenesten** (utenfor git) | -| `~/T36-Project-2/backend/.env` | Valgfritt for **migrate/seed** (endres ikke av systemd-oppsettet) | - -Tjenesten **`t36-project2-backend`** kjører som din NTNU-bruker, lytter på -`127.0.0.1:3001`, GraphQL på **`/graphql`**. `ExecStart` bruker absolutt sti til -Node 24 (nvm) og `node_modules/tsx` etter `npm ci`. - -### 7.1 Første gangs aktivering på VM - -Erstatt `` med ditt brukernavn. Kjør steg for steg; ikke lim -databasepassord inn i terminalen. - -**1. Hent kode (grenen `dev` skal inneholde GraphQL etter merge #35/#36):** - -```bash -ssh @it2810-36.idi.ntnu.no -cd ~/T36-Project-2 -git fetch origin -git checkout dev -git pull origin dev -``` - -**2. Backend-avhengigheter:** - -```bash -cd ~/T36-Project-2/backend source ~/.nvm/nvm.sh nvm use 24 -node -v -npm ci -npm run typecheck -test -f node_modules/tsx/dist/cli.mjs -``` - -**3. Noter absolutt Node-sti (systemd laster ikke nvm-shell):** - -```bash -export DEPLOY_USER="$(whoami)" -export NODE_BIN="$(which node)" -export BACKEND_DIR="/home/${DEPLOY_USER}/T36-Project-2/backend" -echo "DEPLOY_USER=${DEPLOY_USER}" -echo "NODE_BIN=${NODE_BIN}" -echo "BACKEND_DIR=${BACKEND_DIR}" -``` - -**4. Miljøfil for tjenesten** (overskriver **ikke** `backend/.env`): +cd ~/T36-Project-2/backend +npm ci && npm run typecheck && npm run migrate && npm run seed ```bash -sudo mkdir -p /etc/t36-project2 -sudo cp "${BACKEND_DIR}/deploy/backend.env.example" /etc/t36-project2/backend.env -sudo chmod 640 /etc/t36-project2/backend.env -sudo chown "root:${DEPLOY_USER}" /etc/t36-project2/backend.env -sudo nano /etc/t36-project2/backend.env +cd ~/T36-Project-2/backend +npm ci && npm run typecheck && npm run migrate && npm run seed ``` -I editoren: sett `DATABASE_URL=postgresql://t36_project2:…@localhost:5432/t36_project2` -(samme passord som gruppen bruker i `backend/.env`), `HOST=127.0.0.1`, `PORT=3001`. -Lagre og lukk. +- `migrate`: kun det som mangler. `seed`: idempotent. +- **Ikke** `npm run seed:large` — 10 000 genererte ligger allerede i DB. -**5. Manuell røyktest** (Ctrl+C for å stoppe): +**4. Restart** (ny kode, ikke bare nye DB-rader): ```bash -set -a && source /etc/t36-project2/backend.env && set +a -"${NODE_BIN}" "${BACKEND_DIR}/node_modules/tsx/dist/cli.mjs" "${BACKEND_DIR}/src/server.ts" -``` - -I annen SSH-sesjon (eller etter Ctrl+C og systemd): - -```bash -curl -sS -X POST http://127.0.0.1:3001/graphql \ - -H 'Content-Type: application/json' \ - -d '{"query":"{ health }"}' +sudo systemctl restart t36-project2-backend ``` -**6. Installer og start systemd** (kun prosjekt 2, port 3001): +**5. Frontend** (fra repo-rot): ```bash -sed -e "s|__DEPLOY_USER__|${DEPLOY_USER}|g" \ - -e "s|__BACKEND_DIR__|${BACKEND_DIR}|g" \ - -e "s|__NODE_BIN__|${NODE_BIN}|g" \ - "${BACKEND_DIR}/deploy/t36-project2-backend.service" \ - | sudo tee /etc/systemd/system/t36-project2-backend.service > /dev/null - -sudo systemctl daemon-reload -sudo systemctl enable t36-project2-backend -sudo systemctl start t36-project2-backend +cd ~/T36-Project-2 +npm ci && npm run build +sudo rsync -a --delete dist/ /var/www/project2/ +sudo chown -R root:root /var/www/project2 ``` -**7. Status og logger:** +Apache trenger ikke restart for statiske filer. Ved endring i vhost: `apache2ctl +configtest`, deretter `reload`. -```bash -sudo systemctl status t36-project2-backend --no-pager -sudo systemctl is-enabled t36-project2-backend -journalctl -u t36-project2-backend -n 50 --no-pager -ss -tlnp | grep 3001 || true -``` +## Teste deploy -### 7.2 Verifisering av GraphQL +På VM: ```bash curl -sS -X POST http://127.0.0.1:3001/graphql \ -H 'Content-Type: application/json' \ - -d '{"query":"{ health }"}' - -curl -sS -X POST http://127.0.0.1:3001/graphql \ - -H 'Content-Type: application/json' \ - -d '{"query":"{ listings(limit: 5) { totalCount items { id title dailyPrice } } }"}' -``` + -d '{"query":"{ health listings(limit: 1) { totalCount } }"}' -Test `createListing` og rydd opp (ingen delete-mutation — slett i SQL): - -```bash curl -sS -X POST http://127.0.0.1:3001/graphql \ -H 'Content-Type: application/json' \ - -d '{"query":"mutation { createListing(input: { title: \"VM systemd test\", category: handTools, description: \"Kort test\", area: \"Gløshaugen\", dailyPrice: 1 }) { id title } }"}' + -d '{"query":"{ listing(id: \"listing-001\") { averageScore reviewCount reviews(limit: 3) { score } } }"}' ``` -Noter `id` fra svaret, deretter (passord med `-W`): +Via Apache (VPN/NTNU-nett): ```bash -psql -h localhost -U t36_project2 -d t36_project2 -W \ - -c "DELETE FROM listings WHERE id = 'listing-…';" +curl -sS -X POST "http://it2810-36.idi.ntnu.no/project2/api/graphql" \ + -H 'Content-Type: application/json' -d '{"query":"{ health }"}' ``` -Autostart: `sudo systemctl is-enabled t36-project2-backend` skal vise `enabled`. -Full VM-reboot for å bekrefte autostart etter boot er **ikke** kjørt ennå (planlegg -i avtalt vindu). +Nettleser: katalog, filtre, søk, annonse, vurderinger, `/project2/lei-ut`. +Hard refresh på `/project2/annonser/listing-001`. Mer curl/SPA: [Apache-README § Kontroll](../deploy/apache/README.md#kontroll-etter-aktivering). -### 7.3 Drift: start, stopp, restart, oppdatering +## Miljø og backup -```bash -sudo systemctl stop t36-project2-backend -sudo systemctl start t36-project2-backend -sudo systemctl restart t36-project2-backend -``` +| Fil | Formål | +| --- | --- | +| `backend/.env` | migrate, seed (`chmod 600`, fra `.env.example`) | +| `/etc/t36-project2/backend.env` | systemd (`HOST=127.0.0.1`, `PORT=3001`) | -Etter `git pull` i backend: - -```bash -cd ~/T36-Project-2/backend && source ~/.nvm/nvm.sh && nvm use 24 && npm ci -sudo systemctl restart t36-project2-backend -``` +Ikke committ `DATABASE_URL` eller skriv passord i docs/issues/shell-historikk. -### 7.4 Feilsøking +VM har ikke automatisk DB-backup — ta dump før migrasjon (steg 1). Gjenoppretting: +gruppens ansvar (`pg_restore`). -| Symptom | Sjekk | -| --------------------------- | ------------------------------------------------------------------- | -| `failed` / exit code | `journalctl -u t36-project2-backend -n 100 --no-pager` | -| `DATABASE_URL` / tilkobling | Innhold i `/etc/t36-project2/backend.env`, `psql` med samme URL | -| `tsx` mangler | `npm ci` i `backend/`, `test -f node_modules/tsx/dist/cli.mjs` | -| Node ikke funnet | `NODE_BIN` i unit-filen må være **absolutt** sti etter `nvm use 24` | -| Port opptatt | `ss -tlnp \| grep 3001` — skal ikke kollidere med prosjekt 1 | -| Endret Node-versjon | Oppdater `ExecStart`/`NODE_BIN`, `daemon-reload`, `restart` | +## Prosjekt 1 -`src/server.ts` laster også `backend/.env` via dotenv hvis filen finnes; variabler -fra systemd (`EnvironmentFile`) overskrives ikke. Migrate/seed bruker fortsatt -`backend/.env` som før. +Prosjekt 2 bruker egen database (`t36_project2`), backend på port 3001 og +Apache-konfigurasjonen `t36-project2.conf`. Ikke endre oppsettet til prosjekt 1 +uten å avtale det med gruppen. -## 8. Apache `/project2/` +Prosjekt 1 ble ikke funksjonstestet under innlevering-3-deploy. -Egen site (bare prosjekt 2) er aktivert. Malen og fremgangsmåten ligger i -[deploy/apache/README.md](../deploy/apache/README.md): +## Feilsøking -- Statisk frontend fra `/var/www/project2` med SPA-fallback. Bygget kopieres dit - fra `dist/`, se «Oppdatere frontenden» i README-en. -- Reverse proxy `/project2/api/` → `http://127.0.0.1:3001/` +| Symptom | Sjekk | +| --- | --- | +| Backend nede | `journalctl -u t36-project2-backend -n 100 --no-pager` | +| Migrate/psql | `backend/.env`, `psql -h localhost -U t36_project2 -d t36_project2 -W` | +| API 502/503 | `sudo systemctl status t36-project2-backend`, `ss -tlnp \| grep 3001` | +| 403 `/project2/` | `/var/www/project2`, Apache error log — se Apache-README | +| SPA 404 refresh | `mod_rewrite`, riktig site | -Kjør alltid **`apache2ctl configtest`** før `reload`. +Systemd/Node-sti: [backend/deploy/README.md](../backend/deploy/README.md). -## Gjenstår (ikke implementert) +Ved behov for gjenoppretting må dette avklares med gruppen først. +Databasebackupen kan gjenopprettes med `pg_restore`, men dette kan overskrive +nyere data. Unngå generell `migrate down` på den delte databasen. -- Evt. full VM-reboot-test av systemd autostart (anbefales i avtalt vindu) +## Ny VM eller nytt stort datasett -Se [README](../README.md) for planlagt videre arbeid. +Følg [backend/deploy/README.md](../backend/deploy/README.md), +[deploy/apache/README.md](../deploy/apache/README.md) og [datasett.md](datasett.md). +Ikke kjør `seed:large` uten gruppeavtale.