Application deployment

Distributing your web application code on the multiple nodes of a freistilbox cluster will work only if it is installed completely identical on all cluster nodes at all times. Inconsistencies, for example in the form of different code revisions, will result in website behaviour that would at least confuse your visitors or, in the worst case, break your website.

To avoid these problems, we provide a centralized deployment process. You need to upload your changes only once; our infrastructure then takes care of distributing them to all affected boxes within seconds.

Version control with Git

Updating distributed services from a central code base is the ideal task for modern version control systems. We chose Git for that purpose.

Every freistilbox website instance has its own central Git repository that stores its Drupal installation. From this central repository, all the webservers responsible for delivering your site update their local Drupal environment after every change you upload. Technically speaking, they clone the central repository.

Git repository structure

The Git repository should contain the following items in its root directory:

  • the subdirectory docroot with your web application code,
  • a file named Boxfile which controls deployment behaviour,
  • and a hidden file named .gitignore.

We’re going to explain these files and directories in detail below.

docroot

The docroot directory contains the code base of your web application, for example a Drupal distribution. It will be used as document root by our webservers.

docroot should only contain application code! Make sure not to put files in there that need to be updated by your application, for example Drupal’s sites/default/files directory. These should be in a shared folder, as defined in the Boxfile.

Boxfile

Because the Boxfile documentation needs a bit more space, we’ve put it on a separate page: Boxfile

.gitignore

Your .gitignore file should at least contain the following entries:

/config
/private
/tmp

You should also exclude directories that need to be shared between boxes, for example:

/docroot/sites/*/files

To avoid accidental checkins, we recommend you also exclude environment-specific files like

/docroot/.htaccess
/docroot/.htpasswd