Giter Site home page Giter Site logo

rackerlabs / poppy Goto Github PK

View Code? Open in Web Editor NEW

This project forked from openstack-archive/poppy

3.0 17.0 8.0 9.79 MB

A modular, vendor-neutral API, that wraps provisioning instructions for all CDN vendors that support it.

Home Page: http://openstack.org

License: Apache License 2.0

Shell 0.74% HTML 0.06% Python 98.93% PigLatin 0.04% Dockerfile 0.24%

poppy's Introduction

Attention

This repository has moved to racker/cdn-poppy

Poppy

CDN as a Service

What is Poppy

Users have come to expect exceptional speed in their applications, websites, and video experiences. Because of this, using a CDN has become standard for companies, no matter their size.

Poppy will take all the guess work out of the CDN market for our users. Poppy will give them a consistently speedy experience from integrated partners, with an easy to use RESTful API.

Vendor lock-in to a particular CDN provider is removed by abstracting away the plethora of vendor API's available. This means that a customer only has to integrate with one CDN API, and reap the benefits of using multiple providers.

Your content can be distributed to multiple providers seamlessly instead of just one.

Running performance benchmarks against each configured CDN provider allows you to simply repoint your DNS at the new provider; and with that simple change you can ensure your application is running using the fastest provider at the time. It will also allow you to handle CDN failures and minimize disruption to your application from CDN outages.

Features

  • Wraps third party CDN provider API's
    • Akamai (Production Ready)
    • Fastly (In Development)
    • Amazon CloudFront (In Development)
    • MaxCDN (In Development)
    • Your CDN Here...
  • Sends configurations to n configured CDN providers
  • Supports multiple backends (CassandraDB recommended)
    • CassandraDB
    • Your DB provider here
  • Supports multiple dns providers
    • Rackspace DNS
    • Openstack Designate (Coming Soon)
  • Openstack Compatable
    • Uses Keystone for authentication
    • Uses Swift for log delivery
  • Multiple Origins to pull from (Public Servers, Amazon S3 Buckets, ...)
  • Supports Multiple Domains
  • Custom Caching and TTL rules
  • Set Restrictions on who can access cached content

What Poppy is not

Poppy does not run its own Edge Cache or POP servers. This is purely a management API to abstract away the myriad of CDN providers on the market.

Getting Started

Note: These instructions are for running a local instance of CDN and not all of these steps are required. It is assumed you have CassandraDB and Zookeeper installed and running in a Docker Container.

  1. From your home folder create the ~/.poppy folder and clone the repo:

    $ cd
    $ mkdir .poppy
    $ git clone https://github.com/openstack/poppy.git
    
  2. Copy the Poppy config files to the directory ~/.poppy:

    $ cp poppy/etc/poppy.conf ~/.poppy/poppy.conf
    $ cp poppy/etc/logging.conf ~/.poppy/logging.conf
    
  3. Find the [drivers:storage:cassandradb] section in ~/.poppy/poppy.conf and modify the URI to point to your local casssandra cluster:

    [drivers:storage:cassandra]
    cluster = <docker ip>
    keyspace = poppy
    migrations_path = /home/poppy/poppy/storage/cassandra/migrations
    automatic_schema_migration = True     #True is recommended for local dev machine
    
  1. For logging, find the [DEFAULT] section in ~/.poppy/poppy.conf and modify as desired:

    log_file = server.log
    
  2. Change directories back to your local copy of the repo:

    $ cd poppy
    
  3. Install general requirements:

    $ pip install -r requirements/requirements.txt
    

    Run the following so you can see the results of any changes you make to the code without having to reinstall the package each time:

    $ pip install -e .
    
To install additional dependencies, see Additional Dependencies.
  1. Install and start cassandra and zookeeper driver:

    $ pip install docker-compose
    $ docker-compose -f docker/compose/dependencies.yml up -d
    
  2. Start poppy task flow worker:

    $ poppy-worker
    
  3. Start the Poppy server:

    $ poppy-server
    
  4. Test out that Poppy is working by requesting the home doc (with a sample project ID):

    $ curl -i -X GET -H "X-Project-ID: 000" -H "X-Auth-Token: 000" -H "Content-Type: application/json" http://127.0.0.1:8888/v1.0/
    

You should get an HTTP 200 along with some headers that will look similar to this:

HTTP/1.0 200 OK
Date: Thu, 13 Feb 2014 14:34:21 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 464
Content-Type: application/json-home
Cache-Control: max-age=86400
  1. To run unit/functional test:

    $ tox
    

To run a full test suite with api test, you will need to put in correct CDN vendor configuration (in ~/.poppy/poppy.conf) first, e.g:

[drivers:provider:fastly]
apikey = "<your_fastly_api_key>"

Then start a poppy server:

   $ poppy-server -v

And run test suite with api test::

   $ tox -- --exclude=none

Additional Dependencies

Ubuntu 14.04

For Python 2.7:

$ sudo apt-get install python-dev

For Python 3.4:

$ sudo apt-get install python3.4-dev

For PyPy:

$ sudo apt-get install pypy-dev

Install these two packages regardless of the Python version:

$ sudo apt-get install libffi6 libffi-dev

$ sudo apt-get install libssl-dev

Installing Cassandra and Zookeeper Locally

We recommend running Cassandra and Zookeeper in a docker container when developing locally.

Follow the instuctions in the /poppy/docker/compose/README.md file for running Poppy locally.

Running tests

First install the additional requirements:

$ pip install tox

And then run tests:

$ tox

poppy's People

Contributors

ajaeger avatar amitgandhinz avatar berendt avatar bkmetzler avatar bryansd avatar codevulture avatar coolyuvee avatar dhellmann avatar fungi avatar heiths avatar isaacm avatar jc7998 avatar lukerepko avatar merryldmello avatar miqui avatar obulpathi avatar onovy avatar powellchristoph avatar raman-balyan avatar ronaldbradford avatar rtmorgan avatar satroutr avatar sriram-mv avatar tonytan4ever avatar tuxerman avatar ushyd202 avatar venkatamahesh avatar wbrothers avatar ycombinator avatar yunhaia avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.