## 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*.

### Recommended Settings

You should disable the git daemon by setting *git.daemonPort=0*.

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)

### Native Git Failures

Unfortunately, sometime in early 2013 RedHat changed their SSL certificate such that cloning from/pushing to Gitblit Express over https fails due to an SNI (server name indication) TLS alert.  There is no known workaround for native git and https.

However, if your git client is JGit-based, like Eclipse/EGit, then you can workaround this problem and happily push/clone using https and OpenShift.

Luckily, Java 6-based clients ignore SNI alerts but when using Java 7-based clients, SNI checking is enabled by default.  You can disable SNI alerts by specifying the JVM system parameter `-Djsse.enableSNIExtension=false` when your Java-based client launches.

For Eclipse, you can append `-Djsse.enableSNIExtension=false` to your *eclipse.ini* file.

### Heap and PermGen

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:

[Deploying to OpenShift](https://github.com/opensas/play-demo/wiki/Step-12.5---deploy-to-openshift)
