Managing platforms¶
A platform is a well defined pack with installed dependencies for a language or framework that a group of applications will need.
Installing the tsuru's platforms¶
Platforms are defined as Dockerfiles and tsuru already have a number of supported ones listed below:
These platforms don't come pre-installed in tsuru, you have to add them to your
server using the platform add
command.
For example, to install the Python platform from tsuru's platforms repository you simply have to call:
tsuru platform add python
If your application is not currently supported by the platforms above,
you can create a new platform. See :doc:creating a platform</managing/create-platform>
for more information.
Creating a platform from scratch¶
Overview¶
If you need a platform that's not already available in our platforms repository it's pretty easy to create a new one based on an existing one.
Platforms are Docker images that are used to deploy your application code on tsuru. tsuru provides a base image which platform developers can use to build upon: base-platform. This platform provides a base deployment script, which handles package downloading and extraction in proper path, along with operating system package management.
Every platform in the repository extends the base-platform adding the specifics of each platform. They are a great way to learn how to create a new one.
An example¶
Let's suppose we wanted to create a nodejs platform. First, let's define it's Dockerfile:
FROM tsuru/base-platform
ADD . /var/lib/tsuru/nodejs
RUN cp /var/lib/tsuru/nodejs/deploy /var/lib/tsuru
RUN /var/lib/tsuru/nodejs/install
In this file, we are extending the tsuru/base-platform
, adding our
deploy and install scripts to the right place: /var/lib/tsuru
.
The install script runs when we add or update the platform on tsuru. It's the perfect place to install dependencies that every application on it's platform needs:
#!/bin/bash -le
SOURCE_DIR=/var/lib/tsuru
source ${SOURCE_DIR}/base/rc/config
apt-get update
apt-get install git -y
git clone https://github.com/creationix/nvm.git /etc/nvm
cd /etc/nvm && git checkout `git describe --abbrev=0 --tags`
cat >> ${HOME}/.profile <<EOF
if [ -e ${HOME}/.nvm_bin ]; then
export PATH="${HOME}/.nvm_bin:$PATH"
fi
EOF
As it can be seen, we are just installing some dependencies and
preparing the environment for our applications. The
${SOURCE_DIR}/base/rc/config
provides some bootstrap configuration
that are usually needed.
Now, let's define our deploy script, which runs every time a deploy occurs:
#!/bin/bash -le
SOURCE_DIR=/var/lib/tsuru
source ${SOURCE_DIR}/base/rc/config
source ${SOURCE_DIR}/base/deploy
export NVM_DIR=${HOME}/.nvm
[ ! -e ${NVM_DIR} ] && mkdir -p ${NVM_DIR}
. /etc/nvm/nvm.sh
nvm install stable
rm -f ~/.nvm_bin
ln -s $NVM_BIN ~/.nvm_bin
if [ -f ${CURRENT_DIR}/package.json ]; then
pushd $CURRENT_DIR && npm install --production
popd
fi
Once again we run some base scripts to do some heavy lifting:
${SOURCE_DIR}/base/rc/config
and ${SOURCE_DIR}/base/deploy
. After
that, it's just a matter of application specifics dependencies using
npm.
Now, we can move on and add our newly created platform.
Adding your platform to tsuru¶
After creating you platform as a Dockerfile, you can add it to tsuru using the client:
$ tsuru platform add your-platform-name --dockerfile http://url-to-dockerfile
If you push your image to an Docker Registry, you can use:
$ tsuru platform add your-platform-name -i your-user/image-name