## Gitblit on RedHat's OpenShift Cloud Service

The Gitblit Express distribution can be copied to the root of your RedHat OpenShift
application repository.  Gitblit Express is an exploded WAR file with all appropriate
dependencies bundled.

You should delete the `pom.xml` file and the `src` folder from your application repository
as Gitblit Express is not a source distribution to be built with Maven on OpenShift.

Gitblit automatically adjusts itself to running on OpenShift.  Repositories, users,
federation proposals, setting overrides, and Groovy push scripts are stored in *OPENSHIFT_DATA_DIR*.

It is recommended to enable all RPC settings in the `web.xml` file to allow remote
administration and, more importantly, configuration of your Gitblit Express
installation using the Gitblit Manager.

It is also recommended to set *web.forwardSlashCharacter* to ! because OpenShift
runs on JBoss/Tomcat behind a proxy, neither of which are friendly to embedded
forward-slashes.

Please do not change the following settings unless you know exactly what you are
doing:

- *git.repositoriesFolder*
- *groovy.scriptsFolder*
- *federation.proposalsFolder*
- *realm.userService* (for standard users.conf)
 
Additionally, it is recommended to force your Gitblit installation to cleanup up
older versions on your OpenShift filesystem to maximize available space for your
repositories.

Append the following command to your ./openshift/action_hooks/build file:

    rm -fr $OPENSHIFT_APP_DIR/jbossas-7.0/standalone/tmp/vfs/*

Lastly, you may want to play with the heap and permgen settings of your Gitblit
instance because the default heap for the JVM is 95 MB, which may be a little
tight.

To do that you will have to login to your account via ssh:

    ssh hashcode@app-domain.rhcloud.com

and then you will have to manipulate the -Xmx and -XX:MaxPermSize values.

    vi $OPENSHIFT_APP_DIR/jbossas-7.0/bin/standalone.conf
    ctl_app restart

OpenShift currently allows 300MB of memory per application which includes ssh access, JVM, etc.
The Gitblit demo hosted on OpenShift Express operates with -Xmx160m and -XX:MaxPermSize=90m.

For more detailed instructions on how to setup and deploy an OpenShift application
please see this excellent turorial:

https://github.com/opensas/play-demo/wiki/Step-12.5---deploy-to-openshift
