Skip to content
Merged
Show file tree
Hide file tree
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
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
29 changes: 20 additions & 9 deletions backend/backend-gh-runner.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
# 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
```

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://<github-host>/<owner>/<repo> --token <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
Expand All @@ -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.*'
Expand All @@ -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.
> Tilgangen runneren trenger for deploy, altså eierskap til
> /var/www/project2 og sudoers-regelen for å restarte backend, står i backend-gjennomgangen.
30 changes: 25 additions & 5 deletions backend/backend-setup.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -29,34 +35,40 @@ 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:<passord>@localhost:5432/gamesdb
PORT=3001
JWT_SECRET=<openssl rand -base64 32>
```

> [!NOTE]
> Brukeren som postgres bruker for å logge inn her må være opprettet på
> databasen. Passordet som brukes for å opprette skal fylles inn.
>
> 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
```
Expand Down Expand Up @@ -86,43 +98,51 @@ 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
sudo visudo -cf /etc/sudoers.d/project2-deploy
```

## 6. Apache-proxy

Vi bruker en proxy for å redirecte trafikk for `<url>/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 `<VirtualHost *:80>`-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):
Expand All @@ -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`.
Begge curl-kallene skal gi sjangrene.
Hvis noen av de feiler, se loggen med `journalctl -u project2-backend -n 50`.