gogs

När man håller på att programmera så tenderar man att spara filerna på olika ställen och förr eller senare så börjar man undra vilken var den senaste version eller nu har jag ändra i skriptet och helt plötsligt slutar allt att fungera vad var det jag ändrade och hur såg filen ut innan. Man kanske är flera som arbetar med ett gemensamt projekt. De flesta som arbetat ett längre tag har insett fördelen med att använda någon typ av versionhantering på sina filer, det finns en antal olika kommandoverktyg för detta men numera finns det även webbaserat varianter som använder de gamla kommandon men även ger ett snyggt webgränssnitt för att överblicka förändringar m.m. Det finns flera som tillhandahåller denna tjänst gratis t.ex Github (https://github.com/) och Bitbucket (https://bitbucket.org/) för att nämna några.

Dessa get fri uppladdning för publik kod men du blir oftast tvungen att betala om du ska ha mer än ett privat projekt och du behöver även tillgång till internet för att hålla koden uppdaterad.

Så om man vill ha en privat webtjänst för detta finns det flera olika  lösningar. Det finns ett flertal program som efterliknar den miljö som man har på github, den största är nog GITLAB (https://gitlab.com) men den tar ganska mycket resurser, bara installationen kräver 872 Mb.

I denna artikel kommer att beskriva ett program som är enkelt att installera, tar lite systemresurser och tillåter att man kör databaser allt från SQLite till MySQL. Programmet som jag tänker på heter Gogs (http://gogs.io/) och är skrivet i programmeringsspråket GO (https://golang.org/). Jag att beskriva hur man sätter upp den med SQLite men även MySQL för de som vill det.

Installation av GO

Den version som följder med Raspian är en ganska gammal version (1.0.2) så vi hämtar hem en nyare från deras hemsida (1.4.2), som tur är finns färdiga binärpaket att hämta hem. Detta finns för optimerade för både den gamla Raspberry PIn (ARMv6) och den nya version 2 (ARMv7)

Den som fungerar för alla versioner av Raspberry PI laddar du ner med förjande kommando (är du osäker vinkeln version av pi du har, använd denna)

för version 2 finns en ARMv7 kompilerad version som man laddar ner med, vet ej om den gör någon prestandaförbättring

Om man inte litar på ovanstående kan man kompilera Go från källkoden med följande

Räkna med att det tar en stund (c:a 30 minuter på en PI 2)

Nu behöver vi sätta upp systemvariabler för GO, vi lägger till en fil i /etc/profile.d/ som kommer att köras automatiskt när man loggar in

och skriv in följande kod och spara filen

Logga ut och in för att variablerna ska laddas

Skapa användare for Gogos

När man har en applikation som exponeras utåt är det bäst att den går som en användare som inte har några rättigheter t.ex sudo och att man inte kan logga in med den överhuvudtaget. Vi skapa en användare git som ska köra applikationen.

Installation av databas

Här beskriver jag 2 alternativ MySQL och SQLite3, där SQLite3 kräver mindre resurser då den inte har någon tjänst som behöver vara igång för att man ska använda den, nackdelen är att den inte är lika effektiv när man gör mer komplexa eller stora sökningar i databasen. För mindre projekt tror jag SQLite är fullt tillräckligt.

SQLite3

Väldigt enkel installation, man behöver bara installera paketet med kommandot

MySQL

Installationen är nästan lika enkel

Under installationen får man frågan om ett root lösenord för MySQL, kom ihåg detta då detta behövs för nästa kommando

För att det ska fungera med MySQL måste vi skapa en databas och get en användare rättigheter att använda databasen, starta mysql med kommandot

och ang lösenordet som du använde när du installerade MySQL. Klistra in följande rader i mysql fönstret, byt ut LÖSENORD mot ett annat lösenord (används till användaren gogs) och kom ihåg detta då de kommer att användas senare i installtionen

Installation av Gogs

Byt så att man kör som användare git med följande kommando

Skapa ett bibliotek där alla projekt ska ligga

Nu ska vi ladda ner koden för gogs, om du ska köra den med SQLite3 så kör du kommandot

annars kör du kommandot

Nu är installationen klar

Konfiguration

Nu är det dax att konfigurera upp Gogs, först skapar vi en personlig konfigurationsfil

Sedan ska vi redigera den

Jag har delat up konfigurationen i block och går igenom den block för block

APP_NAME anger vad som visas när applikationen körs
RUN_USER med vilken användare, i detta fall behåll git
RUN_MODE påverkar optimeringen av gogs, välj prod
ROOT anger katalogen där alla projekt sparas

Konfiguration av webtjänsten

DOMAIN anger adressen till webservern (dvs Raspberry PIn som den går på) om du har avahi igång så kan du nå den via <namnet enligt hostname>.local dvs för min maskin som heter rpi2 så blir namnet rpi2.local. Alternativt kan man ange maskinens IP-nummer t.ex 192.168.3.11, om man ska använda sig av ett riktigt HTTPS certifikat måste maskinen ha ett namn men för våra fulcert spelar det ingen roll.

Standard protokoll är http, dvs okrypterar, om man vill köra krypterat kan man antingen installera riktiga certifikat (jag kommer inte att beskriva detta i denna artikel) eller använda s.k “fulcert” eller egensignerade, dvs det finns ingen kyptoutgivare som går i god för certifikatet och du kommer att få en varning när du surfar in på sidan

Så för mig står det

Nu ska vi definiera vilken databas som ska användas

Om SQLite3 används behöver bara DB_TYPE ändras

för MySQL behöver vi lösenordet som du satte tidigare för användare gogs

I sektionen kan man göra lite inställningar om t.ex hur länge den ska komma ihåg en inloggning. Om du känner di väldigt paranoid kan du ändra

SECRET_KEY till något annat men denna nyckel genereras vid varje installation så du kan bara få samma nyckel om du kopierar hela filträdet till en annan dator. Sedan finns det en uppsjö av parametrar som man kan sätta upp bl.a epost m.m, se http://gogs.io/docs/advanced/configuration_cheat_sheet.html för en komplett lista.

Nu är det dax att spara ändringarna.

Om du valt att köra https med egenutfärdat certifikat, kör följande kommandon för att generera certifikatfilerna.

där det efter -host= ska stå samma namn som du angav på DOMAIN i app.ini

Nu kan vi starta upp den manuellt första gången för att testa at allt verkar fungera och skapa admin användaren.

Får du följande fel

[…gits/gogs/cmd/web.go:377 runWeb()] [E] Fail to start server: open custom/https/cert.pem: no such file or directory

så har du glömt att generera certifikatfilerna

Får du upp något som liknar detta

så är gogs igång och vi kan surfa in på adressen till servern, i mitt fall rpi2.local:3000

Lite special ang att köra https och egna certifikat

Viktigt att notera är att om vi kör https så kan inte applikationen och webläsaren komma överens om det är krypterat så då måste man ange https:// före dvs i mitt fall https://rpi2.local:3000/

Sedan upptäcker webläsaren att det finns ingen officiell utfärdare av certifikatet så den kommer att varna dig, lite olika vilken webläsare som du har men så här det det ut i Chrome

SSL_varning

Man får sedan acceptera att gå förbi varningen under Advanced, om allt gick bra får du upp en liknade sida

gogs_first_run

 

Klicka på Server and Other Services Settings och se till att Disable Self registration är iklickad för att inte alla som kommer åt tjänsten ska kunna skapa konton.

gogs_noreg

 

En rekommendation är att skapa ett admin-konto direkt då vi inte har satt upp någon epost-hantering. Klicka på Admin Account Setting för att öppna upp fliken, fyll i lämpligt användarnamn och lösenord

gogs_admin

 

Klicka sedan på Install Gogs för att slutföra installationen.

Sedan är installationen klar och en inloggningsruta visas

gogs_login

Logga in med admin-kontot och skapa en användare för dig genom att klicka på admin symbolen gogs_admin_icon så att du får fram Admin panel och klicka på Users

gogs_admin_panel

 

Använd Create New Account för att skapa ett eget projektkonto

gogs_create_acc

Logga ut från admin konto med gogs_logout_icon och logga in med din nyskapade användare.

Klicka på + tecknet och välj New Repository

gogs_new_rep

 

Fyll i namn på projektet och en beskrivning

gogs_first

 

Klicka på Create Repository för att skapa det, Gogs visar sedan vilka kommandon som man behöver göra för att skapa inehållet

gogs_fist_info

 

Observera att jag har klickat på HTTPS eftersom vi inte kan logga in via git-användaren och vi vill att varje person ska ladda upp genom att logga in med sin egen användare i gogs och inte vara kopplad till en användare på systemet. Nu kan du öppna ett terminalfönster och skapa ett bibliotek som ska innehålla projektets filer.

och sedan kan man göra följande

gå tillbaka till webfönster och gör en refresh så ser du att den uppdaterats

gogs_commit

För att lägga till eller uppdatera filer använder man git add <filnamn> och innan man skicka iväg git commit -m “beskrivning på vad man gjort”

Uppdatera websidan så ser den ut såhär nu

gogs_commit2

För att hämta ut projektet någon annanstans klicka på molnet

gogs_molnet

Klicka på Copy för att check ut som ett git projekt med kommandot git clone <projekturl>

då kan du checka in filer med git add och git push origin master

Om du klickar på ZIP eller TAR.GZ får du länken till projektet packad.

Detta är en mycket basic kurs i att använda git, det finns massor med länkar ute på nätet om hur man använder mer funktioner i git

Det sista vi behöver göra är att sätta upp tjänsten att starta automatiskt, öppna /etc/init.d/gogs med

och klistra in följande

gör den exekverbar

och konfigurera den för automatisk uppstart

Du har nu din egen github grattis