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
90 changes: 90 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Prosjektet er en fullstack React- og GraphQL-applikasjon som lar brukeren utfors
- [Teknologier](#Teknologier)
- [Kom i gang](#Kom-i-gang)
- [Arkitektur og valg](#Arkitektur-og-valg)
- [VM og deployment](#vm-og-deployment)
- [Hvor er vi nå](#Hvor-er-vi-nå)
- [Frontend](#Frontend)
- [Branching-strategi](#Branching-strategi)
Expand Down Expand Up @@ -69,6 +70,95 @@ Paginering: Vi har implementert cursor-basert paginering (first og endCursor) me

Sikkerhet: Alle variabler fra GraphQL-spørringene sendes som parametriserte verdier ($1, $2 osv.) til pg for å effektivt forhindre SQL-injection.

## VM og deployment

Applikasjonen er deployet på prosjektets virtuelle maskin. Frontend serveres gjennom Apache, GraphQL-backenden kjøres som en egen Node.js-prosess administrert av PM2, og PostgreSQL kjører på samme VM.

### Frontend

Frontend bygges med:

```bash
npm run build
```

Den ferdige bygde applikasjonen legges i `dist/`.

Apache serverer frontend fra:
```text
/var/www/html/project2/
```

Den deployede applikasjonen er tilgjengelig på:
http://it2810-05.idi.ntnu.no/project2/

Siden applikasjonen ligger under `/project2/` og ikke direkte på domenets rot, er frontend konfigurert med:
Vite base: `/project2/`
React Router basename: `/project2`

### Backend

GraphQL-backenden kjører på port 3001 på VM-en.
Backendprosessen administreres av PM2. PM2 er igjen satt opp som en systemd-tjeneste, slik at prosessen startes automatisk etter reboot av VM-en.
```text
systemd
|
v
PM2
|
v
GraphQL-backend
```

Ved vanlige backend-oppdateringer brukes PM2 direkte:

```bash
pm2 restart cdllection-backend
```

### PostgreSQL

PostgreSQL og GraphQL-backenden kjører på samme VM. Backenden kan derfor koble seg til databasen gjennom localhost.

Databaseinformasjon og andre sensitive konfigurasjonsverdier lagres i miljøvariabler og blir ikke lagt inn i versjonskontroll.

### Coverbilder (Covers)

Coverbilder lagres som statiske filer og serveres separat gjennom Apache.
Databasen lagrer kun filstien til coverbildet, for eksempel:
```text
/covers/<album-id>.jpg
```
GraphQL returnerer denne stien til frontend, mens selve bildefilen hentes direkte fra Apache.

Ved lokal utvikling sender Vite forespørsler til `/covers/...` til Apache på VM-en. Dermed trenger ikke hele coverdatasettet å lagres lokalt hos hver utvikler.
```text
Vite /covers/... -> VM Apache /covers/...
```

### Oppdatering av deployet versjon

Ved frontend-endringer oppdateres repositoriet på VM-en før frontend bygges og kopieres til Apache:

```bash
git pull
npm install
npm run build
sudo rm -rf /var/www/html/project2/*
sudo cp -r dist/* /var/www/html/project2/
```

Ved backend-endringer oppdateres repositoriet før backendprosessen restartes med PM2:

```bash
git pull
cd server
npm install
pm2 restart cdllection-backend
```

Kun én backendprosess skal bruke port 3001. Det skal derfor ikke startes en ekstra backendprosess manuelt på VM-en mens cdllection-backend allerede kjører gjennom PM2.

# Hvor vi er nå

## Frontend
Expand Down