diff --git a/docs/man/soledad-server.1.rst b/docs/man/soledad-server.1.rst
index 3d37a8d2f9cb8fded6194801e46055ee38124dd1..e40e9a63bde37c120ca3f1227fcfc4dd93ac3b44 100644
--- a/docs/man/soledad-server.1.rst
+++ b/docs/man/soledad-server.1.rst
@@ -61,6 +61,9 @@ SOLEDAD_SERVER_CONFIG_FILE
   Load configuration from this file instead of using the default one
   (*/etc/soledad/soledad-server.conf*).
 
+SOLEDAD_COUCH_URL
+  If set, use this URL for accessing couchdb (overrides the configuration file).
+
 SOLEDAD_HTTP_PERSIST
   If set, persist HTTP connections.
 
diff --git a/docs/reference/environment_variables.rst b/docs/reference/environment_variables.rst
index bfd155ee53115c68dbbea23b761c0eb004f6e8a1..321c925cf31767402b0e967347ff04d109e643b5 100644
--- a/docs/reference/environment_variables.rst
+++ b/docs/reference/environment_variables.rst
@@ -6,6 +6,7 @@ Some environment variables affect the behaviour of Soledad:
 ============================== =============== =================================
 variable                       affects         description
 ============================== =============== =================================
+``SOLEDAD_COUCH_URL``          server          override the CouchDB url.
 ``SOLEDAD_HTTP_PERSIST``       client          persist HTTP connections.
 ``SOLEDAD_USE_PYTHON_LOGGING`` client / server use python logging instead of
                                                twisted's logger.
diff --git a/src/leap/soledad/server/_config.py b/src/leap/soledad/server/_config.py
index 0d37879eab5e3eb553975a8bc0aaf6b978fce703..7fa01b381ca2ffe5a8ff20de3aef36af349d94b6 100644
--- a/src/leap/soledad/server/_config.py
+++ b/src/leap/soledad/server/_config.py
@@ -19,9 +19,13 @@
 import configparser
 import os
 
+from twisted.logger import Logger
+
 
 __all__ = ['get_config']
 
+logger = Logger()
+
 # make sure to update documentation if this default is changed.
 DEFAULT_CONFIG_FILE = '/etc/soledad/soledad-server.conf'
 CONFIG_DEFAULTS = {
@@ -44,45 +48,55 @@ CONFIG_DEFAULTS = {
 }
 
 
-_config = None
-
-
-def get_config(section='soledad-server'):
-    global _config
-    if not _config:
-        fname = os.environ.get(
-            'SOLEDAD_SERVER_CONFIG_FILE', DEFAULT_CONFIG_FILE)
-        _config = _load_config(fname)
-    return _config[section]
-
-
-def _load_config(file_path):
-    """
-    Load server configuration from file.
-
-    @param file_path: The path to the configuration file.
-    @type file_path: str
-
-    @return: A dictionary with the configuration.
-    @rtype: dict
-    """
+def _load_from_file(file_path):
+    logger.info('Loading configuration from %s' % file_path)
     conf = dict(CONFIG_DEFAULTS)
-    config = configparser.SafeConfigParser()
-    config.read(file_path)
+    parsed = configparser.SafeConfigParser()
+    parsed.read(file_path)
     for section in conf:
-        if not config.has_section(section):
+        if not parsed.has_section(section):
             continue
         for key, value in conf[section].items():
-            if not config.has_option(section, key):
+            if not parsed.has_option(section, key):
                 continue
             elif type(value) == bool:
-                conf[section][key] = config.getboolean(section, key)
+                conf[section][key] = parsed.getboolean(section, key)
             elif type(value) == list:
-                values = config.get(section, key).split(',')
+                values = parsed.get(section, key).split(',')
                 values = [v.strip() for v in values]
                 conf[section][key] = values
             else:
-                conf[section][key] = config.get(section, key)
+                conf[section][key] = parsed.get(section, key)
     # TODO: implement basic parsing/sanitization of options comming from
-    # config file.
+    # parsed file.
+    return conf
+
+
+def _reflect_environment(conf):
+    from_environment = ['couch_url']
+    for option in from_environment:
+        name = 'SOLEDAD_%s' % option.upper()
+        value = os.environ.get(name)
+        if value:
+            logger.info('Using %s=%s because of %s environment variable.'
+                        % (option, value, name))
+            conf['soledad-server'][option] = value
     return conf
+
+
+def _load_config(file_path):
+    conf = _load_from_file(file_path)
+    conf = _reflect_environment(conf)
+    return conf
+
+
+_config = None
+
+
+def get_config(section='soledad-server'):
+    global _config
+    if not _config:
+        fname = os.environ.get(
+            'SOLEDAD_SERVER_CONFIG_FILE', DEFAULT_CONFIG_FILE)
+        _config = _load_config(fname)
+    return _config[section]
diff --git a/tests/server/test_config.py b/tests/server/test_config.py
index 92b0f67f2fcc0b26ebdc3b15f4704bf4cf0b6e7b..b21efbbec1acdb16822b4e1cdda3ad26c63c9973 100644
--- a/tests/server/test_config.py
+++ b/tests/server/test_config.py
@@ -22,6 +22,7 @@ from twisted.trial import unittest
 from pkg_resources import resource_filename
 
 from leap.soledad.server._config import _load_config
+from leap.soledad.server._config import _reflect_environment
 from leap.soledad.server._config import CONFIG_DEFAULTS
 
 
@@ -32,7 +33,7 @@ class ConfigurationParsingTest(unittest.TestCase):
 
     def test_use_defaults_on_failure(self):
         config = _load_config('this file will never exist')
-        expected = CONFIG_DEFAULTS
+        expected = _reflect_environment(CONFIG_DEFAULTS)
         self.assertEquals(expected, config)
 
     def test_security_values_configuration(self):
@@ -57,15 +58,18 @@ class ConfigurationParsingTest(unittest.TestCase):
         config = _load_config(config_path)
 
         # then
-        expected = {'couch_url':
-                    'http://soledad:passwd@localhost:5984',
-                    'create_cmd':
-                    'sudo -u soledad-admin /usr/bin/soledad-create-userdb',
-                    'admin_netrc':
-                    '/etc/couchdb/couchdb-soledad-admin.netrc',
-                    'batching': False,
-                    'blobs': False,
-                    'services_tokens_file': '/etc/soledad/services.tokens',
-                    'blobs_path': '/var/lib/soledad/blobs',
-                    'concurrent_blob_writes': 50}
-        self.assertDictEqual(expected, config['soledad-server'])
+        expected = {
+            'couch_url': 'http://soledad:passwd@localhost:5984',
+            'create_cmd':
+                'sudo -u soledad-admin /usr/bin/soledad-create-userdb',
+            'admin_netrc': '/etc/couchdb/couchdb-soledad-admin.netrc',
+            'batching': False,
+            'blobs': False,
+            'services_tokens_file': '/etc/soledad/services.tokens',
+            'blobs_path': '/var/lib/soledad/blobs',
+            'concurrent_blob_writes': 50
+        }
+        expected = _reflect_environment({'soledad-server': expected})
+        self.assertDictEqual(
+            expected['soledad-server'],
+            config['soledad-server'])