Take the 2-minute tour ×
Webmasters Stack Exchange is a question and answer site for pro webmasters. It's 100% free, no registration required.

I want to develop a Django web application that would get deployed at the customer site. The web application would run in a private cloud environment (ESX server here) of the customer. My web application would use a MySQL database. The problem is, I would not have direct access or control of the web application.

My question is, how to package such a web application with it's database and other entities so that it's easier to upgrade and update the application and it's database in future. Right now the idea I have is that I would provide a virtual machine with the Django application and database setup. The customer can just start the virtual machine and he would have the web application running. What are the other options I should consider?

share|improve this question
    
Read about Fabric, or for a more professional solution, consider using Vagrant with Puppet or Chef –  YardenST Nov 24 '12 at 10:33

1 Answer 1

There is probably an easier way. You can do a lot of this with Bash. Here is what your shell script might look like.

Install Script:

  1. Is git installed? Yes / No
  2. Install git
  3. Download latest git repository (you can host your scripts on GitHub or BitBucket or privately)
  4. If you don't want to use git, just have the shell script wget download your zip file from your site, and unzip it.
  5. Check for MySQL
  6. Install MySQL
  7. Check for latest version
  8. Do an upgrade.

Once you get the application running, you can build an updater web script into your application. Sort of like how WordPress does updates: "A new version is available." This has a SQL update script that runs, and downloads new pages.

The problem with using ESX server is that you are locking in your clients to Vmware. What about those that use Xen, or Hyper-v or OnApp or OpenVZ? Do you really want to maintain multiple virtual machine images? And what if your client updates something custom on their server? Like sets cron jobs? Don't they lose this data if you update?

One last option is just to offer your product as a hosted "cloud" service. Might be a better alternative than dealing with client deployments. This is how things are moving. Even Interspire got rid of their installed cart and moved to their hosted "big commerce" solution. It will cost you the same as your clients to host it. Maybe just offer it in the cloud, and give options to pull data in and out via an API?

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.