installation - GetmeUK/hangar51 GitHub Wiki

Installation

The following provides a short guide to installing Hanger51, the guide is based on a local install but production environments are discussed at the end.

All commands are at the terminal unless explicitly described as different.


Prerequisites

  • A Linux or OSX operating system (for Windows users please use a virtual machine running Ubuntu 14.04).
  • Mongo 3.0+
  • Python 3.4+ (used for the application) and Python 2.7 (used to run Fabric and Supervisor)
  • RabbitMQ 3.6.1+
  • Nginx 1.4.6+ (optional)

Downloading the application

To download the current repo:

  • cd install-directory (the repo will be downloaded into a folder called event-hive)
  • git clone [email protected]:getme/hanger51.git
  • cd hanger51

Add a local settings file

In the settings directory within the repo create a local.py file and add the following:

from . import DefaultConfig


class Config(DefaultConfig):

    # Database
    MONGO_PASSWORD = '...'

    # Debugging
    DEBUG = True

    # Networking
    PREFERRED_URL_SCHEME = 'http'
    SERVER_NAME = 'hanger51.local'

Create a Python virtual environment

  • In the repo directory run pyvenv-3.x . (There is a bug in some versions of Ubuntu such that pyvenv-3.x may not be available in which case you should first:
    • sudo apt-get install python3.x-venv
  • Activate the virtual environment using source bin/activate
  • Download all the project's Python requirements using pip install -r requirements.txt
    • MongoFrames is not available from PyPI currently so you will need to manually install it using pip install git+ssh://[email protected]/getme/mongoframes.git
  • Run the inittask for the application fab m:init
  • Check the application has installed correctly by running fab up. You should see the following output at the terminal:
 * Running on http://127.0.0.1:5151/ (Press CTRL+C to quit)
 * Restarting with stat

Configure Nginx to support the hanger51.local domain (optional)

Whether you use Nginx to proxy to the Hanger51 app or not is entirely optional (but recommended), I use Nginx on my local install to allow me to run the app under the domain hanger51.local.

  • Copy the default local Nginx config file to your Nginx conf.d directory: sudo cp root/nginx/local.conf /etc/nginx/conf.d/hanger51.local.conf
  • The default config is set up to run the application under the host name hanger51.local and port 5151, however you can modify these in the Nginx config.
  • Restart Nginx sudo service nginx restart
  • Edit your hosts file sudo nano /etc/hosts and add an entry for 127.0.0.1 hanger51.local
  • Check that the Nginx installation is correct by opening a browser and visiting http://hanger51.local. While the app is running, you should get:
{
  "payload": {
    "reason": "`api_key` not specified."
  },
  "status": "fail"
}

Running celery

Hanger51 uses celery to execute tasks in the background such as generating variations and removing expired assets. In a new terminal window start the celery tasks with: fab tasks_up


Running test

PyTest is used for testing the Hanger51 code base, to run the tests simply type py.test at the terminal whilst in the repo directory with the virtual environment activated.

The repo does not (for obvious reasons) include a configuration file for s3 which is required to run the complete set of tests. To add one create a file named s3.cfg within tests/data and populate from this template:

{
    "backend": "s3",
    "access_key": "...",
    "secret_key": "...",
    "bucket": "..."
}

Production environment set up

TODO: As we deploy a production environment the architecture will be detailed here.

Initial setup in a single CentOS 7.2 container on o4.getme.co.uk at OVH.

  • container name: hanger51 (located at /srv/hanger51)
  • container address (for e.g. ssh) hanger51.o4.getme.co.uk (ip address 51.254.63.38) Note. that that currently containers are not isolated at the network level so any service must be configured to listen on allocated ip address(es) only or use custom ports.
⚠️ **GitHub.com Fallback** ⚠️