Göm menyn

TDP003 Projekt: Egna datormiljön

Att publicera portfolion på webben

Innan ni publicerar er portfolio, se till att den uppfyller alla krav som ställs på systemet. Se Projektuppgift för mer information.

Vi kommer att använda det Kuberneteskluster som finns på universitetet för att publicera era portfolioprojekt så att de finns tillgängliga var som helst och när som helst. Hur detta görs beskrivs i guiden nedan.

Se till så att portfolion fungerar i servermiljön

Kubernetes använder ett system som kallas Docker för att isolera olika projekt, och se till så att de körs i rätt miljö. Detta gör också att vi enkelt kan testa att köra portfolion i den miljö som kommer köras på servern utan att behöva ladda upp någonting på någon server. Detta görs på följande sätt:

  1. Installera docker på ert system med kommandot
    sudo apt install docker.io
  2. Lägg till dig själv i gruppen docker, så att du kan använda Docker utan sudo med kommandot
    sudo usermod -a -G docker $USER
    Starta sedan om datorn (reboot i terminalen).
  3. Skapa filen Dockerfile med följande innehåll i mappen där ni har ert projekt (eller ladda ner den här):
    FROM python:latest
    
    ENV APP_HOME /app
    RUN mkdir $APP_HOME
    WORKDIR $APP_HOME
    
    RUN pip install flask
    
    ADD . $APP_HOME/
    ENV FLASK_APP=main.py
    CMD flask run -h 0 -p 3000
    
  4. Skapa filen .dockerignore (OBS: notera punkten i början av filen och inget filformat) i mappen med ert projekt (eller ladda ner den här):
    **/.git
    **/__pycache__
    
  5. Redigera raden ENV FLASK_APP=main.py och ersätt main.py med namnet på den fil som innehåller presentationslagret.
  6. Skapa en avbild med namnet portfolio med kommandot
    docker build -t portfolio .
    OBS: notera punkten i slutet på kommandot
  7. Testa sedan att allt fungerar som det ska genom att köra den avbilden vi skapade med kommandot
    docker run -t -i -p 3000:3000 portfolio
    Portfolion ska då startas i terminalen, och kan kommas åt lokalt via adressen http://localhost:3000/

Om någonting inte verkar fungera är detta ett ypperligt tillfälle att felsöka, eftersom all information finns enkelt tillgänglig. När portfolion laddas upp på servern är det mycket svårare att få tag på all information om vad som har gått fel, och det tar mycket längre tid att lägga upp en fix. För att testa ändringar lokalt på detta viset räcker det att upprepa steg 6 och 7 för att se resultat.

Om ni börjar få slut på diskutrymme efter att ha testat ett tag (dockeravbilder är ganska stora) kan det vara värt att köra kommandona docker container prune följt av docker image prune -a.

Förbered ert delade repository

För att undvika att GitLab försöker publicera projektet från ert delade repository behöver vi berätta för den att den inte ska försöka. Utan detta kommer den försöka varje gång ni laddar upp något och misslyckas, vilket leder till att den skickar ett mail som beskriver hur mycket den försökte och misslyckades. I och med att det tar ganska lång tid att försöka så är det också slöseri med resurser att den försöker hela tiden. Gör följande för att stänga av:

  1. Logga in på gitlab.liu.se med ert LiU-ID, och navigera till ert delade repository (alltså inte det personliga publiceringsrepositoryt, det kommer vi till snart).
  2. Klicka på "Settings" i vänstermenyn (kugghjulet). Expandera sedan "Visibility, project features, permissions" och stäng av "Pipelines".

Detta ska göra så att GitLab inte försöker publicera från ert delade repository. Har ni missat dessa steg kommer ni att få mail från GitLab. Dubbelkolla i så fall stegen ovan, och hör av er till kursledningen om det inte löser problemet.

Förbered ert lokala repository

Om allting verkar fungera som det ska lokalt kan vi nu börja förbereda vår lokala kopia av koden med den information som behövs för att ladda upp portfolion hela vägen från GitLab till LiU:s servrar. Till detta behövs ytterligare en konfigurationsfil: .gitlab-ci.yml. Den filen berättar för GitLab vad som ska göras varje gång ni publicerar en ny commit med git push. (Detta kallas ibland för continuous deployment).

  1. Lägg till filen .gitlab-ci.yml (notera punkten i början av namnet) i mappen med ert projekt (om ni öppnar filen i en texteditor, var noga med att editorn inte stoppar in tab-tecken i filen - det kan göra den ogiltig senare).
  2. Gör en commit med alla filer som behövs för uppladdningen:
    git add .dockerignore .gitlab-ci.yml Dockerfile
    git commit -m "Publikationsfiler"
  3. Ladda upp allt på GitLab: git push

Förbered det individuella publiceringsrepositoryt

Det går bara att ladda upp portfolion från repositories som är förberedda för detta. Alla kommer att få tillgång till sådana repositories på gitlab.liu.se. Det nya repositoryt måste konfigureras lite innan det kan användas för att publicera portfolion.

  1. Logga in på gitlab.liu.se med ert LiU-ID.
  2. Klicka på "Projects" i övre vänstra hörnet, sedan "Your projects", och klicka på projektet som ni ska använda för att ladda upp portfolion (namnet börjar med tdp003-2022 och innehåller ert LiU-id).
  3. Klicka på "Settings" i vänstermenyn (kugghjulet). Expandera sedan "Visibility, project features, permissions" och se till att "Container registry" är aktiverat. Klicka sedan på "Save changes".
  4. Håll sedan musen över "Settings" i vänstermenyn och välj undermenyn "Repository" och expandera "Deploy Tokens".
  5. I botten av sidan finns en lista "Active Deploy Tokens". Om den innehåller en rad som börjar med "gitlab-deploy-token" behöver inget mer göras. Annars måste en token skapas: Skriv "gitlab-deploy-token" i fältet (utan citattecken) "Name", lämna "Expires at" och "Username" tomma. Markera rutan "read_registry" (den undre) och klicka på "Create deploy token".

Efter dessa steg ska repositoryt vara färdigkonfigurerat för att publicera portfolion.

Koppla samman ert repository med det publiceringsrepositoryt

Det går bara att ladda upp portfolion från repositories som är förberedda för detta. Alla kommer att få ett eget repository som kan användas för detta. Vi behöver därför se till så att ni kan publicera er kod även till detta repository. Denna uppsättning måste göras på alla datorer som ska användas för att publicera eller uppdatera portfolion.

  1. Logga in på gitlab.liu.se med ert LiU-ID.
  2. Klicka på "Projects" i övre vänstra hörnet, sedan "Your projects", och klicka på projektet som ni ska använda för att ladda upp portfolion (namnet börjar med tdp003-2022)
  3. Välj den blåa knappen "Clone" till höger om projektets namn, och kopiera adressen som står under "Clone with SSH".
  4. Öppna en terminal och navigera till katalogen som innehåller er portfolio. Lägg sedan till en ny remote med kommandot: git remote add production <adressen från GitLab>.

Publicera portfolion

När ni nu har lagt till en ny så kallad remote till repositoryt går det att ladda upp all kod dit med kommandot git push production main. (Om du har andra namn på dina grenar lokalt kan du behöva köra git push master:main, vilket betyder ladda upp min gren master till main på servern.) Efter att ha kört detta kommando kommer ni att se all er kod i det nya repositoryt. Har ni dessutom lagt till filen .gitlab-ci.yml kommer GitLab att börja packetera erat projekt för att publicera det. Notera: Första gången kan ni behöva lägga till flaggan -f (git push -f production main).

För att se hur det går med publikationsprocessen kan man klicka på raketen märkt "CI/CD" i vänstermenyn för repositoryt. Då visas en lista över alla så kallade pipelines, och deras status. En pipeline skapas varje gång ni kör git push production master, och motsvarar ett försök att publicera projektet. För att visa mer information om hur det går kan ni klicka på numret i andra kolumnen (exempelvis #1234). Där visas de två stegen som GitLab kommer köra: först docker_build, som bygger en dockeravbild liknande vad som gjordes ovan, och deploy som laddar upp projektet på internet. Om man klickar på en av de två delarna så kan man se utdatan från de olika stegen, vilket kan underlätta felsökning om det behövs (fungerade det tidigare ska det förhoppningsvis fungera här också). Notera att dessa steg kan ta rätt lång tid, från några minuter till någon timme.

När båda stegen är klara (båda har en grön bock på sig) så har allt gått som det ska. Då kommer ert projekt inom 5-10 minuter vara tillgängligt via adressen <projektnamn>.kubernetes-public.it.liu.se, där <projektnamn> är namnet på projektet på gitlab.liu.se. Exempelvis http://tdp003-2022-pialo23.kubernetes-public.it.liu.se/.


Sidansvarig: Emma Enocksson Svensson
Senast uppdaterad: 2022-09-23