Edit Page

Configuration

Update the admin password!

At first startup, RESTHeart initializes the user admin, with the default password secret. This user can execute any request.

Warning
YOU MUST UPDATE THE DEFAULT PASSWORD! The role admin can execute any request as it is set as the root role in the mongoAclAuthorizer configuration.

To update it, run the following command:

$ curl -u admin:secret -X PATCH localhost:8080/users/admin -H "Content-Type: application/json" -d '{ "password": "my-strong-password" }'

Refer to User Management for more information on how to create new users, roles and permissions.

Default configuration

RESTHeart has a default configuration and specifying a configuration file is not required.

The following command runs RESTHeart with the default configuration.

$ java -jar restheart.jar

The following command prints the default configuration to the console.

$ java -jar restheart.jar -t

Configuration file

RESTHeart can also use a configuration file:

$ java -jar restheart.jar -t 2> restheart.yml # generate a configuration file with default values
$ java -jar restheart.jar restheart.yml
Note
The default configuration is fine most of the times. You just want to change few options and the suggested way is using the default configuration with the needed overrides.

Modify the configuration with the RHO env var

The environment variable RHO allows to modify and add any configuration option.

An example is:

$ RHO='/mclient/connection-string->"mongodb://127.0.0.1";/mongo/mongo-mounts[1]/where->"/api"' java -jar restheart.jar

or even:

$ RHO='/mclient/connection-string->"mongodb://127.0.0.1";/mongo/mongo-mounts[1]->{"where: "/api", "what": "mydb"}' java -jar restheart.jar

The following command with the -c option, prints the effective configuration, i.e. the default configuration with the RHO overrides applied.

$ RHO='/core/name->"***** test *****"' java -jar restheart.jar -c

INFO o.r.configuration.Configuration - Overriding configuration parameters from RHO environment variable:
INFO o.r.configuration.Configuration - /core/name -> ***** test *****

core: {name: '***** test *****', plugins-directory: plugins, base-url: null, io-threads: 0,
  worker-threads: -1, requests-limit: 1000, buffer-size: 16364, direct-buffers: true,
  force-gzip-encoding: false, allow-unescaped-characters-in-url: true}

The format is:

<xpath expression> -> JSON

The <xpath expression> selects the option to override or add.

So valid overrides are:

/core/name -> "production"
/mongo/mongo-mounts[1] -> {"where": "/api", "what": "mydb"}
/core/io-threads -> 8

The following are invalid:

/core/name -> production                     # missing quotes in JSON value
/mongo/mongo-mounts[1] -> {"where: "/api"    # invalid JSON object
core/io-threads -> 8                         # xpath expression does not start with /

Modify the configuration with an override file

A configuration override file can be specified with the -o option to modify the default configuration.

$ java -jar restheart.jar -o conf-overrides.conf
Tip
the Example configuration files directory in the RESTHeart repository contains some examples in the different formats.

The override file can use four formats, .conf, .yml and .json, .jsonc (Json with comments).

Example override file in .conf format

This uses the same format than RHO` env variable:

/core/name -> "default";
/http-listener -> {
    "enabled": true,
    "host": "localhost",
    "port": 8080
};

Example override file in .jsonc format

JSON format, with keys as xpath expressions to select the options to override or add.

{
    "/core/name": "default",
    "/http-listener": {
        "enabled": true,
        "host": "localhost",
        "port": 8080
    }
}

Example override file in .yml format

YML format, with keys as xpath expressions to select the options to override or add.

/core/name: default
/http-listener:
  enabled: true
  host: "localhost"
  port: 8080

Change the configuration in Docker container

The configuration of RESTHeart running in a Docker container can be modified in three ways.

1 - Using the RHO env variable

The following example uses the option -e RHO="…​" to override the configuration parameters /mclient/connection-string and /core/name.

$ docker run --rm  -p "8080:8080" -e RHO="/http-listener/host->'0.0.0.0';/mclient/connection-string->'mongodb://host.docker.internal';/core/name->'the-best-api-ever'" softinstigate/restheart

INFO  o.r.configuration.Configuration - Overriding configuration parameters from RHO environment variable:
INFO  o.r.configuration.Configuration - 	/http-listener/host -> 0.0.0.0
INFO  o.r.configuration.Configuration - 	/mclient/connection-string -> mongodb://host.docker.internal
INFO  o.r.configuration.Configuration - 	/core/name -> the-best-api-ever
.....
Note
the RESTHeart Docker container defines the following RHO variable:
ENV RHO='/mclient/connection-string->"mongodb://host.docker.internal";/http-listener/host->"0.0.0.0"'

When defining your RHO variable always set /http-listener/host→"0.0.0.0" and your /mclient/connection-string.

2 - Using a configuration override file

$ docker run --rm  -p "8080:8080" -e RHO="" -v /path/to/conf-overrides.conf:/opt/restheart/etc/conf-overrides.conf softinstigate/restheart -o etc/conf-overrides.conf

This mounts the host file /path/to/conf-overrides.conf into the container directory /opt/restheart/etc and executes RESTHeart with the -o option pointing to that file.

Warning
RESTHeart Docker image defines the following RHO environment variable which has precedence over the configuration override file. To avoid the RHO of the Docker image to apply, you can add -e RHO="" to the docker run command.
ENV RHO='/mclient/connection-string->"mongodb://host.docker.internal";/http-listener/host->"0.0.0.0"'

To avoid this, just can add -e RHO="" to your docker run command.

3 - Using a configuration file

The following commands add a configuration file to the container:

$ # generate the default configuration file in /tmp/restheart.yml (and edit it)
$ docker run --rm -p 8080:8080 -v /tmp/restheart.yml:/opt/restheart/etc/restheart.yml softinstigate/restheart -t 2> /tmp/restheart.yml

$ # run the RESTHeart container mounting the conf file as a volume
$ docker run --rm -p 8080:8080 -v /tmp/restheart.yml:/opt/restheart/etc/restheart.yml softinstigate/restheart etc/restheart.yml
Warning
the RESTHeart Docker image defines the following RHO variable which will override the parameters in your configuration file:
ENV RHO='/mclient/connection-string->"mongodb://host.docker.internal";/http-listener/host->"0.0.0.0"'

To avoid this, just can add -e RHO="" to your docker run command:

# generate a configuration file
$ docker run --rm -p 8080:8080  softinstigate/restheart -c 2> /tmp/restheart.yml
# run restheart with it
$ docker run --rm -p 8080:8080 -e RHO="" -v /tmp/restheart.yml:/opt/restheart/etc/restheart.yml softinstigate/restheart etc/restheart.yml