jacc

    0.0.23 • Public • Published

    Jacc - Just Another Cloud in the Cloud

    Jacc targets the following user case:

    • web applications running behind a load balancing proxy
    • efficient hosting of several compentents, typically a cluser of application server, caching servers etc. A database cluster can also be hosted or use a DBaaS with backups etc. pre-configured
    • ready for production use with the redundance and reliability this requires

    Jacc is NOT a Heroku type architeture with support for remote deployment. You are required to login to the server that hosts the web applications.

    Jacc is a private cloud built from standard components such as docker.io, hipache and redis-dns. Docker is a linux containers architecture and hipache a high perforamnce web proxy. redis-dns provides an internal DNS between containers. Docker and hipache are provided by the team behind the dotCloud service.

    The goal is to provide an architecture suitable for hosting a variety of components on a limited amount of server. Examples of components could be web applications build in PHP/Java/NodeJS/Ruby/Python etc. It could also include databases, caching systems, queue management etc. The limit is really only what's runs on the Linux flavours that docker supports.

    Installation

    Pre-requiresites:

    • docker version 0.7.1
    • redis
    • NodeJS (preferabley managed with nvm)
    • Python
    • make - for development only

    Installation:

    1. Install with sudo npm install jacc -g
    2. Install redis: sudo apt-get install -y redis-server
    3. Then install supervisord, either using a linux package manager or simply with python package manager: sudo apt-get install -y supervisor (or with sudo pip install supervisor but then you need to setup supervisor as a service yourself)
    4. Locate the jacc installation in node_modules (typically in /usr/lib/node_modules/jacc)
    5. Update the IP adress in the file JACC_HOME/etc/redis-dns-config.json with the IP adress of the docker bridge (do ifconfig|grep -A 1 docker).
    6. Update the command section in the files JACC_HOME/etc/supervisor/*.conf with the path to the jacc installation
    7. Copy the hipache and redis-dns config files for supervisor and restart sudo cp JACC_HOME/etc/supervisor/*.conf /etc/supervisor/conf.d/ && sudo supervisorctl reload
    8. Check that hipache and redis-dns started with sudo supervisorctl status

    Setup containers:

    1. Do jacc add <IMAGE_ID> <URL> <internal port> <DNS> followed by ./jacc.sh update to add an image and start a container. hipache and redis-dns configuration will be updated at the same time
    • STARTING CONTAINERS HAVE NOT BEEN IMPLEMENTED YET, START MANUALLY WITH docker run -d -dns=IP IMAGE_ID
    1. jacc list shows the configuration and jacc status the running containers

    docker configuration:

    docker need to be configured to open up the HTTP API. The start script needs to include this flag DOCKER_OPTS=-H 127.0.0.1:4243. For ubuntu, this is changed in /etc/init/docker.conf. Now the docker command line tool needs the flag -H=tcp://127.0.0.1:4243. Create an alias for simplcity: alias docker='docker -H=tcp://127.0.0.1:4243'. Place this in your .profile etc.

    Development

    NOTE: The overall design principle for Jacc is to re-use what's already out there. Don't re-invent the wheel.

    An easy way to get started quickly is to create a virtual machine using Vagrant. This repo has everything you need: https://github.com/colmsjo/docker. You can of course setup docker and the other required modules yourself.

    Run make install to install everything in the current directory.

    Jacc comes with a test suite. The first step when developing is to make sure that the test runs without any erros.

    A number of environment variables needs to be set. You can for instance use the ./test/setenv.template file showed below:

    export JACC_TEST_CONTAINERID=$abcdefghijkl
    export JACC_TEST_URL="app1.jacc.local"
    export JACC_TEST_PORT="80"
    export JACC_TEST_DNS="app1.local"
    

    Then do source ./test/setenv followed by make to kickoff the test suite.

    Troubleshooting

    1. 'No running containers with ID: XXX' - This is most likely caused by a problem connecting to docker. Does docker ps and curl http://localhost:4243/containers/json show containers?

    Install

    npm i jacc

    DownloadsWeekly Downloads

    3

    Version

    0.0.23

    License

    WTFPL

    Last publish

    Collaborators

    • colmsjo