sealuzh / cloud-stove

The Cloud Stove Backend
https://api.thestove.io
Apache License 2.0
4 stars 0 forks source link
application-modeling cloud cloud-deployment cloud-stove recommendation-engine

Cloud Stove

The Cloud Stove

wercker status

The Cloud Stove gives users deployment recommendations for their cloud applications. Application instances are derived from generic blueprints and enriched with the specific characteristics and requirements of the application to be deployed. Blueprints are generic application scaffolds that represent different application architectures to capture relevant differences in overall deployment strategies. Deployment recommendations are created by optimizing the use of available provider offerings with respect to the captured application specifications and requirements.

Getting Started

You can access the current stable Cloud Stove release at app.thestove.io and sign up for a free account. Check out the user guide for more information.

Contributing to the Cloud Stove

Want to help make Cloud Stove better with your contribution? Great! Check out the contribution guide for information on how to get your development environment up and running, and start contributing to the Stove. Furthermore, the architecture and API is described in the developer guide.

CI & Deployment

Since the Cloud Stove is largely follows 12factor app guidelines, deployment is relatively easy. We host a public deployment of the Cloud Stove on Heroku. You can also easily run your very own Cloud Stove deployment either on other buildpack-based PaaS like Cloud Foundry. For deployments on bare infrastructure, refer to the contribution guide for steps necessary to get the application up and running.

The Public Cloud Stove

Every push to the GitHub repository will initiate a CI build on wercker. The current status of our CI builds is shown below.

wercker status

Successful CI builds are then deployed to a Heroku pipeline with a staging application at https://staging.backend.thestove.io. To inspect and modify the staging app's configuration use the application dashboard.

The app uses the rake-deploy-tasks buildpack to automatically run pending migrations on deploy, as well as the vendorbinaries buildpack to pull in a custom MiniZinc release for generating recommendations.

Self-hosted Deployment

The recommended way to deploy Cloud Stove is with Heroku. You can deploy the app using their free dynos and the free PostgreSQL plan for test installations. To run the application, you will need one web dyno for the Rails application, a worker dyno to run background jobs, and an additional web dyno (probably deployed as separate application) for the AngularJS frontend. For production deployments, you should move to paid dynos to prevent your application from sleeping once your free dyno hours are spent.

To get started quickly, deploy the Cloud Stove using the button below:

Deploy

The application requires a set of config variables to successfully enable all features. You will need to configure the rake-deploy-tasks buildpack to execute migrations on deploy, as well as provide access tokens for Azure, Digital Ocean and Atlantic.net.

heroku config:set \
  DEPLOY_TASKS=db:migrate \
  DIGITALOCEAN_TOKEN=XXXXX \
  AZURE_SUBSCRIPTION_ID=XXXX \
  AZURE_TENANT_ID=XXXXX \
  AZURE_CLIENT_ID=XXXXX \
  AZURE_CLIENT_SECRET=XXXXX \
  ANC_ACCESS_KEY_ID=XXXXXX \
  ANC_PRIVATE_KEY=XXXXXX

As you can see, you will need API keys for Digital Ocean, Microsoft Azure, and Atlantic.net to successfully retrieve pricing data from these providers.

Change admin password

An admin user with the email admin@thestove.io and the password admin is created while seeding the database. Change the default password with the rake task:

rake user:update_admin[new_password]

Communication & Organization

Planning and development of the Cloud Stove is coordinated using GitHub wiki, issues, milestones, and pull requests.

In the Cloud Stove Roadmap, we discuss upcoming features and define milestones and issues to implement them.

Daily communication and coordination happens in #cloud-stove at the s.e.a.l. Slack.