:linkattrs:
= Gerrit Code Review - Standalone Daemon Installation Guide

[[prerequisites]]
== Prerequisites

To run the Gerrit service, the following requirement must be met on the host:

* JRE, version 21 https://www.oracle.com/java/technologies/downloads/?er=221886[Download,role=external,window=_blank]

[[download]]
== Download Gerrit

Current and past binary releases of Gerrit can be obtained from
the link:https://gerrit-releases.storage.googleapis.com/index.html[
Gerrit Releases site,role=external,window=_blank].

Download any current `*.war` package. The war will be referred to as
`gerrit.war` from this point forward, so you may find it easier to
rename the downloaded file.

If you would prefer to build Gerrit directly from source, review
the notes under link:dev-readme.html[developer setup].

[[init]]
== Initialize the Site

Gerrit stores configuration files, the server's SSH keys, and the
managed Git repositories under a local directory, typically referred
to as `'$site_path'`.

You also have to decide where to store your server side git repositories. This
can either be a relative path under `'$site_path'` or an absolute path
anywhere on your server system. You have to choose a place before commencing
your init phase.

Initialize a new site directory by running the init command, passing
the path of the site directory to be created as an argument to the
'-d' option.  Its recommended that Gerrit Code Review be given its
own user account on the host system:

----
  sudo adduser gerrit
  sudo su gerrit

  java -jar gerrit.war init -d /path/to/your/gerrit_application_directory
----

[NOTE]
If you choose a location where your new user doesn't
have any privileges, you may have to manually create the directory first and
then give ownership of that location to the `'gerrit'` user.

If run from an interactive terminal, the init command will prompt through a
series of configuration questions.  If the terminal is not interactive,
running the init command will choose some reasonable default selections.
Once the init phase is complete, you can review your settings in the file
`'$site_path/etc/gerrit.config'`.

When running the init command, additional JARs might be downloaded to
support optional selected functionality.  If a download fails a URL will
be displayed and init will wait for the user to manually download the JAR
and store it in the target location.

When the init phase is complete, the daemon will be automatically started
in the background and your web browser will open to the site:

----
  Initialized /home/gerrit/review_site
  Executing /home/gerrit/review_site/bin/gerrit.sh start
  Starting Gerrit Code Review: OK
  Waiting for server to start ... OK
  Opening browser ...
----

When the browser opens, sign in to Gerrit through the web interface.
The first user to sign-in and register an account will be
automatically placed into the fully privileged Administrators group,
permitting server management over the web and over SSH.  Subsequent
users will be automatically registered as unprivileged users.


== Installation Complete

Your base Gerrit server is now installed and running.  You're now ready to
either set up more projects or start working with the projects you've already
imported.


[[project_setup]]
== Project Setup

See link:project-configuration.html[Project Configuration] for further details on
how to register a new project with Gerrit.  This step is necessary
if existing Git repositories were not imported during 'init'.


[[rc_d]]
== Start/Stop Daemon

To control the Gerrit Code Review daemon that is running in the
background, use the rc.d style start script created by 'init':

----
  review_site/bin/gerrit.sh start
  review_site/bin/gerrit.sh stop
  review_site/bin/gerrit.sh restart
----

('Optional') Configure the daemon to automatically start and stop
with the operating system.

Uncomment the following 3 lines in the `'$site_path/bin/gerrit.sh'`
script:

----
 chkconfig: 3 99 99
 description: Gerrit Code Review
 processname: gerrit
----

Then link the `gerrit.sh` script into `rc3.d`:

----
  sudo ln -snf `pwd`/review_site/bin/gerrit.sh /etc/init.d/gerrit
  sudo ln -snf /etc/init.d/gerrit /etc/rc3.d/S90gerrit
----

('Optional') To enable autocompletion of the gerrit.sh commands, install
autocompletion from the `/contrib/bash_completion` script.  Refer to the
script's header comments for installation instructions.

To install Gerrit into an existing servlet container instead of using
the embedded Jetty server, see
link:install-j2ee.html[J2EE installation].

[[installation_on_windows]]
== Installation on Windows

The `ssh-keygen` command must be available during the init phase to
generate SSH host keys. If you have
link:https://git-for-windows.github.io/[Git for Windows,role=external,window=_blank] installed,
start Command Prompt and temporary add directory with ssh-keygen to the
PATH environment variable just before running init command:

====
  PATH=%PATH%;c:\Program Files\Git\usr\bin
====

Please note that the path in the above example must not be
double-quoted.

To run the daemon after site initialization execute:

====
  cd C:\MY\GERRIT\SITE
  java.exe -jar bin\gerrit.war daemon --console-log
====

To stop the daemon press Ctrl+C.

=== Install the daemon as Windows Service

To install Gerrit as Windows Service use the
link:http://commons.apache.org/proper/commons-daemon/procrun.html[Apache
Commons Daemon Procrun,role=external,window=_blank].

Sample install command:

====
  prunsrv.exe //IS//Gerrit --DisplayName="Gerrit Code Review" --Startup=auto ^
        --Jvm="C:\Program Files\Java\jre1.8.0_65\bin\server\jvm.dll" ^
        --Classpath=C:\MY\GERRIT\SITE\bin\gerrit.war ^
        --LogPath=C:\MY\GERRIT\SITE\logs ^
        --StartPath=C:\MY\GERRIT\SITE ^
        --StartMode=jvm --StopMode=jvm ^
        --StartClass=com.google.gerrit.launcher.GerritLauncher --StartMethod=daemonStart ^
        --StopClass=com.google.gerrit.launcher.GerritLauncher --StopMethod=daemonStop
====

**NOTE**: Windows is not recommended as a server-side platform for
running Gerrit Code Review, because of the lack of adoption from the Gerrit Community,
incomplete functional validation and lack of security testing. Gerrit on
Windows Server is not actively supported even though it may still be
fully or partially functioning as expected.

[[customize]]
== Site Customization

Gerrit Code Review supports some site-specific customization options.
For more information, see the related topics in this manual:

* link:config-reverseproxy.html[Reverse Proxy]
* link:config-sso.html[Single Sign-On Systems]
* link:config-themes.html[Themes]
* link:config-gitweb.html[Gitweb Integration]
* link:config-gerrit.html[Other System Settings]
* link:config-auto-site-initialization.html[Automatic Site Initialization on Startup]


[[anonymous_access]]
== Anonymous Access

Exporting the Git repository directory
(link:config-gerrit.html#gerrit.basePath[gerrit.basePath]) over the
anonymous, unencrypted git:// protocol is more efficient than
Gerrit's internal SSH daemon.  See the `git-daemon` documentation
for details on how to configure this if anonymous access is desired.

* http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html[man git-daemon,role=external,window=_blank]


[[plugins]]
== Plugins

Place Gerrit plugins in the review_site/plugins directory to have them loaded on Gerrit startup.


== External Documentation Links

* http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html[git-daemon,role=external,window=_blank]


[[backup]]
== Backup

See the link:backup.html[backup documentation].

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

SEARCHBOX
---------
