diff --git a/nixos/modules/services/misc/gitlab.nix b/nixos/modules/services/misc/gitlab.nix
index df19efb55fd..33163d9789b 100644
--- a/nixos/modules/services/misc/gitlab.nix
+++ b/nixos/modules/services/misc/gitlab.nix
@@ -41,6 +41,11 @@ let
namespace: resque:gitlab
'';
+ secretsYml = ''
+ production:
+ db_key_base: ${cfg.secrets.db_key_base}
+ '';
+
gitlabConfig = {
# These are the default settings from config/gitlab.example.yml
production = flip recursiveUpdate cfg.extraConfig {
@@ -313,6 +318,19 @@ in {
};
};
+ secrets.db_key_base = mkOption {
+ type = types.str;
+ example = "";
+ description = ''
+ The db_key_base secrets is used to encrypt variables in the DB. If
+ you change or lose this key you will be unable to access variables
+ stored in database.
+
+ Make sure the secret is at least 30 characters and all random,
+ no regular words or you'll be exposed to dictionary attacks.
+ '';
+ };
+
extraConfig = mkOption {
type = types.attrs;
default = {};
@@ -467,6 +485,7 @@ in {
# JSON is a subset of YAML
ln -fs ${pkgs.writeText "gitlab.yml" (builtins.toJSON gitlabConfig)} ${cfg.statePath}/config/gitlab.yml
ln -fs ${pkgs.writeText "database.yml" databaseYml} ${cfg.statePath}/config/database.yml
+ ln -fs ${pkgs.writeText "secrets.yml" secretsYml} ${cfg.statePath}/config/secrets.yml
ln -fs ${pkgs.writeText "unicorn.rb" unicornConfig} ${cfg.statePath}/config/unicorn.rb
chown -R ${cfg.user}:${cfg.group} ${cfg.statePath}/
diff --git a/nixos/modules/services/misc/gitlab.xml b/nixos/modules/services/misc/gitlab.xml
index a8147b3a74f..83f715a50b4 100644
--- a/nixos/modules/services/misc/gitlab.xml
+++ b/nixos/modules/services/misc/gitlab.xml
@@ -62,6 +62,7 @@ services.gitlab = {
address = "localhost";
port = 25;
};
+ secrets.db_key_base = "ei3eeP1ohsh0uu3ad4YeeMeeheengah3AiZee2ohl4Ooj5mie4Ohl0vishoghaes";
extraConfig = {
gitlab = {
email_from = "gitlab-no-reply@example.com";
@@ -74,6 +75,12 @@ services.gitlab = {
+If you're setting up a new Gitlab instance, generate a new
+db_key_base secret to encrypt sensible data in the
+database. If you're restoring an existing Gitlab instance, you must
+specify the db_key_base secret from
+config/secrets.yml in your Gitlab state folder.
+
Refer to for all available configuration
options for the services.gitlab module.
diff --git a/pkgs/applications/version-management/gitlab/default.nix b/pkgs/applications/version-management/gitlab/default.nix
index 19ba21e9e76..453bae3613c 100644
--- a/pkgs/applications/version-management/gitlab/default.nix
+++ b/pkgs/applications/version-management/gitlab/default.nix
@@ -70,6 +70,7 @@ stdenv.mkDerivation rec {
SKIP_STORAGE_VALIDATION=true \
rake assets:precompile RAILS_ENV=production
mv config/gitlab.yml config/gitlab.yml.example
+ rm config/secrets.yml
mv config config.dist
'';