Gitlab Installation Using an External Database

Introduction

This post highlights how to install Gitlab while using an external PostgreSQL database. While Gitlab comes with a prepackaged installation of PostgreSQL, it is convenient to manage and use an existing database outside of the local hosts system.

Background

I was attempting to install Gitlab on a Proxmox virtualized container. I ran into major issues with the maintained packages in the Ubuntu and Debian repositories. The package in the Debian based repositories utilizes dbconfig to create and manage the database. No matter how I set the configuration during installation, I noticed that dbconfig would always default back to using the local database and fail with the following error:

psql: FATAL: database "gitlab_production" does not exist

Save yourself the trouble and install Gitlab using the official Omnibus installation method.

Installation

Follow the standard Omnibus installation guide up until the point of performing the gitlab-ctl reconfigure. At this point, create a database superuser on the external database to use for gitlab:

createuser -s gitlab

On the gitlab host, edit /etc/gitlab/gitlab.rb and set the following:

postgresql['enable'] = false
gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = "unicode"
gitlab_rails['db_database'] = "gitlab_production"
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "password"
gitlab_rails['db_host'] = "ip_address"

These settings disable the prepackaged Postgres database, and configures the Gitlab to use the external database. Now you can continue the installation by issueing gitlab-ctl reconfigure and gitlab-rake gitlab:setup to seed the external database.