Understanding the anatomy of GitLab
GitLab is a complex system; it has a lot of moving parts. It's very useful to understand the architecture of GitLab.
At the core of GitLab is the GitLab web app. This is what you see and use everyday. This web app is built upon the Ruby on Rails framework. The database it connects to depends on your configuration, but GitLab advises you to use PostgreSQL.
GitLab is not directly connected to the Web, but it needs an app server and a web server to connect to the outside world. For the app server, Unicorn is used. For the web server, GitLab uses either Nginx or Apache; the GitLab team advises you to use Nginx.
There are a lot of things that need to run in the background. For example, when you push a commit to GitLab, it needs to check whether you referenced an issue or a merge request, and if you did, GitLab needs to create a comment on that item. In order to make all of this work, GitLab uses a background worker called Sidekiq; every item that needs to...