Configuring Nexus Repository Pro for H2 or PostgreSQL
Only available in Nexus Repository Pro. Interested in a free trial? Start here.
If you're standing up a new instance of Nexus Repository Pro and wish to begin in a new database mode, follow these instructions:
Installing Nexus Repository Pro
- Download the latest Nexus Repository 3 version
- Expand and install the archive as with the standard installation instructions
- Follow the instructions for your chosen database
Configuring for the Embedded H2
Create the <data-dir>/etc/nexus.properties
file and add the following line:
nexus.datastore.enabled=true
You can now start your Nexus Repository instance and use an embedded H2 database.
Configuring for External PostgreSQL (Preferred)
Before proceeding, see the Additional System Requirements for PostgreSQL and ensure you have the required trigram module installed.
To use an external PostgreSQL database, follow these additional instructions:
Create a database in a PostgreSQL server
When creating your database, ensure it is set to use UTF8 as its character set in order to be compatible with Nexus Repository's character set. For more information, see the PostgreSQL documentation on setting your character set.
Create the
<data-dir>/etc/nexus.properties
file. Add a property to enable external database access:
nexus.datastore.enabled=true
On first run only, add the following line, replacing the placeholders with the appropriate filepath to point to your valid Pro license:
nexus.licenseFile=/path/to/your/sonatype-license.lic
- Create a
<data-dir>/etc/fabric
directory In the
<data-dir>/etc/fabric
directory, create a text file namednexus-store.properties
Below is a sample
nexus-store.properties
that you will need to update with the appropriate configuration.username=<postgres_user> password=<postgres_password> jdbcUrl=jdbc\:postgresql\://<database-host>\:<database-port>/<database-name>
Note that the JDBC URL format outside of the
nexus-store.properties
is in the following format (without the backslashes in thenexus-store.properties
file):jdbc:postgresql://<database-host>:<database-port>/<database-name>
If using AWS Aurora as your database, you will need to includegssEncMode=disable
as a query parameter of the JDBC URL.Note that you can also use the following JVM arguments to specify connection information; you can also specify these in the
sonatype-work/nexus3/etc/nexus.properties
file without the preceding-D
:- -Dnexus.datastore.enabled
- -Dnexus.datastore.nexus.jdbcUrl
- -Dnexus.datastore.nexus.username
- -Dnexus.datastore.nexus.password
- You can also pass the following connectivity details as environment variables:
NEXUS_DATASTORE_NEXUS_JDBCURL
NEXUS_DATASTORE_NEXUS_USERNAME
NEXUS_DATASTORE_NEXUS_PASSWORD
Priority Order
As of release 3.53.0, you must provide all required fields through the same mechanism. Sonatype Nexus Repository will use the first of the following mechanisms that it encounters and will ignore the others (e.g., if you use environment variables, Sonatype Nexus Repository will ignore the system properties and nexus-store.properties file. Changes made through environment variables and system properties are not written to the nexus-store.properties file). This is evaluated each time you start Sonatype Nexus Repository. The priority order is as follows:
- Environment variables
- System Properties
sonatype-work/nexus3/etc/fabric/nexus-store.properties
You can now start your Nexus Repository instance and use a PostgreSQL database.
Extra Configuration Options for PostgreSQL
Servers under heavy load may also need to configure the connection pool size for the database. Nexus Repository uses a default pool of 100, but you may increase this by appending a line like the following example to nexus-store.properties
:
username=<postgres_user> password=<postgres_password> jdbcUrl=jdbc\:postgresql\://<database-host>\:<database-port>/<database-name> advanced=maximumPoolSize\=200
If you use a container orchestration tool, relational database service, or other infrastructure to launch Nexus Repository, you should configure your maxLifetime
for database connections.
Ensure your maxLifetime
is set to be several seconds shorter than your infrastructure-imposed connection time limit.
By default, maxLifetime
is set to 30 minutes (1800000ms), but you may change this by appending a line like the following example to your nexus-store.properties
file:
username=<postgres_user> password=<postgres_password> jdbcUrl=jdbc\:postgresql\://<database-host>\:<database-port>/<database-name> advanced=maxLifetime\=840000
How Does Nexus Repository Pro Determine Which Database To Use
If you've omitted nexus.datastore.enabled
or set it to false
, then Nexus Repository will use OrientDB.
If you've configured nexus.datastore.enabled=true
, then Nexus Repository determines which database it is meant to use based on the configuration source.
Nexus Repository Pro will look for configuration information from <data-dir>/etc/fabric/
nexus-store.properties
before falling back to the embedded database, which is H2.