Deploying applications with dependencies

sinθ asked:

This is extremely basic (It’s probable really obvious too), but it’s so basic there is nothing on it. Do I treat a remote linux server like a treat my computer when testing? For instance, on my computer I installed pip then used that to install Django and a plug in. Would I do the same on a remote linux server over ssh?

Sorry if this is the wrong stack exchange site to post this question on, but from a quick look at all of them, this one seemed the best option.

My answer:

In short, yes.

When deploying an application, we usually have three (or more; see below) machines involved:

  • The development machine
  • The staging machine
  • The production server(s)

In this very common model, developers write their code on the development machines, push code changes to the staging machine for testing, and finally the tested changes go into production.

To keep gremlins to a minimum, we generally want the servers to be configured as close to identically as possible.

So, you can ssh into each system and install the same software (and the same updates) on each machine, but in production, you may have more than one server (e.g. for load balancing). You may find your app gets popular and you have to scale out to hundreds or thousands of servers. Wouldn’t it be nice to be the next Twitter and make millions of dollars?… (oh wait.) But you can’t ssh into every one of them anymore to apply your updates if you have several thousand servers, or even a few dozen.

This is where configuration management systems like Puppet and Chef come in. These help you by applying identical configurations to a large number of machines at once (see their respective sites for further details). Once you get beyond the point of needing more than one server, it helps a lot to have a system to keep them all in sync and updated with exactly the software you expect in exactly the configuration you expect.

View the full question and answer on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.