Random   •   Archives   •   RSS   •   About   •   Contact

Vertically Scaling GitLab Server For As Cheap As Possible

Today's essay acts as a power-up love story for the underdog.

A living document & quickstart for:

  • bootstrappers
  • small business under 99 employees
  • solo ops or devs
  • entrepreneurs
  • hackers
  • tinkerers

You also deserve a quick start to a GitLab Server power house!

Regardless of my intended audience, this strategy should scale to 500-1,000 concurrent engineers on the smallest of the instance classes which satisfy the current GitLab Server "minimum requirements".

Why GitLab Server?

  • GitLab is open source (not black box)
  • GitLab CI is a game changer
  • GitLab CI is extendable to any workflow
  • GitLab Server wants 4G of memory

Expected Results

This guide prescribes the following setup:

  • A Physical or Virtual Machine with at least 4G of RAM
  • Docker installed
  • Docker container started via docker-compose to manage a monolithic Omnibus installation of GitLab Server
  • A Cronjob to backup GitLab Server to /tmp
  • A Cronjob to collect Gitlab Server backup tarball & /etc/gitlab/gitlab-secrets.json
  • A strong recommendation to test the complete backup and recovery process at least once to prepare for when times get rough.

GitLab Server Omnibus In Docker

The installation & configuration is documented using SaltStack to make it easy to spin up GitLab Servers.

To install SaltStack on the new host dedicated for GitLab Server, Run the following:

wget -O - https://bootstrap.saltstack.com | sudo sh -s -- stable;
echo "master: salt.example.com" >> /etc/salt/minion.d/custom.conf;
sudo service salt-minion restart

On the instance designated as salt-master, accept the new salt-minion key:

sudo salt-key -a git2.unturf.com
The following keys are going to be accepted:
Unaccepted Keys:
Git2.unturf.com
Proceed? [n/Y] y

and make sure communication is established:

sudo salt "git2*" test.ping
git2.unturf.com:
    True

and run a highstate to configure that new host instance:

sudo salt "git2*" state.highstate

Once the command returns, assuming we had no errors or failures we have docker installed and an Omnibus Gitlab Server booted inside a container.

Summary for git2.unturf.com
--------------
Succeeded: 104 (changed=69)
Failed:      0
--------------
Total states run:     104
Total run time:   194.431 s

The GitLab Server's internal services take over 3 minutes to come online.

Disaster Recovery

Prepare for real disaster by practicing the entire backup and restore process.

As extra homework, it is high advisable to spin up a 2nd host for GitLab Server in order to test the backup and restore process from start to finish:

https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-gitlab

GitLab CI is a game changer.
Gitlab is like Circle CI 2.0 only not black box.
GitLab CI is extendable to any workflow
but you should keep it simple, learn to use the tool as intended, and rethink legacy workflows rather than port.



Want comments on your site?

Remarkbox — is a free SaaS comment service which embeds into your pages to keep the conversation in the same place as your content. It works everywhere, even static HTML sites like this one!

uncloseai.js example for static sites


Remarks: Vertically Scaling GitLab Server For As Cheap As Possible

© Russell Ballestrini.