= Gerrit Code Review - J2EE Installation

== Description

Gerrit binary distributions include a standalone Jetty servlet
container, but are packaged as a standard WAR file to permit easy
deployment to other existing container installations if using the
standalone daemon is not desired.

Gerrit Code Review can be installed into any J2EE servlet container,
including popular open source containers such as Jetty or Tomcat, or
any commercial server which supports the J2EE servlet specification.


== Installation

* Complete the link:install.html#init[site initialization] task
  described in the standard installation documentation.

* Stop the embedded daemon that was automatically started by 'init':
+
----
  review_site/bin/gerrit.sh stop
----

* Deploy the 'gerrit.war' file to your application server.
+
The deployment process differs between servers, but typically this
can be accomplished by copying 'gerrit.war' into the 'webapps/'
subdirectory of the container's installation.

* ('Optional') Install Bouncy Castle Crypto API
+
If you enabled Bouncy Castle Crypto during 'init', copy the JAR
from `'$site_path'/lib` into your servlet container's extensions
directory so it's available to Gerrit Code Review.

* ('Optional') link:config-auto-site-initialization.html[
Configure Automatic Site Initialization on Startup]


== Jetty 7.x
These directions will configure Gerrit as the default web
application, allowing URLs like `http://example.com/4543` to jump
directly to change 4543.

Download and unzip a release version of Jetty.  From here on we
call the unpacked directory `$JETTY_HOME`.

* link:http://www.eclipse.org/jetty/downloads.php[Jetty Downloads]

If this is a fresh installation of Jetty, move into the installation
directory and do some cleanup to remove the sample webapps:
----
  cd $JETTY_HOME
  rm -rf contexts/* webapps/*
----

Copy Gerrit Code Review into the deployment:
----
  cp ~/gerrit.war webapps/gerrit.war
  java -jar webapps/gerrit.war cat extra/jetty7/gerrit.xml >contexts/gerrit.xml
----

Edit `'$JETTY_HOME'/contexts/gerrit.xml` to correctly configure
outgoing SMTP connections.

If OpenID authentication (or certain enterprise single-sign-on
solutions) is being used, you may need to increase the
header buffer size parameter, due to very long header lines
being used by the OpenID authentication handshake process.
Add the following to `'$JETTY_HOME'/etc/jetty.xml` under
`org.eclipse.jetty.server.nio.SelectChannelConnector`:

----
  <Set name="headerBufferSize">16384</Set>
----

To start automatically when the system boots, create a start
script and modify it for your configuration:

----
  java -jar webapps/gerrit.war --cat extra/jetty7/gerrit-jetty.sh >/etc/init.d/gerrit-jetty
  vi /etc/init.d/gerrit-jetty
----

[TIP]
Under Jetty, restarting the web application is as simple as
touching the context config file: `'$JETTY_HOME'/contexts/gerrit.xml`

[[tomcat]]
== Tomcat 7.x

If a reverse proxy is used in front of Tomcat then see the
link:config-reverseproxy.html[configuration instructions for encoding
slashes]. Otherwise Tomcat must be configured to encode slashes, by adding
`-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true` to the
`CATALINA_OPTS` environment variable.

Excerpt from the
link:https://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html[
documentation]:

----
Property org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:
If this is true '%2F' and '%5C' will be permitted as path delimiters.
If not specified, the default value of false will be used.
----

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

SEARCHBOX
---------
