Building your own PaaS

In this series, I’ll go through installing, using and extending Openshift Origin, a Platform as a Service (PaaS), developed by RedHat. Check it out at

What is Openshift?

In short, Openshift consists of two things: A broker, and a node. (or two brokers for redundancy and hundred nodes for scaling) Each can run on whatever; baremetal, vmware, ec2…..

The management is done on the brokers. It controls the automation and orchestration of the nodes.

The user created applications runs on the nodes. You can install broker and node on the same host, but I wouldn’t recommend it as You’ll get in trouble if your node gets too much traffic.

On the nodes the applications are separated into “gears”. These are SElinux hardened containers which are given a set of hardware resources(ram,cpu,disk) though linux cgroups.

Entry image

Inside these gears are a set of predefined “cartridges” containing for example a runtime language(php,js,ruby,..) a database (mysql/postgres,..) or a preconfigured application like phpmyadmin.

So when your create your app, you’re given all you need. Select the cartridges you need, and a hostname, git repo and somewhere to run it is at your disposal.

Then everything automated through Openshift. If you want Continuous Integration on your code,just install the jenkins cartridge and and a few seconds later its good to go. If you need your app to scale, add the -s flag, and will automatically scale with haproxy.

Note: Ive only tested it on Fedora 19 and Centos 6.5, anything else, good luck 🙂

Installing openshift can be really easy, thanks to oo-install.

Prerequisites for installation are:

puppet, unzip, curl and ruby. On the broker you’ll need bind and httpd as well.

selinux must be running in Enforcing or Permissive mode.

If installing on RHEL/Centos 6 you’ll need EPEL and ruby193SCL too:

$ wget

$ rpm -Uvh epel-release-6*.rpm

$ cat > /etc/yum.repos.d/openshift-origin-deps.repo <<“EOF”


name=OpenShift Origin Dependencies – EL6




Create passwordless ssh-keys for a user with passwordless sudo(or root) to all the hosts you want to install, and you’re good to go installing the easy way:

sh <(curl -s

The installer is pretty much self explaining. During the install, you’ll need to figure out which domain you want for your apps, ie “”

After the installation of the broker and node(s) a few things needs to be done

DNS: On your existing nameserver, add a NS record for your apps domain created earlier, pointing to the broker ie NS

Broker: set CLOUD_DOMAIN to your apps domain in /etc/openshift/broker.conf. In the same file, you might also want to add more valid gearsizes, as “small” is the only valid by default.

Reboot when done

Nodes: Check out which cartridges were installed, and install the ones you feel is missing:

yum list openshift-origin-cartridge*

Other dependencies i’ve found over time (when deployng ruby apps) is libuv and http-parser

yum install libuv http-parser

Also, check if the env is set correctly according to your setup in /etc/openshift/ENV/*

Reboot when done.

As you can’t move a gear from one node to another, I prefer to split up my different nodes into “districts”. A district can contain several nodes, I prefer having nodes of the same hw type in one district, like all nodes with ssd in one district and slower disks in another district.

This can be done like this, creating a district by the name ssd_district and only allowing small gears on it:

oo-admin-ctl-district -c create -n ssd_district -p small

add the node called node1

oo-admin-ctl-district -c add-node -n ssd_district -i

You can then move the gears from one district to another district. should now be up and running, ready for deployment of all your awesome appliactions.

My next post will be about deploying apps to openshift.


Published 2014-01-22