diff --git a/.gitignore b/.gitignore
index 2a7e605a3504af72977c9a0b3fc47244de2998c5..1210ac3b44adb521d18a114725939af640821d8a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,4 @@ db/data.yml
 vendor/bundle/*
 rails_best_practices_output.html
 doc/code/*
+.secret
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
index 6d3a9f077879d2156a3e01df3cacabaa033808dd..16d1d4a9fdd0a41e16a4009c0e43eeb7dd0a14d7 100644
--- a/config/initializers/secret_token.rb
+++ b/config/initializers/secret_token.rb
@@ -1,7 +1,23 @@
 # Be sure to restart your server when you modify this file.
 
+require 'securerandom'
+
 # Your secret key for verifying the integrity of signed cookies.
 # If you change this key, all old signed cookies will become invalid!
 # Make sure the secret is at least 30 characters and all random,
 # no regular words or you'll be exposed to dictionary attacks.
-Gitlab::Application.config.secret_token = '0a38e9a40ca5d66d7002a6ade0ed0f8b71058c820163f66cf65d91521ab55255ff708b9909b138008a7f13d68fec575def1dc3ff7200cd72b065896315e0bed2'
+
+def find_secure_token
+  token_file = Rails.root.join('.secret')
+  if File.exist? token_file
+    # Use the existing token.
+    File.read(token_file).chomp
+  else
+    # Generate a new token of 64 random hexadecimal characters and store it in token_file.
+    token = SecureRandom.hex(64)
+    File.write(token_file, token)
+    token
+  end
+end
+
+Gitlab::Application.config.secret_token = find_secure_token