November 9, 2012

Introducing Seed: Drush-Based Server Management

Here at Fuse we're excited to be taking the wraps off something we've been working on for awhile now, a project called Seed. Seed is a set of Drush commands which allow you to perform actions such as setting up new user accounts, creating MySQL databases and setting up new projects for developers.

A little backstory

Seed is essentially scratching an itch that's been bothering us for some time. We've had a fairly comfortable development workflow for awhile, however it's been held together by a number of PHP scripts and knowledge floating around in Andre's head. Furthermore there's some things that have traditionally been done manually, such as the creating and deletion of user accounts, adding user keys to our account or setting up new projects. Our goal was to unify a lot of the management tasks and everyday tasks in to a single package.

Our development workflow

Our workflow is relatively simple but it works well for us, and we believe could work just as well for other small to medium Drupal development teams. Here's a brief overview:

Our project code is stored in Git repositories, currently hosted on

We have a single development server which everyone develops on

Each person working on a project has their own checkout of the code and a virtual host pointed to it, for example

Typically we'll share a database between everyone working on a project, however there are certain situations where someone will "branch" the database (similar to Git) to do some work without disrupting anyone else who is working on the project.

How does Seed support this workflow?

Seed facilitates a number of aspects of this workflow from a simple command line interface. Seed handles:

The creation and deletion of system-level users, as well as the generation of SSH keys and optionally the pushing of these keys to our Bitbucket account.

The creation and deletion of MySQL users and databases.

Initializing a new project and adding Git remotes. Alternatively, Seed can checkout projects from Git.

Setting up virtual hosts for new projects.

Setting up aliases for local projects as well as projects which may have been deployed to remote servers.

What about Aegir or a hosted platform?

Before building Seed we took a look at other options available to us. While Aegir or hosted platforms (for example Pantheon or Acquia's Dev Cloud) are all excellent products, the goal of Seed was not to disrupt our workflow and infrastructure, but rather to streamline it.

How can I try it out?

First of all, Seed is not production ready but we'd love for you to check it out and give us your thoughts. Secondly, we're assuming this will be running on an Ubuntu based install and we've been specifically targetting the 12.04 release, which is a good candidate as it is an LTS release. We'd definitely recommend running it in a virtualized environment for testing, and if you're looking for a virtualization application VirtualBox is a great little app which runs on any platform.

To get started, do a fresh install of Ubuntu then simply follow the INSTALL.txt to set up the necessary packages and configuration. Once that's done, you can view the README to learn about the various commands that are available to you. You should also run seed test to ensure that everything is working correctly.

What's next?

With Seed, we're going to be eating our own dog food. As such, support will be on-going as we continue to make improvements and add functionality.

With that said, patches are 100% welcome. We'd love to see other Drupal development companies taking a look and giving their thoughts as to how the system could be improved to support different workflows, or just general ideas, bug fixes or questions.