Gitlab Server te installeren met Docker op Ubuntu 18.04 LTS

Gitlab CE of Community Edition is een open-source applicatie die gebruikt wordt om je Git repositories te hosten. Het zelf hosten van je Git repositories geeft je totale controle over je gegevens en biedt een eenvoudig te gebruiken interface voor jou en je teamleden.

In deze gids behandelen we hoe je je Git repository installeert met Gitlab’s gratis aanbod, de Community Editie. Als je geavanceerde functies wilt zoals Merge goedkeuringen, Roadmaps, Portfolio Management, Disaster recovery, Container scanning, etc. dan kun je ervoor kiezen om te upgraden naar de Enterprise Editie.

Voorwaarden

  • Een Ubuntu 18.04 gebaseerde server met een niet-root sudo gebruiker.
  • Je hebt een VPS nodig met minimaal 2 CPU cores en 8GB RAM volgens de opgegeven hardware eisen voor Gitlab CE die 100 gebruikers ondersteunt. Ook al kun je swapruimte vervangen door RAM, het wordt niet aanbevolen, omdat de applicatie dan langzamer draait.

Stap 1 – Afhankelijkheden installeren

Voordat we Gitlab installeren, moeten we ervoor zorgen dat onze server bepaalde software heeft die Gitlab nodig heeft om goed te draaien. Voer de volgende commando’s uit om de afhankelijkheden te installeren.

$ sudo apt update
$ sudo apt install ca-certificates curl openssh-server ufw apt-transport-https -y

Sommige van de bovenstaande software kan voor je voorgeïnstalleerd zijn.

Stap 2 - Verander de SSH poort van je systeem

Gitlab gebruikt poort 22 voor het pushen van repositories via SSH. De SSH van je server draait er ook op en dat zal conflicten opleveren. Er zijn twee manieren om dit aan te pakken. Of je kunt de SSH-poort die je gebruikt om verbinding te maken met je systeem veranderen, of je kunt de poort veranderen die Gitlab zal gebruiken voor SSH. In deze tutorial gaan we de SSH-poort voor de server zelf veranderen.

Hiervoor moeten we het bestand /etc/ssh/sshd_config bewerken. Open het bestand in de teksteditor nano.

$ sudo nano /etc/ssh/sshd_config

Zoek de volgende regel en verander 22 in 6622 en verwijder de # ervoor. Je kunt elke gewenste poort kiezen.

# Port 22

Druk op Ctrl + X om je bestand te sluiten en druk op Y om de wijzigingen op te slaan.

Herstart de SSH service.

$ sudo systemctl restart sshd

Sluit je huidige SSH-sessie en maak een nieuwe aan met de poort 6622 en maak opnieuw verbinding met je server.

$ ssh [email protected] -p 6622

Stap 3 - Firewall instellen

In onze vorige stap hebben we ufw (Uncomplicated Firewall) geïnstalleerd. Voordat we verder kunnen gaan met het installeren van Gitlab, moeten we het configureren.

Schakel SSH en de zojuist aangemaakte poort in, zodat we niet buitengesloten worden.

$ sudo ufw allow OpenSSH
$ sudo ufw allow 6622

Schakel de ufw firewall in.

$ sudo ufw enable

We moeten ook http en https inschakelen om Gitlab te laten werken.

$ sudo ufw allow http
$ sudo ufw allow https

Controleer de status van de firewall.

$ sudo ufw status

Je zou een uitvoer als de volgende moeten zien.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
6622                       ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
6622 (v6)                  ALLOW       Anywhere (v6)      
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             

Stap 4 - Docker installeren

Voeg de GPG-sleutel van Docker toe aan je systeem.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Controleer de vingerafdruk van de gedownloade sleutel.

$ sudo apt-key fingerprint 0EBFCD88

Je zou een uitvoer als de volgende moeten zien.

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <[email protected]>
sub   rsa4096 2017-02-22 [S]

Voeg de Docker repository toe.

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Werk je pakketdatabase bij.

$ sudo apt update

Installeer Docker-CE. CE is de Community Edition van de Docker.

$ sudo apt install docker-ce -y

Docker zou nu geïnstalleerd moeten zijn. Controleer of het draait.

$ sudo systemctl status docker

De uitvoer zou op het volgende moeten lijken.

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-10-11 21:10:31 UTC; 32s ago
     Docs: https://docs.docker.com
 Main PID: 19128 (dockerd)
    Tasks: 12
   CGroup: /system.slice/docker.service
           ??19128 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Druk op q om af te sluiten.

Voeg je beperkte Linux gebruikersaccount toe aan de docker groep zodat je docker kunt draaien zonder sudo.

sudo usermod -aG docker $USER

De variabele$USER zal de huidige ingelogde gebruiker kiezen en toevoegen aan de docker groep. Vervang $USER door de werkelijke gebruikersnaam als je momenteel niet bent ingelogd met die gebruiker.

Schakel over naar de gebruiker die we zojuist hebben toegevoegd. Ook al was je al ingelogd, toch moet je er opnieuw naar overschakelen om de rechten opnieuw te laden.

$ su - ${USER}

Controleer of alles goed draait door het ingebouwde programma "Hello World" te draaien.

$ docker run hello-world

Je zou de volgende uitvoer moeten zien waaruit blijkt dat Docker is geïnstalleerd en goed werkt.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Stap 5 - Installeer Docker Compose

Het is mogelijk om deze stap over te slaan en verder te gaan, maar Docker Compose geïnstalleerd hebben zal het draaien van Gitlab veel gemakkelijker maken, vooral als je het op meer dan één server wilt doen.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Ten tijde van het schrijven van deze tutorial is 1.24.1 de huidige stabiele release van Docker Compose. Je kunt voor de laatste release versie kijken op hun Github pagina.

Pas uitvoerbare machtigingen toe op de docker compose binary.

$ sudo chmod +x /usr/local/bin/docker-compose

Voeg Command Completion toe aan Docker Compose.

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Controleer of je installatie geslaagd is.

$ docker-compose --version

Het zal de volgende uitvoer afdrukken.

docker-compose version 1.24.1, build 4667896b

Stap 6 - Installeer Gitlab

Download Gitlab's Docker image van Dockerhub. Dit image bevat alles wat je nodig hebt om Docker te draaien - nginx, PostgreSQL, Redis, enz. Voer het volgende commando uit om het image te downloaden.

$ docker pull gitlab/gitlab-ee:latest

Ook al gaat deze tutorial over het installeren van de Community Edition, toch zullen we het Enterprise Edition image van Gitlab pakken. Dit is omdat de Enterprise editie zich precies zo gedraagt als de Community Editie, tenzij je er naar upgradet door je licentie in te voeren. Het upgraden van een Community Edition installatie naar de Enterprise Edition geeft meer complicaties.

Het duurt even om de complete image te downloaden. Als de opdracht klaar is, kun je het volgende commando uitvoeren om alle images die momenteel op je systeem staan te controleren.

$ docker images

De uitvoer zou er ongeveer zo uit moeten zien als hieronder.

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
gitlab/gitlab-ee    latest              4bacb2356d28        4 days ago          1.87GB
hello-world         latest              fce289e99eb9        9 months ago        1.84kB

Stap 7 - Gitlab draaien

We kunnen Gitlab container op dit punt meteen draaien door alle opties in een enkel commando op te geven, maar dat zou betekenen dat je elke keer dat je de container moet draaien, deze variabelen moet opgeven. Docker Compose maakt dit proces eenvoudiger, omdat het je toestaat de configuratie op te slaan in een .yml bestand dat vervolgens gebruikt wordt om de container te draaien en te starten.

Maak een docker-compose.yml aan.

$ nano docker-compose.yml

Plak er de volgende code in.

web:
  image: 'gitlab/gitlab-ee:latest'
  container_name: 'gitlab-howtoforge-tutorial'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://gitlab.example.com'
      gitlab_rails['smtp_enable'] = true
	  gitlab_rails['smtp_address'] = "smtp.gmail.com"
      gitlab_rails['smtp_port'] = 587
      gitlab_rails['smtp_user_name'] = "[email protected]"
      gitlab_rails['smtp_password'] = "app-password"
      gitlab_rails['smtp_domain'] = "smtp.gmail.com"
      gitlab_rails['smtp_authentication'] = "login"
      gitlab_rails['smtp_enable_starttls_auto'] = true
      gitlab_rails['smtp_tls'] = false
      gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - '80:80'
    - '443:443'
    - '22:22'
    - '587:587'
  volumes:
    - '/srv/gitlab/config:/etc/gitlab'
    - '/srv/gitlab/logs:/var/log/gitlab'
    - '/srv/gitlab/data:/var/opt/gitlab'

Laten we eens kijken wat elk van de bovenstaande opties betekent.

  • image verwijst naar de locatie van de Docker image van Gitlab op Dockerhub.
  • metcontainer_name kun je een label op je docker container plakken, voor gebruik bij het verwijzen naar de container binnen een Docker-netwerk.
  • hostname definieert de interne hostnaam van de container, of in ons geval, de URL waarop je Gitlab zult installeren.
  • restart specificeert een herstartbeleid voor de container. Wij hebben het ingesteld op altijd, wat betekent dat een container bij het verlaten automatisch opnieuw wordt opgestart.
  • environment geeft de variabele GITLAB_OMNIBUS_CONFIG waarmee je elke Gitlab configuratie-instelling kunt invoeren. In dit geval leveren we de externe URL die Gitlab zou moeten gebruiken.
  • volume definieert de mappen die op de server zijn gemount om persistente gegevens op te slaan. De drie volumes/mappen slaan applicatiegegevens, logbestanden en configuratiebestanden op. De waarde links van de puntkomma is de lokale directory op de server, en de waarde rechts is de directory in de container.
  • publish vertelt de container om poorten of een reeks poorten naar de host te publiceren. Omdat Gitlab de poorten 22(SSH), 80(HTTP), 443(HTTPS) en 587(SMPT - MSA) nodig heeft, hebben we die hier opgegeven. Als je wilt dat Gitlab een niet-standaard poort op je server gebruikt (waarschijnlijk omdat die niet beschikbaar is), dan geef je eerst de hostpoort op en dan de containerpoort. Bijvoorbeeld, omdat je server al de SSH(22) poort gebruikt, kun je Gitlab vertellen om SSH via een andere poort te gebruiken, bijvoorbeeld 3333. Dan zou je 22:22 in het bovenstaande bestand veranderen in 3333:22. Je zult ook de regel gitlab_rails['gitlab_shell_ssh_port'] = 3333 moeten toevoegen onder GITLAB_OMNIBUS_CONFIG hierboven.
  • external_url verwijst naar het domein waar je Gitlab geïnstalleerd zal worden. We hebben https gekozen, wat automatisch het Let's Encrypt SSL-certificaat voor ons zal installeren.
  • We hebben ook extra configuratie toegevoegd om Gitlab te configureren om Gmail te gebruiken voor het versturen van mails. Je kunt elke SMTP maildienst van derden gebruiken. Gitlab docs hebben een gedetailleerde gids bijgehouden over hoe je verschillende SMTP diensten ermee kunt configureren.

Zorg ervoor dat je in dezelfde map zit als docker-compose.yml. Voer het volgende commando uit om Gitlab te starten.

$ docker-compose up -d

Je zult iets zien als het volgende.

Creating gitlab-howtoforge-tutorial ... done

Het zal nog enkele minuten duren voordat je Gitlab via de browser kunt benaderen. Je kunt meer te weten komen over het opstartproces via het volgende commando.

$ docker logs -f gitlab-howtoforge-tutorial

Om het logboekcontroleproces af te sluiten, druk je op Ctrl + C.

Laad de Gitlab site in je browser. Als je hem te kort na het starten van de container probeert te laden, krijg je de 502 foutmelding. Als dat gebeurt, wacht dan nog een paar minuten en probeer het opnieuw.

Als alles in orde is, dan zie je de volgende pagina in je browser.

Gitlab Inloggen

Stap 8 - Gitlab configureren

Geef een wachtwoord op voor Gitlab's Administrator Password. Je komt nu op het inlogscherm. Gebruik root als de zojuist gekozen gebruikersnaam en wachtwoord om in te loggen.

Aanmelden

SMTP configureren

We moeten de SMTP instellingen inschakelen voordat we

Gitlab profiel configureren

Klik op het gebruikersicoontje rechtsboven om het uitklapmenu op te roepen en kies instellingen.

SMTP configureren in Gitlab

Je komt dan op je Profiel instellingen pagina. Voeg hier je naam en e-mail toe. Je moet je e-mailadres bevestigen om het te kunnen bijwerken. Je kunt hier ook meer informatie over jezelf toevoegen als je dat wilt.

Gitlab profiel

Klik op Profielinstellingen bijwerken als je klaar bent.

Gebruikersnaam wijzigen

Vervolgens moeten we onze gebruikersnaam veranderen van root naar iets anders, want root is een vrij vaak te raden gebruikersnaam. Klik op Account in de linker zijbalk.

Gebruikersnaam wijzigen

Verander de gebruiker in de gebruikersnaam die je wilt behouden. Klik op Gebruikersnaam bijwerken om te eindigen. Je moet hier ook twee-factor authenticatie inschakelen voor meer veiligheid.

Openbare aanmeldingen beperken

Standaard staan Gitlab installaties iedereen toe zich aan te melden. Als je dat niet wilt, moet je dat uitschakelen. Klik op het moersleutelachtige pictogram in de bovenste balk om het Administratiegedeelte te openen.

Beperk openbare inschrijving

Om de instellingen aan te passen, klik je op Instellingen in de linker zijbalk.

Instellingen

Scroll hier omlaag naar de beperkingen voor Aanmelden en klik op de knop Uitbreiden. Schakel het vakje Aanmelden ingeschakeld uit en klik op Wijzigingen opslaan als je klaar bent.

Inschrijvingsbeperkingen

Je zult nog steeds nieuwe gebruikers kunnen toevoegen via de Admin-interface.

SSH Sleutel toevoegen

De laatste stap is het toevoegen van onze SSH-sleutel. Als je een SSH-sleutel hebt, kun je het volgende commando overslaan. Als je er geen hebt, kun je er een aanmaken met het volgende commando.

$ ssh-keygen

Dit commando is gebruikelijk voor Mac OS, Linux en Git Bash/WSL op Windows. Accepteer de standaardwaarden en laat het passphrase veld leeg.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/gitlab
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in gitlab.
Your public key has been saved in gitlab.pub.
The key fingerprint is:
SHA256:6dNGAPyd8JAkHAikYOW2PsFjGlzBBpwy4XQ9RQgVwK8 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+*OB=*O=..       |
|B+o+o+oo+        |
|oo.+. ...= .     |
|. + ..  .o+      |
| o *.   S .      |
|  =Eo  . o       |
| . o    o o      |
|    .    o       |
|                 |
+----[SHA256]-----+

Je kunt je publieke sleutel weergeven met het volgende commando

$ cat ~/.ssh/gitlab.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUf64YH7uJimFWVJSy/mgYiLRqBxVB6JJMTxZZ96DwExoINhWVRhQAgMgExBWGpUCpWXhLcNuIM+EfFRtCq+YYyLC+GlHsNdnLgecGgop72p8BEi8UckgCiCSuMrWCMAOFh5NKs2YHpF7bOUjXQRVvGujLuV1UBof7SXQ/za7e3aybNiH3KpA6oWSSmpqnOt8rZT54IjLnVFUSLx7ZxWDVW1bO29mI8NjWwzZGLAtNIkJQEOqVo8nhVkroFHvBTrZnUsmr5oFOWG++LPqED9EUSPTpO8PNnogYT3xsVncBMMAEt0pPE7ATmstQc161SEtqAUa98Qb0RRKqCKcKStOp [email protected]

Ga terug naar het gedeelte Instellingen van je profiel en ga naar SSH-sleutels in de zijbalk.

Profielinstellingen

Plak de SSH-sleutel in het daarvoor bestemde vak en klik op Sleutel toevoegen om verder te gaan.

SSH-sleutel

Nu kun je je repositories aanmaken en vastleggen zonder je Gitlab referenties op te geven.

Stap 9 - Maak je eerste project

Elke repository in Gitlab hoort bij een project. Een project bevat een repository, issue tracker, merge requests, wiki, continuous integration en continuous delivery (CI/CD) pipelines, en veel andere functies.

Om je eerste repository te maken, klik je op Een project maken.

Eerste project maken

Je komt dan op de pagina Nieuw project. Voer de projectnaam in. Je kunt de slug van het project veranderen in iets anders. Voer een beschrijving van het project in als je wilt en verander de zichtbaarheid van het project naar wens. Je kunt je repository initialiseren met een README bestand. Als je klaar bent, klik je op Creëer project.

Nieuwe projectassistent

Je komt nu op je repository pagina met alleen een leeg README.md bestand.

Testproject

Nu onze repository live is, kunnen we proberen een changelog toe te voegen vanaf de commandoregel.

Voer de volgende commando's in op je computer om een CHANGELOG bestand aan te maken en terug te zetten naar je repository. Zorg ervoor dat je Git op je computer geïnstalleerd hebt.

Kloon het archief. Je kunt klonen met SSH of HTTPS.

Kloon met SSH.

$ git clone [email protected]:user/howtoforge-test.git

of klonen met HTTPS.

$ git clone https://gitlab.example.com/user/howtoforge-test.git

Voer de rest van de commando's in om CHANGELOG aan te maken en te pushen.

$ cd howtoforge-test
$ touch CHANGELOG  # Or create the file in your editor and enter a project description
$ git add CHANGELOG
$ git commit -m "add Changelog"
$ git push -u origin master

Stap 10 - Gitlab Container beheren

Om alle draaiende containers te bekijken, voer je het volgende commando uit.

$ docker-ps

Om je Gitlab container te stoppen, voer je het volgende commando uit.

$ docker stop gitlab-howtoforge-tutorial

Om je container weer te starten, gebruik je het volgende commando.

$ docker start gitlab-howtoforge-tutorial

Als je je container wilt verwijderen, kun je dat doen met het volgende commando.

$ docker container rm gitlab-howtoforge-tutorial

Stap 11 - Upgrade Gitlab

Als je Gitlab wilt upgraden naar de nieuwste versie, moet je de bestaande container stoppen en verwijderen, de nieuwste image ophalen en dan de container opnieuw aanmaken.

$ docker stop gitlab-howtoforge-tutorial
$ docker rm gitlab-howtoforge-tutorial
$ docker pull gitlab/gitlab-ee:latest
$ docker-compose up -d

En voordat je het vraagt, je gegevens zijn veilig, zelfs als je de container verwijdert.

Dit besluit onze tutorial over het opzetten van Gitlab op Ubuntu 18.04 server met behulp van Docker. Als je vragen hebt, post ze dan in de opmerkingen hieronder.