DotCloud
++++++++
.. note:: This cookbook recipe is obsolete because DotCloud has been acquired by Docker. Please `submit a pull request `_ to update this recipe.
`DotCloud `_ offers support for all WSGI frameworks.
Below is a quickstart guide for Pyramid apps. You can also read the `DotCloud
Python documentation `_ for
a complete overview.
Step 0: Install DotCloud
========================
`Install DotCloud's CLI
`_ by running:
.. code-block:: bash
$ pip install dotcloud
Step 1: Add files needed for DotCloud
=====================================
DotCloud expects Python applications to have a few files in the root of the
project. First, you need a pip ``requirements.txt`` file to instruct DotCloud
which Python library dependencies to install for your app. Secondly you need a
``dotcloud.yaml`` file which informs DotCloud that your application has (at a minimum)
a Python service. You may also want additional services such as a MongoDB
database or PostgreSQL database and so on - these things are all specified in
YAML.
Finally, you will need a file named ``wsgi.py`` which is what the DotCloud
uWSGI server is configured to look for. This wsgi.py script needs to create a
WSGI callable for your Pyramid app which must be present in a global named
"application".
You'll need to add a requirements.txt, dotcloud.yml, and wsgi.py file to the
root directory of your app. Here are some samples for a basic Pyramid app:
``requirements.txt``:
.. code-block:: text
cherrypy
Pyramid==1.3
# Add any other dependencies that should be installed as well
``dotcloud.yml``:
.. code-block:: yaml
www:
type: python
db:
type: postgresql
Learn more about the `DotCloud buildfile `_.
``wsgi.py``:
.. code-block:: python
# Your WSGI callable should be named “application”, be located in a
# "wsgi.py" file, itself located at the top directory of the service.
#
# For example, to load the app from your "production.ini" file in the same
# directory:
import os.path
from pyramid.scripts.pserve import cherrypy_server_runner
from pyramid.paster import get_app
application = get_app(os.path.join(os.path.dirname(__file__), 'production.ini'))
if __name__ == "__main__":
cherrypy_server_runner(application, host="0.0.0.0")
Step 2: Configure your database
===============================
If you specified a database service in your dotcloud.yml, the connection info
will be made available to your service in a JSON file at
/home/dotcloud/environment.json. For example, the following code would read
the environment.json file and add the PostgreSQL URL to the settings of
your pyramid app:
.. code-block:: python
import json
# if dotcloud, read PostgreSQL URL from environment.json
db_uri = settings['postgresql.url']
DOTCLOUD_ENV_FILE = "/home/dotcloud/environment.json"
if os.path.exists(DOTCLOUD_ENV_FILE):
with open(DOTCLOUD_ENV_FILE) as f:
env = json.load(f)
db_uri = env["DOTCLOUD_DATA_POSTGRESQL_URL"]
Step 3: Deploy your app
=======================
Now you can deploy your app. Remember to commit your changes if you're
using Mercurial or Git, then run these commands in the top directory
of your app:
.. code-block:: bash
$ dotcloud create your_app_name
$ dotcloud push your_app_name
At the end of the push, you'll see the URL(s) for your new app. Have fun!