We have a bigger application server which customers would like to have deployed locally.

It consists of an MySQL server database, a REDIS database, multiple Web servers for sub parts, a NGINX reverse proxy so that these web servers are reachable from Port 80 and a homegrown C++ server.

All sub parts (DB, Webservers, ...) have to be configured to be accessible by each other.

At the moment (for in house use) deployment and configuration is done by hand; but in order to roll it out to customers, we would like to have a Out-of-the-Box-Solution which gets assembled by some build script.

What would you suggest?

  1. Maintaining a VM which just gets configured and then deployed?
  2. Maintaining some installation script or package
  3. Something else?

Usually we would prefer 2. as it seems the more natural way and let the customer decide whether he wants to use a real server or a VM. Also sounds automatic creation of VMs rather time-expensive.

The Problems we face are the usually not-to-be-embedded-components like MySQL and NGINX. NGINX configuration is stored in /etc/nginx/. I don't think that .DEB-packages are allowed to overwrite foreign NGINX configuration nor is it a good practice. The same with MySQL.

It is also possible to embed MySQL/NGINX/Redis but this is not a trivial task.

  • "the more natural way"? What makes it more natural? I think that VM's are simpler. Can you explain what value you see in scripts? – S.Lott Jan 2 '12 at 17:06
  • With natural way, I mean that the installation and configuration of Linux machines seems naturally done by Scripts and Packages. They are seldom (outside the Cloud world) deployed using full prepared VMs. Also aspects like updating and backuping are already made on package basis. But maybe this thought is a bit outdated. – nob Jan 3 '12 at 13:12
  • "But maybe this thought is a bit outdated". Good point. Why is a complex installation of a lot of packages "natural"? Please define "natural" more clearly for us. I think a VM is natural. For some reason you don't. Please explain more fully. – S.Lott Jan 3 '12 at 23:10
  • Even in order to prepare the VM it would depend on installing all that packages and configuring to use each other. And in order to automate/document that (continuous integration) it's necessary to script it. Maybe its just easiest to do both, develop the Script and distribute generated VMs? – nob Jan 4 '12 at 17:07

For all supported platforms create packages which pull in the right dependencies and run scripts for configuration. I.e. debs for Ubuntu/Debian, rpm's for Redhat/Centos.

This will also buy you easy upgrading if you need that.

  • Is it possible to mess up the configuration of third party packages (like NGINX) from .deb packages or should this be done by additional scripts? – nob Jan 3 '12 at 13:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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