https://github.com/catarinaacsilva/gitlab
GitLab Scaling and High Availability
Science Score: 13.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.8%) to scientific vocabulary
Keywords
Repository
GitLab Scaling and High Availability
Basic Info
Statistics
- Stars: 3
- Watchers: 2
- Forks: 3
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
GitLab Scaling High Availability
In this repository you can see a simple and initial deploy of GitLab on docker-compose. The main idea was to deploy on swarm cluster.
You can easily configure and deploy your Docker-based GitLab installation in a swarm cluster.
Requirements
- Ubuntu >=18.04
- Docker
- Docker compose
- Docker Swarm
Install GitLab using docker-compose
Create a Docker-compose.yml :
cd dockerComposeRun
docker-compose up
Setup a Docker swarm
There are a few things that we will need before we can get to Gitlab:
- A proxy to forward the requests to the correct services
- Postgres and Redis
- Prometheus to collect metrics from Gitlab and Grafana to visualize these metrics
- An NFS4 share to store any persistent data we need
The Proxy
Setting up NFS
- First we need to install the NFS server:
sudo apt install -y nfs-kernel-server - For the NFS share the will need a directory structure like the following:
console
.
+-- /srv/gitlab-swarm/
| +-- gitlab
+-- config
+-- data
+-- logs
| +-- grafana
| +-- postgres
| +-- prometheus
We can create it using the following shell:
```bash
mkdir -p /srv/gitlab-swarm && \ mkdir -p /srv/gitlab-swarm/gitlab/{data,logs,config} && \ mkdir -p /srv/gitlab-swarm/postgres && \ mkdir -p /srv/gitlab-swarm/grafana && \ mkdir -p /srv/gitlab-swarm/prometheus && \ chmod -R 777 /srv/gitlab-swarm
```
- Then we need to create the directory /exports/gitlab-swarm and mount srv/gitlab-swarm onto it (this is required for NFS version 4):
``` bash
mkdir -p /exports/gitlab-swarm mount --bind /srv/gitlab-swarm /exports/gitlab-swarm
```
- Setup the NFS share by editing /etc/exports:
``` bash
/etc/exports
/exports/ *(rw,sync,fsid=0,crossmnt,nosubtreecheck) /exports/gitlab-swarm *(rw,sync,norootsquash,nosubtreecheck)
```
Now we reload the NFS configuration:
exportfs -rawe need to add the following line to /etc/fstab:
/srv/gitlab-swarm/ /exports/gitlab-swarm/ none bindRemember that we need the NFS client installed on each node of the cluster:
sudo apt install -y nfs-commonTo test if the NFS configuration is correct, we can try mounting the share:
``` bash mkdir /var/tmp/test-nfs && \ mount -t nfs4 127.0.0.1:/gitlab-swarm /var/tmp/test-nfs && \ grep nfs4 /proc/mounts | cut -d ' ' -f 1,2,3 && \ umount /var/tmp/test-nfs
```
- Running the commands above should output this:
127.0.0.1:/gitlab-swarm /var/tmp/test-nfs nfs4
Building the stack
Create the configuration files for the services we are deploying. The first one is for Gitlab itself (gitlab.rb).
The Prometheus configuration file to setup metrics collection from gitlab
The Grafana configuration file
Services
- Now we can start defining the services of our stack. Let's begin with Gitlab itself: stack.yml
Deploying the stack
docker stack deploy -c stack.yaml gitlabAnd if you access
gitlab.localtest.meyou get to our Gitlab instance running on Docker Swarm.
Authors
- Catarina Silva - catarinaacsilva
License
This project is licensed under the MIT License - see the LICENSE file for details
Owner
- Name: Catarina Silva
- Login: catarinaacsilva
- Kind: user
- Location: Portugal
- Company: IT Aveiro | UA
- Repositories: 3
- Profile: https://github.com/catarinaacsilva
Ph.D student | Computer science | MAP-i