From bb85a4a4b4d6c1774bef146c91ee27a6d1992858 Mon Sep 17 00:00:00 2001 From: albdert Date: Fri, 16 Oct 2026 14:33:33 +0200 Subject: [PATCH 1/2] =?UTF-8?q?dokumentasjon=20p=C3=A5=20backend=20og=20se?= =?UTF-8?q?rver=20oppsett?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/backend-gh-runner.md | 75 +++++++++++++++++++ backend/backend-setup.md | 140 +++++++++++++++++++++++++++++++++++ 2 files changed, 215 insertions(+) create mode 100644 backend/backend-gh-runner.md create mode 100644 backend/backend-setup.md diff --git a/backend/backend-gh-runner.md b/backend/backend-gh-runner.md new file mode 100644 index 0000000..b0f3a75 --- /dev/null +++ b/backend/backend-gh-runner.md @@ -0,0 +1,75 @@ +# 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. +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. + +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 + +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 +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 +sudo ./svc.sh start +sudo ./svc.sh status +``` + +## 5. Workflow avhengigheter +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. + +## 6. Verifiser +Sjekk at `runner` kan sees i GitHub: +[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.*' +``` + +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 diff --git a/backend/backend-setup.md b/backend/backend-setup.md new file mode 100644 index 0000000..6b87273 --- /dev/null +++ b/backend/backend-setup.md @@ -0,0 +1,140 @@ +# 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 +sudo -E bash nodesource_setup.sh +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 å +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 +sudo chown -R gh-runner:www-data /var/www/project2 +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. +> +> 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/`. +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 +``` + +Legg inn følgende i `.service`-filen: + +``` +[Unit] +Description=Project 2 GraphQL backend +After=network.target postgresql.service +Wants=postgresql.service + +[Service] +Type=simple +User=project2 +Group=project2 +WorkingDirectory=/var/www/project2/backend +EnvironmentFile=/var/www/project2/backend.env +ExecStart=/usr/bin/node dist/index.js +Restart=on-failure +RestartSec=5 +NoNewPrivileges=true +Environment=NODE_ENV=production + +[Install] +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 `/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): + +```bash +systemctl status project2-backend.service +curl -s -X POST -H 'Content-Type: application/json' \ + -d '{"query":"{ genres { name } }"}' http://localhost:3001/ +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 From 17a3f576632dedaab85bebc5bca9a25b7b00b733 Mon Sep 17 00:00:00 2001 From: albdert Date: Fri, 16 Oct 2026 14:40:10 +0200 Subject: [PATCH 2/2] fix NOTE --- backend/backend-gh-runner.md | 2 -- backend/backend-setup.md | 1 - 2 files changed, 3 deletions(-) diff --git a/backend/backend-gh-runner.md b/backend/backend-gh-runner.md index b0f3a75..17d0e15 100644 --- a/backend/backend-gh-runner.md +++ b/backend/backend-gh-runner.md @@ -52,7 +52,6 @@ which rsync curl || sudo apt install -y rsync curl ``` > [!NOTE] -> >Node og pnpm installeres av workflowen selv. ## 6. Verifiser @@ -70,6 +69,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 diff --git a/backend/backend-setup.md b/backend/backend-setup.md index 6b87273..23e0fe9 100644 --- a/backend/backend-setup.md +++ b/backend/backend-setup.md @@ -40,7 +40,6 @@ 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. >