diff --git a/README.md b/README.md index 53beaa3..0bf103f 100644 --- a/README.md +++ b/README.md @@ -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) @@ -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/.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