Today Lukas and Penny are releasing their Open Source infrastructure for building Debian packages for deployment of Symfony2 applications.  This builds on the work done by Penny's previous employer, Catalyst IT in New Zealand,  which was originally written for deploying Moodle applications.

This work was done for a client project, which uses a single Symfony2 project as the source package for multiple applications, to be deployed on different servers, each with their own distinct application profile, dependencies, cronjobs, apache config, etc.  Since Lukas hates perl and Penny hates documentation ;), it was a good division of labour.  It is now very well documented, with example config and in depth descriptions of how it works internally.  The perl is certainly not quite so nice as the documentation ;)

The basic idea is that the application maintainer writes a yaml manifest file to describe the different application profiles, and then a giant perl script parses it, and builds a .deb for each application.  These can then be placed into a debian repository, or installed directly on servers with dpkg.

Another feature that's really neat is that for each application,  the packaging looks for a file, dynamic.yml.dist inside the config/ directory, and converts each key in the yaml file into a debconf question, which will be asked during installation time.

The first time you run the maketime.pl script, it will generate you skeleton templates of the metadata files it needs, so you can go through and fill them out.

This does rely on a quite specific project structure of the Symfony2 source, as well as some specific configuration on the target deploymetn server, both of which are also well documented.

It uses dbconfig-common, a database configuration abstraction layer in Debian, so theoretically supports multiple database types, but has only been tested with PostgreSQL to date.  It will work with local and remote databases.

Many thanks to Pete Bulmer, the original author and Francois Marier for the licensing.

The code is now on github, and it would be great to get more people playing with it and testing it! Have fun!