We are a team developing applications using Python / Django and have 2 very talented frontend designers, a backend designer, and a part-time sys admin.
We are trying to extend this open source project: [url removed, login to view]
We want a long-term Heroku style deployment management interface for our company. Our plan is as follows, please recommend alternatives if something is better practice than what we outline. We want long-term Django app deployment management with GitHub repos and separate Amazon EC2 instances executed by a web interface. We want to map all settings needed for new deployments into the web interface to deploy a new app.
Skills looking for:
1. Python / Django
2. Linux / systems administration
3. Django deployment management best practices
4. GitHub, Amazon EC2, API experience with a DNS provider, or familiarity with our planned server stack preferred
5. Attitude that helps our team learn from your code and well documented code preferred
6. Deployment automation / management project experience a plus
7. Able to start working on the project immediately
Configuration files included in GitHub repo deployed by app:
Planned production setup:
1.1 GitHub repo = 1 app codebase = 1 Amazon EC2 instance = 1 MySql resource
2. Server config files and development, staging, production settings versioned in GitHub repo
Master server hosts our wiki and this deployment management application
3. App Functionality
4. We are planning on hosting the Django deployment app on our "master" server that also runs our MediaWiki that has our documentation.
[url removed, login to view] interface will be hosted at [url removed, login to view] behind auth.
1. Create a new EC2 instance, set it up, and deploy initial version of app
2. Map all required settings into the deployment app via web interface
-GitHub deploy key, amazon credentials, project name etc.
3. Deploy with SSL cert or without (can we integrate with cert provider at DNS with API to buy cert and apply it as it is setting up the new instance?)
4. Anything we might want to be unique between different instances
5. Dropdown menu to select from deployed instances
6. Automatically push "Production" branch to production and create a new version number associated with commit for rollbacks
7. Uses production settings file
8. Same functionality for "Staging" and "Development" branches deployed with their matching settings file
9. Push updates to that instance from GitHub
10. Rollback to previous versions
11. Put up a "Site is down for maintenance" page
12. Track versions and apply a version numbering convention for each instance / codebase automatically
13. Create a new private repo shared with our team on GitHub, copy contents of our global start template repo into that new project repo
14. We don't want to version SSL certs on GitHub, some solution to deliver the certs from the deployment app as the initial instance for a new app gets set up
Tools planned to use:
1. Boto - Amazon EC2 API
2. GitHub - We host all our code on GitHub
3. Fabric - Set up new EC2 instances remotely
4. DNS with API - We currently use GoDaddy but plan to migrate to new provider with an API to integrate automated DNS setup into deployment app
5. SSL certificates (Can we purchase and deliver via DNS API?)
6. Fabulous as starting point - [url removed, login to view]
7. Django site wrapper, frontend guys can deploy from the interface
8. Loggly - We plan to export all our server log feeds to SaaS tool Loggly
Planned server stack:
14. South database migrations
More details to be provided.