docker-setup tms

  • 2025-01-12
  • Med -p flaggan till docker kan du styra så att port 80 på pajen blir den publika porten.
    Docker run ….. -p 80:8080

    Spring Boot har stöd för https och certifikat så det går med ren konfiguration att få det att fungera utan någon extra proxy framför. Men det är många bitar som måste bli rätt så dokumentationen tar ett tag att skriva. Här finns ett exempel: https://paras301.medium.com/implementing-ssl-tls-in-springboot-standard-tls-part-1-0b8030cee1cc

  • 2025-01-08
  • Nästa steg är att få data att ligga kvar i databasen mellan omstarter. Gör så här:
        docker pull ghcr.io/amprnet-sweden/tms:latest
        mkdir /home/tms/test1 (eller annan valfri katalog där du vill att data ska lagras)
        chmod 777 /home/tms/test1
        docker run --rm -p 8080:8080 -v /home/tms/test1:/opt/tms/data -e JWT_KEY=abc123 -e ADMIN_USERNAME=admin -e ADMIN_PASSWORD=password -e TENANT=demo -it ghcr.io/amprnet-sweden/tms
    

    Detaljer
    En databasfil som heter tmsdb.mv.db skapas i /home/tms/test1 och nästa gång du startar tms med samma docker-flaggor så kommer samma databasfil att användas och data du lagrat finns kvar.
    Du kan skapa olika datakataloger för olika ”projekt” och växla mellan dem genom att ändra -v flaggan. Formatet är -v :/opt/tms/data

    Mer detaljer
    /opt/tms/data är den katalog inuti docker containern där tms backend förutsätter att databasen ligger. Med -v flaggan mappar man den katalogen till en valfri katalog på datorn där docker-kommandot körs (i exemplet ovan /home/tms/test1).

    Ännu mer detaljer
    Inuti docker containern körs tms backend med user id 1005. Därför måste datakatalogen vara skrivbar av alla (777). Alternativt ändrar du ägare på katalogen till user id 1005. (chown 1005 /home/tms/test1). Du måste inte skapa en lokal användare med UID 1005 men du kan göra det om du vill. Du kan t.ex. köra "sudo groupadd -g 1005 tms && sudo useradd -M -u 1005 -g tms tms” för att skapa en lokal användare och grupp som heter tms. Då kommer du se att databasfilen ägs av en användare som heter ”tms” istället för bara ett anonymt uid ”1005".

    Nu fixat så att TMS går att starta på vilken nod som helst utan speciell konfiguration.

    för att ladda ner senaste docker-bilden, kör: docker pull ghcr.io/amprnet-sweden/tms:latest Starta sedan docker tms på samma sätt som förut:

     docker run -d --rm -p 8080:8080 -v /home/tms/test1:/opt/tms/data -e JWT_KEY=abc123 -e ADMIN_USERNAME=admin -e ADMIN_PASSWORD=password -e TENANT=demo -it ghcr.io/amprnet-sweden/tms
    
    Nu ska det fungera att gå till http://ansible.local:8080/tms
      Här finns information om vad som krävs för att få ladda ner docker-bilder. https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry

      Det man måste göra är följande:

      • Gå till https://github.com/settings/tokens
      • Tryck på knappen [Generate new token] (classic)
      • Ge den ett namn, t.ex. ”Docker”
      • Välj Expiration ”30 days” eller ”90 days”. (om allt fungerar kan du skapa en ny token med länge löptid sedan).
      • Klicka i ”repo” (behövs inte för att läsa docker-bilder, men kan vara bra att ha för att läsa och klona TMS-källkoden)
      • Klicka i ”read:packages” — Det här är den viktiga!
      • Tryck [Generate token]
      • Spara den token som genereras på ett säkert ställe. Denna token kan nu användas istället för lösenord vid ”docker login ghcr.io/amprnet-sweden" och vid "git clone https://github.com/amprnet-sweden/TMS.git"

      docker login funkade dock inte med token heller. fick beskedet att min token inte ger mig access nånstans Så jag gissar/hoppas att stefans magiska fingrar öppnar dockervägen. Väntar med pajen tills dess. Istället för lösenord vill de nu att man använder en ”Personal access token” som du kan generera här: https://github.com/settings/personal-access-tokens Token används istället för lösenordet. Kanske är det det som var problemet med docker login?! Om du genererar en token så kanske både git clone och docker login fungerar.

    1. 2024-12-29
    2. Nu byggs docker-bilder med hjälp av GitHub Actions för linux/amd64 (jag tror denna fungerar på Windows), linux/arm64 (Mac M1-M4) och linux/arm/v7 (Raspberry Pi 3, 4, 5).

      Jag har testat på min Mac M1 och på en Raspberry Pi 4. På RPi tog det lång tid att installera docker och ladda ner allt första gången, men sedan går det ganska snabbt att starta och köra TMS.

      Här är de kommandon jag körde på Raspberry Pi för att installera allting:

      • # Uppdatera Raspbian OS (kanske inte nödvändigt men det var länge sedan jag uppdaterade OS på min 4:a) sudo apt update&&sudo apt -y upgrade &&sudo reboot
      • # Installera Docker
        sudo curl -sSL https://get.docker.com | sh
        sudo usermod -aG docker ${USER}
        logout    (starta sedan ett nytt terminalfönster)
        
      • # Logga in på GitHub
        docker login ghcr.io/amprnet-sweden
      • # Starta TMS
        docker run --rm -p 8080:8080 -e JWT_KEY=abc123 -e ADMIN_USERNAME=admin -e ADMIN_PASSWORD=password -e TENANT=demo -it ghcr.io/amprnet-sweden/tms
        
      TMS nås sedan på http://localhost:8080/tms (logga in med admin / password)
      (stoppa TMS-servern med CTRL-C i terminalfönstret)

      Med ovanstående docker-kommando används en in-memory databas vilken gör att data man registrerat försvinner när man startar om TMS-servern. Jag ska dokumentera hur man gör för att få en persistent databas så att data ligger kvar mellan omstarter.

      En stor fördel med Spring Boot (och Docker) är att det går att konfigurera systemet på så många olika sätt. Vill man ha en in-memory databas, enkel databas på fil, en lokal MySQL eller PostgreSQL eller extern sådan? Det gäller att veta alla möjligheterna och sedan fundera kring ”Hur vill jag ha det?”.

    3. 2024-12-28
    4. Den som har Docker installerad på sin dator kan nu skriva:
      docker run --rm -p 8080:8080 -e JWT_KEY=abc123 -e ADMIN_USERNAME=admin -e ADMIN_PASSWORD=password -e TENANT=demo -it ghcr.io/amprnet-sweden/tms
          
      Sedan kan man komma åt TMS på http://localhost:8080/tms och logga in med admin/password

      Den som händer när man kör ”docker run …” är att docker laddar ner ett paket som jag skapat och laddat upp på GitHub som innehåller både TMS frontend och backend. Paketet laddas ner från https://github.com/amprnet-sweden/TMS/pkgs/container/tms. Därefter startas backend (Spring Boot) och frontend (Vue.js) som ligger inbakad i samma paket. Förutsättningarna är:

      • Docker är installerad på datorn (https://docs.docker.com/desktop/)
      • Man har ett GitHub-konto med behörighet att läsa docker-paket från https://github.com/amprnet-sweden
      • Man har loggat in med "docker login ghcr.io/amprnet-sweden"

      Om man vill utveckla eller köra direkt från källkoden finns instruktioner på https://github.com/amprnet-sweden/TMS men det kräver att Java (JDK 21) och Node.js (20.x) är installerad på datorn.