1. Hem
  2. Utvecklarverktyg
  3. Hur använder jag Git för att skapa en staging-miljö?

Hur använder jag Git för att skapa en staging-miljö?

Den här guiden är för avancerade användare.

Innan du läser den här guiden behöver du ha konfigurerat Git och vara bekant med grunderna. Om du inte har gjort det redan så har vi en guide här som visar hur du kommer igång med Git.

Git är till för att underlätta utveckling av kod, framförallt i grupp. Men det kan även användas för andra saker. Ett av dessa användningsområden är för att skapa en staging-miljö där du kan enkelt arbeta och testköra saker på en dev-site för att sedan lansera det live när du är redo.

Konfigurera Git på din dator

Vi kommer anta här att du kör MacOS, Linux eller använder Linux Subsystem för Windows 10 och att du har Git-klienten installerad.

I din terminal navigera till foldern där din hemsida finns och initiera Git.

cd /path/to/exempel.se
git init

Om du har filer i den mappen som du inte vill ladda upp till ditt webbhotellkontot kan du skapa filen .gitignore. Skriv sedan in i den filen vad det är du inte vill ladda upp, t.ex:

*.bak
backups/

Ovanstående rader betyder att Git kommer ignorera alla filer som slutar på .bak och mappen backups.

Lägg sedan till filerna och commit’a dom.

git add .
git commit -m 'Initial commit'

Konfigurera Git på servern

Glöm inte att du måste ha importerat din publika SSH-nyckel till cPanel för att kunna använda Git. Alternativt att du skapar ett helt nytt nyckelpar i cPanel om du inte redan har ett.

Du behöver nu logga in på ditt webbhotellkonto med SSH. När du har gjort det kan du i roten skapa en mapp för alla dina Git-repos samt en separat mapp för just det här projektet.

mkdir -pv ~/repos/exempel.se.git

Initiera sedan ditt Git-repo med –bare.

git init --bare ~/repos/exempel.se.git

Nu behöver du skapa en så kallad hook, du kan läsa mer om vad hooks är här. Den hook som behövs i det här fallet är post-receive.

nano ~/repos/exempel.se.git/hooks/post-receive

Scriptet för hooken ser ut såhär:

#!/bin/bash
#
# En Git-hook för att publicera exempel.se
#
git --work-tree=/home/cpanelanvändarnamn/public_html/ checkout -f

Spara filen genom att trycka på ctrl+o och sedan enter. Avsluta nano genom att trycka på ctrl+x.

Om din domän använder en annan dokumentrot än public_html så behöver du anpassa sökvägen efter den.

Gör sedan filen exekverbar.

chmod 775 ~/repos/exempel.se.git/hooks/post-receive

Pusha filerna från datorn

Nu är vi redo att pusha filerna från din dator till webbhotellkontot. Först behöver du dock lägga till Git-repot som finns på ditt webbhotellkonto som en så kallad ”remote” (detta ska alltså göras lokalt på din dator). En bra praxis är att inte kalla den för “origin”, utan använda mer beskrivande namn, i det här exemplet kommer vi använda ”live”.

Kör följande kommande för att lägga till en remote:

git remote add live ssh://cpanelanvändarnamn@exempel.se:/home/cpanelanvändarnamn/repos/exempel.se.git

Du kan med git remote -v dubbelkolla så att allt ser korrekt ut.

live ssh://foobarse@foobar.se:/home/foobarse/repos/foobar.git (fetch)
live ssh://foobarse@foobar.se:/home/foobarse/repos/foobar.git (push)

Nu kan du pusha filerna som ligger lokalt på din dator till webbhotellkontot genom att köra git push live master.

Filerna borde nu dyka upp i public_html-mappen på ditt webbhotellkonto.

Skapa en dev-miljö

Git har en funktion som heter branches som du kan använda för att skapa en dev-miljö för din hemsida. Den branch som du har använt hittills heter master och är där din live site lever. Du kan utifrån branchen master skapa en till som heter dev.

Till en början kommer båda branches innehålla exakt samma filer. Men om du t.ex. vill utveckla en ny funktion som behöver testas innan du lanserar den live så kan du utveckla den på branchen dev utan att det påverkar master.

Du kan sedan sätta upp så att när du pushar branchen dev så laddas den upp till en annan mapp på ditt webbhotellkonto. Den mappen kan du sedan ha kopplad till t.ex. dev.exempel.se för att på ett enkelt sätt kunna testköra hemsidan utan att påverka den site som faktiskt används.

När du sedan har testat klart funktionen kan du merge’a in alla ändringar från dev till master och pusha upp master till webbhotellkontot.

För att se vilken branch du är på just nu kör du git branch. För att skapa en ny branch och byta till den kör du git checkout -b dev (ta bort -b om du vill byta till en redan skapad branch), dev är namnet på branchen. Om du kör git branch igen nu kommer du se att du nu är på dev-branchen.

Logga nu in via SSH igen på ditt webbhotellkonto och skapa ett till repo, t.ex:

mkdir -pv ~/repos/dev.exempel.se.git
git init --bare ~/repos/dev.exempel.se.git

Du kommer även behöver skapa en ny hook i ditt nya repo:

nano ~/repos/dev.exempel.se.git/hooks/post-receive

#!/bin/bash
#
# En Git-hook för att publicera dev.exempel.se
#
git --work-tree=/home/cpanelanvändarnamn/dev.exempel.se/ checkout -f dev

Glöm inte att ändra sökvägen här ovanför så den stämmer överens med dokumentroten för din testdomän.

Gör sedan hooken exekverbar:

chmod 775 ~/repos/dev.exempel.se.git/hooks/post-receive

Lägg nu till en ny remote för dev-branchen lokalt på din dator:

git remote add dev ssh://cpanelanvändarnamn@exempel.se:/home/cpanelanvändarnamn/repos/dev.exempel.se.git

Gör nu de ändringar du vill göra i dev-branchen och förbered för att pusha genom att lägga till de filer du har ändrat med git add och commit’a sedan ändringarna som tidigare. För att sedan pusha kör du följande:

git push dev dev

Filerna från din dev-branch ska nu laddas upp till mappen som du definierade i din hook för dev-repot. För att merge’a dina ändringar med master-branchen behöver du först byta branch genom att köra git checkout master. Sedan kan du köra git merge dev.

För att ladda upp ändringarna till din live site kör du git push live master.

Vidareutveckling

Om du vill bli lite mer avancerad och samtidigt underlätta för dig så kan du göra lite modifieringar i post-receive hooken. Öppna och ta bort allt innehåll i filen ~/repos/exempel.se.git/hooks/post-receive. Klistra sedan in följande i filen:

#!/bin/bash
web_root=~/public_html

set -e
read -t 10 -r prev_id cur_id ref _

[[ $ref =~ ^refs/heads/(.*)$ ]] || exit 0
branch="${BASH_REMATCH[1]}"

web_dir="$web_root/$branch"
[ -d "$web_dir" ] || mkdir -pv -- "$web_dir"
git --work-tree="$web_dir" checkout -f "$branch"

Ovanstående kod gör så att du enbart behöver ett Git-repo på webbhotellkontot. Så fort du pushar så kommer det automatiskt skapas en mapp med samma namn som branschen i public_html-mappen. Om det redan finns en sådan mapp så pushas filerna upp till den existerande.

Ändra web_root-variabeln om du vill ändra vilken mapp filerna pushas till.

För att pusha upp din kod behöver du då kör git push live master eller git push live dev. Då kommer filerna för respektive bransch laddas upp till ~/public_html/master eller ~/public_html/dev.

Du behöver anpassa dokumentroten för dina domäner till dom nya sökvägarna för att du ska kunna komma åt hemsidorna via en webbläsare.

I och med att du nu har en remote är det inte så logiskt att den heter live, du kan därför byta namn på den till t.ex. oderland.

git remote rename live oderland

Dev-remoten kan du även ta bort om du inte tänker använda den något mer.

git remote remove dev
Hjälpte den här guiden dig?

Relaterade guider

Behöver du mer hjälp?
Kan du inte hitta lösningen på ditt problem? Då kan du kontakta oss via e-post, chatt och telefon!
Kontakta oss