= Gerrit Code Review - Automatic Site Initialization on Startup

== Description

Gerrit supports automatic site initialization on server startup
when Gerrit runs in a servlet container. Both creation of a new site
and upgrade of an existing site are supported. By default, all packaged
plugins will be installed when Gerrit is deployed in a servlet container
and the location of the Gerrit distribution can be determined at
runtime. It is also possible to install only a subset of packaged
plugins or not install any plugins.

This feature may be useful for such setups where Gerrit administrators
don't have direct access to the database and the file system of the
server where Gerrit should be deployed and, therefore, cannot perform
the init from their local machine prior to deploying Gerrit on such a
server. It may also make deployment and testing in a local servlet
container faster to set up as the init step could be skipped.

== Gerrit Configuration

The site initialization will be performed only if the `gerrit.init`
system property exists. The value of the property is not used; only the
existence of the property matters.

If the `gerrit.site_path` system property is defined then the init is
run for that site. The database connectivity, in that case, is defined
in the `etc/gerrit.config`.

`gerrit.site_path` system property must be defined to run the init for
that site.

[WARNING]
Defining the `jdbc/ReviewDb` JNDI property for an H2 database under the
path defined by `gerrit.site_path` will cause an incomplete auto
initialization and Gerrit will fail to start.

Opening a connection to such a database will create a subfolder under the
site path folder (in order to create the H2 database) and Gerrit will
no longer consider that site path to be new and, because of that,
skip some required initialization steps (for example, Lucene index
creation). In order to auto initialize Gerrit with an embedded H2
database use the `gerrit.site_path` to define the location of the review
site and don't define a JNDI resource with a URL under that path.

If the `gerrit.install_plugins` property is not defined then all packaged
plugins will be installed. If it is defined then it is parsed as a
comma-separated list of plugin names to install. If the value is an
empty string then no plugin will be installed.

=== Example 1

Prepare Tomcat so that a site is initialized at a given path using
the H2 database (if the site doesn't exist yet) or using whatever
database is defined in `etc/gerrit.config` of that site:

----
  $ export CATALINA_OPTS='-Dgerrit.init -Dgerrit.site_path=/path/to/site'
  $ catalina.sh start
----

=== Example 2

Assuming the database schema doesn't exist in the database defined
via the `jdbc/ReviewDb` JNDI property, initialize a new site using that
database and a given path:

----
  $ export CATALINA_OPTS='-Dgerrit.init -Dgerrit.init_path=/path/to/site'
  $ catalina.sh start
----

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
