It's getting to the point where I have more server resources than I know what to do with. Because of this, I have been looking for more and more services I can self-host. My recent project has involved setting up a GitLab instance, which is an awesome way to get going with self hosted Git repositories.
GitLab is a fantastic completely open source alternative to something like GitHub. Although many base features are shared between the two platforms, GitLab does contain some additional functionality and customization. One of these additional features is the fact that GitLab can be self-hosted with their CE (Free) or EE releases.

Getting started was very straightforward with their Omnibus package by following their OS specific guide found here. Once installed, you will spend most of your time configuring the installation settings inside the gitlab.rb
file located in the /etc/gitlab
folder. The file is well documented with the configuration options and it is very easy to get going. It should be noted that after you modify that file, you will want to run #gitlab-ctl reconfigure
to apply your changes.
And that's it! Sort of... If you are planning on running your GitLab instance behind a reverse proxy that also handles SSL, there are a few settings you are going to want to pay attention to:
Property | Value | Notes |
---|---|---|
external_url |
'https://gitlab.mydomain.com' |
GitLab to only accept URLs starting with https:// |
nginx['listen_port'] |
80 |
Make sure the GitLab Nginx server listens on port 80 exclusively |
nginx['listen_https'] |
false |
Prevent the GitLab Nginx server from listening to https requests |
pages_external_url |
"https://gitlab.mydomain.com" |
Specify the URL that repository-specific pages should be accessed through |
pages_nginx['listen_port'] |
80 |
Set the GitLab Pages Nginx server to listen on port 80 exclusively |
pages_nginx['listen_https'] |
false |
Prevent the GitLab Pages Nginx server from listening to https requests |
registry_external_url |
'https://gitlab.mydomain.com' |
Specify the URL that the Nginx Registry should be accessed through (Not sure if this is 100% necessary or not) |
registry_nginx['listen_port'] |
80 |
Set the Nginx Registry server to listen on port 80 exclusively (Not sure if this is 100% necessary or not) |
registry_nginx['listen_https'] |
false |
Prevent the Nginx Registry server from listening to https requests |
Once up and running, GitLab has many customization and configuration options that are well worth exploring.
From here on out, any projects or code I am working on will be hosted on both GitHub and GitLab. I may eventually move everything over to GitLab, but that is another project for another day.