# We're deploying a Django App (written in Python) ... # Services are - Django web app run by Gunicorn HTTP server, nginx web server, Celery task queue for long-running jobs # - RabbitMQ message queue is backend for Celery, Postgres database # We have three server environment groups ... production (real), staging (testing), vagrant (local testing) and we have two functional groupings ... web server, task queue (for long running jobs) # Production deployment - run web app on several hosts for good performance, run task queues on several hosts for good performance # - put Gunicorn, Celery, RabbitMQ, Postgres on separate servers, two Postgres hosts are primary one and replica [production] delaware.example.com georgia.example.com maryland.example.com newhampshire.example.com newjersey.example.com newyork.example.com northcarolina.example.com pennsylvania.example.com rhodeisland.example.com virginia.example.com [staging] ontario.example.com quebec.example.com [vagrant] vagrant1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2201 vagrant2 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2202 vagrant3 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2203 [lb] delaware.example.com [web] georgia.example.com newhampshire.example.com newjersey.example.com ontario.example.com vagrant1 [task] newyork.example.com northcarolina.example.com maryland.example.com ontario.example.com vagrant2 [rabbitmq] pennsylvania.example.com quebec.example.com vagrant3 [db] rhodeisland.example.com virginia.example.com quebec.example.com vagrant3 # Variables [all:vars] ntp_server=ntp.ubuntu.com [production:vars] db_primary_host={{ db.primary.host }} db_primary_port={{ db.primary.port }} db_replica_host={{ db.replica.host }} db_name={{ db.name }} db_user={{ db.user }} db_password={{ db.password }} rabbitmq_host={{ rabbitmq.host }} rabbitmq_port={{ rabbitmq.port }} [staging:vars] db_primary_host=quebec.example.com db_name=widget_staging db_user=widgetuser db_password=hbfgdgfgfdhgfdj rabbitmq_host=quebec.example.com rabbitmq_port=5672 [vagrant:vars] db_primary_host=vagrant3 db_primary_port=5432 db_replica_host=virginia.example.com db_name=widget_vagrant db_user=widgetuser db_password=password rabbitmq_host=vagrant3 rabbitmq_port=5672