diff --git a/README.md b/README.md index e24b1d4..913b9f0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +# Lenke til webapplikasjon +Prosjektet kan sees på lenken under: + +[http://it2810-02.idi.ntnu.no/project2/](http://it2810-02.idi.ntnu.no/project2/) + # Bruk av GitHub Retningslinjer for hvordan vi jobber med Git og GitHub i prosjektet. diff --git a/backend/backend-gh-runner.md b/backend/backend-gh-runner.md index 17d0e15..fef61f5 100644 --- a/backend/backend-gh-runner.md +++ b/backend/backend-gh-runner.md @@ -1,21 +1,24 @@ # gh-runner-oppsett + ## 1. Bruker og mappe + ```bash sudo useradd -r -m -d /var/lib/gh-runner -s /bin/bash gh-runner sudo mkdir -p /opt/actions-runner sudo chown gh-runner: /opt/actions-runner ``` -Runneren skal ligge i /opt og ikke i en $HOME. +Runneren skal ligge i /opt og ikke i en $HOME. Dette er nødvendig så den starter etter omstart uten at noen er logget inn. ## 2. Download 1. Gå til repoet på GitHub: `Settings -> Actions -> Runners` 2. Trykk på New self-hosted runner -3. Velg Linux x64. +3. Velg Linux x64. Før nedlastingen bytt til `gh-runner` brukeren og gå inn i mappen vi opprettet: + ```bash sudo -u gh-runner bash cd /opt/actions-runner @@ -23,19 +26,23 @@ cd /opt/actions-runner Følg stegene som står på GitHub for å laste ned runner og pakke ut. -## 3. Configure +## 3. Configure Fortsatt som gh-runner, se linje som står under `Configure`: + ```bash ./config.sh --url https://// --token --name it2810-02 ``` + Trykk enter for standard-valgene. ## 4. Installer som tjeneste -Vi ønsker å kjøre GitHub runner-en som en systemd-service, dette kan gjøres med + +Vi ønsker å kjøre GitHub runner-en som en systemd-service, dette kan gjøres med et script som følger med runner-installasjonen. Bytt til en bruker i `sudoers` filen, og gjør følgende: + ```bash cd /opt/actions-runner sudo ./svc.sh install gh-runner @@ -44,23 +51,27 @@ sudo ./svc.sh status ``` ## 5. Workflow avhengigheter -Workflow filen vår bruker rsync og curl. + +Workflow filen vår bruker rsync og curl. Dette bør være lastet ned, men dobbeltsjekk: + ```bash which rsync curl || sudo apt install -y rsync curl ``` > [!NOTE] ->Node og pnpm installeres av workflowen selv. +> Node og pnpm installeres av workflowen selv. ## 6. Verifiser + Sjekk at `runner` kan sees i GitHub: -[Repo] -> Settings -> Actions -> Runners +[Repo] -> Settings -> Actions -> Runners Her skal it2810-02 vises som Idle. Forsøk å restarte vm og sjekk at service starter opp: + ```bash sudo reboot systemctl status 'actions.runner.*' @@ -69,5 +80,5 @@ systemctl status 'actions.runner.*' Den skal være active (running), startet ved oppstart. > [!NOTE] ->Tilgangen runneren trenger for deploy, altså eierskap til ->/var/www/project2 og sudoers-regelen for å restarte backend, står i backend-gjennomgangen. \ No newline at end of file +> Tilgangen runneren trenger for deploy, altså eierskap til +> /var/www/project2 og sudoers-regelen for å restarte backend, står i backend-gjennomgangen. diff --git a/backend/backend-setup.md b/backend/backend-setup.md index 23e0fe9..6c2923f 100644 --- a/backend/backend-setup.md +++ b/backend/backend-setup.md @@ -1,11 +1,15 @@ # Backend-oppsett + ## 1. Node installasjon + Sjekk om node er installert og at det er versjon 24.x eller nyere: + ```bash /usr/bin/node --version ``` Mangler den, eller er versjonen under 24: + ```bash sudo apt update curl -fsSL https://deb.nodesource.com/setup_24.x -o nodesource_setup.sh @@ -14,11 +18,13 @@ sudo apt install -y nodejs ``` ## 2. Opprett mapper og bruker -Vi opprettet en egen bruker for å kjøre backend prosessen. -Brukeren har minimale rettigheter og kun tillatelse til å + +Vi opprettet en egen bruker for å kjøre backend prosessen. +Brukeren har minimale rettigheter og kun tillatelse til å lese .env, men ikke redigere kode. Opprett bruker og sett rettigheter: + ```bash sudo useradd -r -s /usr/sbin/nologin project2 sudo mkdir -p /var/www/project2/backend @@ -29,16 +35,19 @@ sudo chmod 755 /var/www/project2 ## 3. Environment vars Opprett fil og rediger (kan også opprette fil først): + ```bash sudo [nvim/vim/nano] /var/www/project2/backend.env ``` Legg inn følgende `.env` variabler: + ``` DATABASE_URL=postgresql://webapp:@localhost:5432/gamesdb PORT=3001 JWT_SECRET= ``` + > [!NOTE] > Brukeren som postgres bruker for å logge inn her må være opprettet på > databasen. Passordet som brukes for å opprette skal fylles inn. @@ -46,17 +55,20 @@ JWT_SECRET= > JWT_SECRET trengs for å autentisere brukere mot backend Sett rettighetene på filen: + ```bash sudo chown root:project2 /var/www/project2/backend.env sudo chmod 640 /var/www/project2/backend.env ``` ## 4. systemd-service -Vi legger `systemd`-servicen direkte i `/etc/systemd/system/`. + +Vi legger `systemd`-servicen direkte i `/etc/systemd/system/`. Dette directory er beskyttet og krever `sudo`-rettigheter for å redigere. Opprett og rediger fil: + ```bash sudo [nvim/vim/nano] /etc/systemd/system/project2-backend.service ``` @@ -86,17 +98,20 @@ WantedBy=multi-user.target ``` Restart `daemon` og enable `systemd`-service: + ```bash sudo systemctl daemon-reload sudo systemctl enable project2-backend.service ``` ## 5. Runner permissions + Vi bruker en lokalt hostet github runner for å kjøre lint- og format-checks, og for å deploye prosjektet til vm-en. Vi setter derfor tillatelser på `gh-runner` slik at denne har tillatelse til å restarte servicen vi opprettet: + ```bash echo 'gh-runner ALL=(root) NOPASSWD: /usr/bin/systemctl restart project2-backend.service' | sudo tee /etc/sudoers.d/project2-deploy sudo chmod 440 /etc/sudoers.d/project2-deploy @@ -104,25 +119,30 @@ sudo visudo -cf /etc/sudoers.d/project2-deploy ``` ## 6. Apache-proxy + Vi bruker en proxy for å redirecte trafikk for `/graphql` mot backend tjenesten lokalt på vm. Opprett proxy, og rediger `.conf` filen: + ```bash sudo a2enmod proxy proxy_http sudo [nvim/vim/nano] /etc/apache2/sites-available/000-default.conf ``` Legg til følgende inne i ``-blokken i filen: + ```apache ProxyPass /project2/graphql http://127.0.0.1:3001 ProxyPassReverse /project2/graphql http://127.0.0.1:3001 ``` Sjekk config for feil og reload apache-tjenesten: + ```bash sudo apache2ctl configtest && sudo systemctl reload apache2 ``` + ## 7. Verifiser Etter første deploy (eller kjør workflowen manuelt på main): @@ -135,5 +155,5 @@ curl -s -X POST -H 'Content-Type: application/json' \ -d '{"query":"{ genres { name } }"}' http://localhost/project2/graphql ``` -Begge curl-kallene skal gi sjangrene. -Hvis noen av de feiler, se loggen med `journalctl -u project2-backend -n 50`. \ No newline at end of file +Begge curl-kallene skal gi sjangrene. +Hvis noen av de feiler, se loggen med `journalctl -u project2-backend -n 50`.