Production cloud deployments of fig infrastructure with docker
Project description
ficloud
======
ficloud alows to deploy your fig infrastructure to remote servers. Also it
provides all the services needed for hosting production apps.
NB! ficloud is currently in concept stage, so documentation for future components is only thing that exist now.
Features:
- define your app config through Dockerfile and fig.yml
- easy deploy through git push
- pushing several versions of app (dev, staging, production ... etc)
- simple nginx based balancer
- easy switch balancer endpoint between app versions (ex swap prod and dev)
- persistent storage for containers
- easy copying persistence storage between containers (prod -> staging, etc)
- ftp access for container persistence storage
Installation
-------------
Install docker: http://docs.docker.io/en/latest/installation/
Make sure you can run docker containers::
$ sudo docker run -i -t ubuntu echo -e "\033[0;32mDocker is installed - OK\033[0m";
Install packages::
$ sudo apt-get install python-pip
$ sudo pip install ficloud-server
Test that ficloud is working::
$ ficloud-server app-list
+-----+---------+-------+
| App | Version | State |
+-----+---------+-------+
+-----+---------+-------+
Create ficloud user (you can pick any username)::
$ sudo useradd -s /bin/bash -d /home/ficloud -m ficloud
$ sudo su ficloud
$ cd /home/ficloud
$ mkdir ~/.ssh
$ vim ~/.authorized_keys # insert your ssh key and ssh key of your root user into this file
$ chmod -R go-rwx ~/.ssh
Test you can ssh into your server using ficloud account::
$ ssh ficloud@yourserver.com
Make sure your root user can also access your server::
$ sudo ssh ficloud@yourserver.com
Add ficloud user to docker group::
$ sudo usermod -a -G docker ficloud
Check ficloud can run docker now::
$ sudo su ficloud
$ docker run -i -t ubuntu echo -e "\033[0;32mFicloud can run Docker - OK\033[0m";
$ exit
Install haproxy::
$ sudo apt-get install haproxy
$ sudo echo "ENABLED=1" > /etc/default/haproxy
$ sudo service haproxy start
$ curl https://raw.github.com/pywizard/ficloud/master/examples/haproxy.cfg.tpl | sudo tee /etc/haproxy/haproxy.cfg.tpl
Now install incron to reconfigure haproxy, when you deploy new apps::
$ sudo apt-get install incron
$ sudo echo "root" > /etc/incron.allow
Edit incrontab file and insert lines generated by inotify-dump in incrontab file::
$ ficloud-server inotify-dump
/home/ficloud/apps-conf IN_MODIFY,IN_CREATE,IN_DELETE,IN_NO_LOOP /usr/local/bin/ficloud-server balancer-dump /home/ficloud/apps-conf
/etc/haproxy/haproxy.cfg.tpl IN_MODIFY,IN_CREATE,IN_DELETE,IN_NO_LOOP /usr/local/bin/ficloud-server balancer-dump /home/ficloud/apps-conf
$ sudo incrontab -e
And the last thing. Allow ficloud to read-write any docker container volume:
ficloud ALL= NOPASSWD:/usr/bin/rsync
Deployement
-------------
Start by creating application that is working locally using fig.yml
Set working ssh account::
$ ficloud use ficloud@myserver.com
Create an application:
$ ficloud remote app-create foo
Deploy code:
$ git push ficloud@myserver.com:apps/foo master:prod
Check port number:
$ ficloud remote app-list
Configure balancer:
$ ficloud remote balancer set mydomain.com web:80@foo#prod
Push volume to deployment:
$ filcoud volume-push web/code@foo#master
Push volume from deployment:
$ filcoud volume-pull web/code@foo#master
Remote volume copy:
$ ficloud remote volume-copy web/code@foo#master foo#v1
Your app is deployed!
Data migration
----------------
======
ficloud alows to deploy your fig infrastructure to remote servers. Also it
provides all the services needed for hosting production apps.
NB! ficloud is currently in concept stage, so documentation for future components is only thing that exist now.
Features:
- define your app config through Dockerfile and fig.yml
- easy deploy through git push
- pushing several versions of app (dev, staging, production ... etc)
- simple nginx based balancer
- easy switch balancer endpoint between app versions (ex swap prod and dev)
- persistent storage for containers
- easy copying persistence storage between containers (prod -> staging, etc)
- ftp access for container persistence storage
Installation
-------------
Install docker: http://docs.docker.io/en/latest/installation/
Make sure you can run docker containers::
$ sudo docker run -i -t ubuntu echo -e "\033[0;32mDocker is installed - OK\033[0m";
Install packages::
$ sudo apt-get install python-pip
$ sudo pip install ficloud-server
Test that ficloud is working::
$ ficloud-server app-list
+-----+---------+-------+
| App | Version | State |
+-----+---------+-------+
+-----+---------+-------+
Create ficloud user (you can pick any username)::
$ sudo useradd -s /bin/bash -d /home/ficloud -m ficloud
$ sudo su ficloud
$ cd /home/ficloud
$ mkdir ~/.ssh
$ vim ~/.authorized_keys # insert your ssh key and ssh key of your root user into this file
$ chmod -R go-rwx ~/.ssh
Test you can ssh into your server using ficloud account::
$ ssh ficloud@yourserver.com
Make sure your root user can also access your server::
$ sudo ssh ficloud@yourserver.com
Add ficloud user to docker group::
$ sudo usermod -a -G docker ficloud
Check ficloud can run docker now::
$ sudo su ficloud
$ docker run -i -t ubuntu echo -e "\033[0;32mFicloud can run Docker - OK\033[0m";
$ exit
Install haproxy::
$ sudo apt-get install haproxy
$ sudo echo "ENABLED=1" > /etc/default/haproxy
$ sudo service haproxy start
$ curl https://raw.github.com/pywizard/ficloud/master/examples/haproxy.cfg.tpl | sudo tee /etc/haproxy/haproxy.cfg.tpl
Now install incron to reconfigure haproxy, when you deploy new apps::
$ sudo apt-get install incron
$ sudo echo "root" > /etc/incron.allow
Edit incrontab file and insert lines generated by inotify-dump in incrontab file::
$ ficloud-server inotify-dump
/home/ficloud/apps-conf IN_MODIFY,IN_CREATE,IN_DELETE,IN_NO_LOOP /usr/local/bin/ficloud-server balancer-dump /home/ficloud/apps-conf
/etc/haproxy/haproxy.cfg.tpl IN_MODIFY,IN_CREATE,IN_DELETE,IN_NO_LOOP /usr/local/bin/ficloud-server balancer-dump /home/ficloud/apps-conf
$ sudo incrontab -e
And the last thing. Allow ficloud to read-write any docker container volume:
ficloud ALL= NOPASSWD:/usr/bin/rsync
Deployement
-------------
Start by creating application that is working locally using fig.yml
Set working ssh account::
$ ficloud use ficloud@myserver.com
Create an application:
$ ficloud remote app-create foo
Deploy code:
$ git push ficloud@myserver.com:apps/foo master:prod
Check port number:
$ ficloud remote app-list
Configure balancer:
$ ficloud remote balancer set mydomain.com web:80@foo#prod
Push volume to deployment:
$ filcoud volume-push web/code@foo#master
Push volume from deployment:
$ filcoud volume-pull web/code@foo#master
Remote volume copy:
$ ficloud remote volume-copy web/code@foo#master foo#v1
Your app is deployed!
Data migration
----------------
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ficloud-0.1.7.tar.gz
(23.7 kB
view hashes)