.. Cubric documentation master file, created by
sphinx-quickstart on Wed Jul 18 18:40:10 2012.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Cubric
======
Cubric allows you to easily create servers, configure servers and deploy
arbitrary WSGI applications on Amazon EC2 or Rackspace Cloud Servers using
`Fabric `_ and
`Cusine `_. With a small amount of
configuration you can create servers and deploy applications with great ease!
For example, you could create a new staging server and deploy your WSGI
application to it with the following, single terminal command::
$ fab -c rcfile.staging create_server create_app_context deploy
Checkout the `example application `_.
Contents
=========
* :ref:`overview`
* :ref:`getting-started`
* :doc:`Changelog `
.. _overview:
Overview
========
Cubric has been developed using two core concepts:
Servers
-------
Servers are, you guessed it, servers! Servers are initialized and/or configured to run one or more applications. They can be rebooted, restarted, stopped, etc.
Application Contexts
--------------------
An application context is a specification for an application. It's sort of the 'house' the app lives in. They are generally specific to a particular type of server and the server's configuration. They can be deployed, stopped, started, restarted, etc.
.. _getting-started:
Getting Started
===============
Install Cubric via pip::
$ pip install cubric
EC2
---
Working with EC2 requires boto. Install boto::
$ pip install boto
Configure your Fabric environment in your fabfile or by using an rcfile by
adding the following values::
user = ubuntu
key_filename = /path/to/keyfile
#host_string = to be added later
branch = master
cloud_provider = amazon
server_class = cubric.contrib.servers.ubuntu.default.Server
context_class = cubric.contrib.servers.ubuntu.default.WsgiApplicationContext
ec2_key = your_ec2_key
ec2_secret = your_ec2_secret
ec2_ami = ami-fd589594
ec2_keypair = keypair_name
ec2_secgroups = security_group_name
ec2_instancetype = t1.micro
Rackspace
---------
Install python-cloudservers::
$ pip install python-cloudservers
Configure your Fabric environment in your fabfile or by using an rcfile by
adding the following values::
user = root
#password = to be added later
#host_string = to be added later
branch = master
cloud_provider = amazon
server_class = cubric.contrib.servers.ubuntu.default.Server
context_class = cubric.contrib.servers.ubuntu.default.WsgiApplicationContext
rackspace_username = your_username
rackspace_apikey = your_api_key
rackspace_servername = your_server_name
rackspace_image = 112
rackspace_flavor = 1
Create a Server
---------------
Create a file named `fabfile.py` in the root of your project and add the
following::
from cubric.tasks import *
To see a list of tasks you can run the command::
$ fab --list
Now go ahead and create a server::
$ fab -c your_rcfile create_server
This will create and initialize your server. Be sure to make note of the public
DNS or IP address. If you've already created your server through your respective
management console, or if something fails during server setup, you can
initialize the server by setting the value for `host_string` and either
`key_filename` or `password` (depending on you access your server over SSH) in
your rcfile. Then run the following command::
$ fab -c your_rcfile initialize_server
Create an Application Context
-----------------------------
An application context is the environment under which an application runs.
Cubric is primarily developed for Python applications. More specifically WSGI
applications that are run using nginx, uWSGI, and supervisor. To create and
application context on the server run the following command::
$ fab -c your_rcfile create_app_context
Now you should be ready to deploy your WSGI application to the server if your
application is setup to play nice with the specified application context.
Deploy Your App
---------------
As previously mentioned, the default server and application context that ships
with Cubric uses nginx, uWSGI, and supervisor. The application context expects
the following things:
1. The application is under version control using git
2. A fabric environment variable named `branch` to be set to the branch you
wish to deploy such as `develop` or `origin/master`
3. A fabric environment variable named `context__environment` to be set to your
desired environment name such as `development`, `staging`, etc. It defaults
to `development` if you don't set it.
3. Two configuration templates be present in your application where
`` is equal to the `context__environment` Fabric
environment variable:
a) `etc//nginx.conf.tmpl`
b) `etc//supervisor.conf.tmpl`
4. A WSGI entry file at the root of your project named `wsgi.py` that includes
the WSGI callable named `app`. If you want to override the defaults you can
set two Fabric environment variables named `context__wsgi_file` and `wsgi_callable`.
You can refer to the example project to see these requirements in action.
Then, to deploy your application, simply run the following command::
$ fab -c your_rcfile deploy
The Almighty One Liner
----------------------
If you're application is configured properly for the application context you
could quickly create a server and deploy your app using the following command::
$ fab -c your_rcfile create_server create_app_context deploy
Hooray!
.. toctree::
:maxdepth: 2
changelog
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`