views:

127

answers:

5

For a web-app product which would need to be installed by the customer on their own servers (think FogBugz or the self-hosted Wordpress package), which technology stack would result in a smoother/easier installation?

Our target platforms are known: Windows/IIS/SQLSever and Linux/Apache/MySQL.

But the technology stack to be used is being debated around the office: PHP w/ no frameworks, PHP with Codeigniter, Python, ASP.Net with C# (running Mono for the Linux installations), Rails, Java, etc.

Some of the things to consider would be whether an average "out of the box" web server running IIS or Apache would have the required libraries to install the product if it were built using one technology rather than the other (for example, a PHP-based solution would probably be easier for the customer to deploy on a Linux machine as opposed to having to install mono and whatever other dependencies would be required to run an ASP.Net solution on a Linux machine as a web app).

We're working on the assumption that the customer has some access to a system administrator, but perhaps not a full-time/dedicated one -- something like a shared web host account.

Given that, we want the customer to be able to have the least amount of friction in installing the web app on their web server, and we're debating the right technology stack to use for that.

A: 

Since you're going to run into troubleshooting issues, I would pick the one with the most online help available. From the choices you've given and the experiences I've had, I would definitely choose ASP.NET. (I don't know what it would take to run ASP.NET on Linux, but the Mono project should have some information.)

John Fisher
A: 

You've entered dangerous territory with this question...

First of all, any time you require a dependency, you assume that it is installed on the client machine. Because of the very nature of computer systems to, most of the time, be non-standardized, this is a dangerous assumption. If you know that every installation will be done on a CentOS 5 fresh install, for example, you could bundle a script to install all dependencies. Actually, if you knew that all clients would have 'yum' on the machine, you could do the same, regardless of what is or isn't there. However, this simply isn't the case.

The bottom line is that the client will probably wind up doing some legwork regardless, unless you use no dependencies. Even Ruby gems will require different installations depending on the version of Ruby installed. You can try to automate it, but there will always be those edge cases where things just don't work and have to be done by hand.

That being said, there are ways to make it easier on the client. For a dependency-less web application, I personally would pick Rails simply because everything is there. Same with Django. PHP does require a little bit more work for the client, in my mind, simply because most PHP applications are built with MySQL, which requires importing and setting up, whereas Rails has the "just works" mentality (note the quotes).

Jason
A: 

One other thing to keep in mind is that you are going to get support calls. I'd go with the stack that your support people know the best.

twlichty
A: 

Well, on the plus side for ASP.NET the .NET framework is available from Windows Update and you can easily wrap your site in an installer, either via the built into Visual Studio Web Setup Project or third party installers like InstallShield, Advanced Installer or WiX (the hard core option). Dependencies in Windows can be included in installation packages as "merge modules" or you can embed MSIs with the more advanced install creators.

Shared web hosts on the other hand, well that's all manual, and no installer, Windows or Linux based is going to help you there. At the end of the day that will be FTP files up and pray. No matter what framework you use you're going to have to write a very careful installation process which kicks off the first time the app is browsed to and which checks everything is available. ASP.NET dependencies are usually just a matter of uploading the assembly DLL.

blowdart
+2  A: 

PHP/MySql is brainless simple to set up on a unix stack. You can run in to problems with extensions and version-incompatibilities, but these are relatively minor compared to most other platforms. It's a bit outside my main territory, but from what I hear PHP is quite well integrated into ISS these days. Microsoft has taken upon them selves to make PHP more compatible with their stack, and quite a few improvements in this area went into the newly released version 5.3.

If you use Python or Ruby, you could go with a strategy of supplying a web-server out-of-the-box. There are full-featured web servers implemented in both languages. They aren't as robust as IIS or Apache of course, but for a low/medium traffic site they are OK. The customer could still set their main web server up to proxy your application. This makes it much easier to get started, since you can basically have a fully self-contained package.

In the end, I don't think I would pick the technology solely based on how easy it is to deploy. With a little legwork, you can create installer packages for your major platforms, using any of the mentioned platforms (Well, perhaps mono/asp is a bit dodgy, but it could work).

troelskn
With PHP, the biggest hurdle will be in creating an intuitive installer (especially if you expect it to reconfigure your Apache hosts). Just be sure to research the cross-platform dependencies for any of the more complicated code and do the appropriate extension requirement checks at install-time.
Nolte Burke
For PHP, use a ready-made cross-platform installer, like zend server (http://www.zend.com/en/products/server-ce/index), and don't use any non-standard extensions to avoid locking yourself in.
Joeri Sebrechts