Alternativ titel: Bland subdomäner och omvända proxyn

Det finns en orsak till att jag studerar datavetenskap: jag tycker verkligen om det! Jag firar påsklov ensam i Umeå. Jennifer (som har betydlig längre påsklov) och Capo är i Finland på äventyr så jag har ingen anledning att gå ut i snöyran och inte behöver jag dammsuga upp något hundhår heller. Det är lite tråkigt men jag har åtminstone massor med tid att göra precis vad jag vill.

Snöyra Idag har vi omväxlande sol och snöyra.

Så vad gör jag då? Idag har jag:

  • Stigit upp när jag vaknade kl 7
  • Spelat Awesomenauts
  • Druckit många koppar te
  • Mixtrat med servern, alltså den Raspberry Pi som ser till att du har nåt att läsa just nu
  • Sett en dokumentär på youtube via Chromecasten som jag fick till födelsedagen
  • Tvättat kläder

Det jag tänkte skriva om var mixtrandet med servern (hoppas jag inte gjorde någon besviken nu :D). Spoiler: resultatet av arbetet är den här nya subdomänen som körs på samma stackars Raspberry Pi som den här hemsidan. Men nu ska vi börja med att backa bandet några veckor.

Lång och tråkig, eller bara långtråkig bakgrundshistoria

I början av året pratade jag med en kompis om att starta ett projekt för att hjälpa lärare att dela med sig av och samarbeta kring läromaterial i större skala än bara inom den egna skolan eller bekantskapskretsen. Digitaliseringen ger många nya möjligheter för samarbete i form av tjänster som Google drive och Dropbox. De här tjänsterna fungerar bra för mindre grupper med tätt samarbete eller för att dela med sig av material till större grupper, men situationen blir snabbt ohållbar om mer än ett tiotal personer vill editera samma dokument.

Lyckligtvis finns det redan en lösning på det här problemet, och det är någonting som programmerare redan har använt länge: versionshantering. Ett av de populäraste verktygen för versionshantering är git som gör det möjligt för över 1500 programmerare att samarbeta kring Linux kerneln. Git i sig är ett terminalbaserat verktyg men det finns gott om webtjänster som försöker erbjuda enklare/snyggare sätt att använda programmet. Webtjänsterna fungerar också ofta som kataloger över alla projekt och gör det på så sätt enkelt att dela med sig av sin kod till andra intresserade.

Git Git är otroligt kraftfullt men terminaler kan vara skrämmande.

En av de populäraste tjänsterna just nu är github med över 50 miljoner projekt i sin katalog. Tyvärr har inte github öppen källkod så det går inte att utgå från den för att skapa en liknande tjänst för lärare. Däremot finns det många andra liknande projekt med öppen källkod, däribland Gogs.

En ny subdomän

Jag hade redan tidigare funderat på hur jag skulle göra för att kunna ha både en blogg och en mail-server eller kanske ett eget moln. Lösningen är att använda subdomäner, precis som google: mail.google.com för att komma åt mailen och plus.google.com för att komma till google+. Det kostar inget extra att lägga till flera subdomäner om man äger själva domänen (google.com i det här exemplet). Men det finns ett problem till: jag har bara en IP-adress och en server. Det innebär att alla signaler kommer till samma maskin som sen på något sätt borde dela upp dem så att varje användare kommer till rätt tjänst.

I tidernas begynnelse, då internet uppfanns löstes det här problemet med hjälp av olika portar för olika program. Ett program som vill skicka filer kan använda port 21 med FTP-protokollet, ett annat program kan samtidigt lyssna på port 80 för att skicka websidor över HTTP-protokollet. Det finns massor med lediga portar så jag kunde i princip ha bloggen på port 80 och 443 som är standard för HTTP och HTTPS och sedan lägga till gogs på t.ex. port 8080, men det blir väldigt fula adresser på det sättet eller vad sägs om jern.me:8080? Dessutom blir det svårt för användaren att komma ihåg vilken port som hör till vilken service.

Omvänd proxy

Räddaren i nöden heter omvänd proxy. Det är helt enkelt ett program som fungerar som växel mellan omvärlden och de olika tjänsterna på servern. När det kommer in en förfrågning kollar proxyn vart den ska skickas baserat på adressen och vidarebefordrar sedan till rätt port. Programmet jag använder för det här heter HAProxy. Det tog ett tag att få alla inställningar rätt men nu fungerar det äntligen! :D

För att få den omvända proxyn att fungera på det här sättet måste den också sköta krypteringen annars vet den inte vart den ska skicka paketen. Det här beror på att adressen krypteras tillsammans med resten av informationen. (IP-adressen krypteras inte eftersom den behövs för att paketet ska hitta fram till rätt maskin.) HAProxy måste alltså dekryptera paketet, läsa adressen och sedan skicka vidare till rätt port.

Framtida projekt

Nu när jag har en fungerade omvänd proxy kan jag enkelt lägga till flera subdomäner. Jag är lite skeptisk till hur bra nextcloud skulle fungera på en Raspberry Pi, men en enkel mail-server med tillhörande hemsida borde åtminstone gå bra. Innan jag börjar med det ska jag åtminstone experimentera lite med gogs. Det är fritt fram för vem som helst att registrera sig och testa men kom ihåg att jag inte tar nåt ansvar för sånt som laddas upp där. Om jag råkar radera allt så är det borta helt enkelt.

Gogs Gogs är ett webbaserat gränssnitt mot git.

Ett annat projekt som blivit aktuellt i och med subdomänen är att flytta varje tjänst/program till en egen docker container. På det sättet går det enkelt att flytta allting till en ny dator eller helt enkelt installera om allt om det behövs.