A guide to building platforms with Drupal

21 comments

Building the Wedful platform took me about a year of pain, tears, blood, and triumph (not necessarily in that order) and since then I've been contacted by several people going through the same difficulties themselves with putting together their own Drupal platform. Wedful is designed specifically for couples planning their weddings to be able to easily launch a website and manage the details surrounding their weddings online, so we needed to be able to easily manage hundreds (hopefully tens of thousands someday) in a scalable manner. Some of the people I've spoken to have been looking to build niche products for the restaurant industry, hotel industry, and even one with a similar concept to Drupal Gardens.

Over the next several weeks (more likely months, there's a lot to cover ;-)) I'll be writing a series of blog posts on just this topic to help anyone else looking to build a Drupal platform of their own. Something that will hopefully reduce the pain, tears, and blood aspect of the process :). I'll initially cover all of the fundamentals and building blocks of the process, such as best practices, features, drush, make files, etc. and then get into the bigger topics of install profiles, distributions and using Aegir to actually build a vanilla Drupal platform. Following that I'd like to write about some more advanced topics such as passing data from Aegir to your site and not giving up UID 1 when you give away sites to the masses.

This will all be Drupal 7 centric, though I'm certain that much of the information will apply back to Drupal 6 (I'll try and make notes where this isn't the case) and likely forward to Drupal 8. Since I've done only a small amount of work on platforms in D7 this will be a learning process for me too, as I work through building a comprehensive Drupal 7 platform.

Ultimately I plan on focusing on two main use cases. The first would be a wordpress.com style of service for simple brochure websites. The second will be using the same techniques to manage a single site deployment with a scalable dev -> stage-> live workflow. Both use very similar techniques so almost everything I cover will apply to each use case.

I'll start next week with a few posts on building features. If there's anything anyone's interested in learning more about that's inline with this "platform" topic, just post a comment or send me an email and I'll see if I can work it in.

Peanut Gallery

Drupal Error Message

Simon

Great site and idea....
I'm currently doing something similar, but opted for customisable OG's rather than complete site installs.

Just for you info getting this error when I try and sign up on wedful:

warning: Invalid argument supplied for foreach() in /home/aegir/hostmaster-6.x-1.2/includes/common.inc on line 927.
warning: strtr() [function.strtr]: The second argument is not an array in /home/aegir/hostmaster-6.x-1.2/includes/common.inc on line 944.

Best to turn error messages off on production I think.

Good luck with wedful.

Thanks!

Scott Hadfield

Thanks Simon!!

I was doing some work the other day and forgot to turn it off again. And thanks for letting me know about the error message!

I've worked on another project before that used the OG strategy. That would also probably be preferable if the user accounts are generally used between the different groups.

Looking forward to it! I've

Looking forward to it! I've subscribed to your 'platforms' tag RSS feed in preparation.

If possible, I'd like to hear more about building an install profile/distribution by setting up a 'master' site, then dividing it up into exportable features and somehow converting them into a profile... Is it best to do it that way, or to build each feature separately?

Probably both.

Scott Hadfield

I'll definitely be talking a lot about features, as they're a big part of this being possible. To answer your question, the best way I've found to do it is both.

Things like blogs, photo galleries, etc, things you can re-use... build them into re-usable features that you can plug into any site (particularly future distributions you want to build). But in addition, you'll also need to split up the "master" site so that all of the configuration options, content types, views, etc. are split out into features. There will be a large number of things that don't make sense in a re-usable feature and you'll only want to use on this particular distribution.

In general, most sites I build have two or three re-usable features and approximately 5 features that are specific to various components of that particular site.

Can't wait to see your next

Franco

Can't wait to see your next post about that. Rock on!
...
I think this post was very interesting for many people because site wedful.com is not responding right now
:)

Fantastic!

Eaton

This is incredibly exciting, Scott -- you're doing the kind of stuff that we've been talking about for years, and it's amazing to see the foundational work in Drupal paying off.

Thanks for letting us peek behind the curtain!

a lot of work still left

Scott Hadfield

There's definitely still a lot of work left, but ya, the foundational work is now "good enough" to do this sort of stuff. When we started building this it wasn't yet possible to do what we wanted to do, but things like Drush, Aegir, Features (among other things) sure made it a lot easier! :) And it looks like D8 is shaping up to be even better for doing these kinds of things.

I imagine you guys have already done a tonne of this stuff with buzzr too. I'd be very interested to know what you guys have running under the hood there ;-).

Awesome!

I'll be following this closely. I'm building Drupal distributions for my non-profit, FreeGeek Chicago, and for the US Dep't of Energy E-Center project.

While neither project needs the large scale provisioning provided by Aegir (I love Aegir! I love Koumbit! But I have no need of it in my day-to-day work) we are using the same techniques to achieve continuous integration and testing with nightly test builds and the like.

Me to

Scott

Just launched my website using Aegir not gone for to much of a niche targeting small business to start and plan to add more features as I go along. Its fussfreeweb.com any feed back welcome.

Nice work

Scott Hadfield

That's great Scott. I think as this stuff becomes more streamlined you'll find more and more Drupal services companies taking a similar approach to creating client sites as you guys have. I think at some point, every Drupal services firm that wants to compete will need to have their own customized distribution (or two) for launching client sites.

just subscribed to your rss feed

i'll be following this series! thanks!

tracy

Will also be following along

Wedful is a fantastic example of what can be done with Drupal for Software as a Service type products. Having already consumed everything you have written about your process with this product, I am thrilled you will be writing more on the process of building platforms in drupal. I will be eagerly following along this blog post series in the hope of learning more I can apply to the product I am working on. Awesome work and thanks for sharing :)

thanks Gregg

Scott Hadfield

The ultimate goal of this series is to basically put this power in the hands of all drupal developers ;-). But seriously, by the end of it I hope everyone who wants it, has the information necessary to build a replica of Wedful for their own idea or niche industry.

wow!

Scott Hadfield

Wow! The response to this post has been amazing, it sounds like there's really a demand for this kind of information. If it makes sense I may turn these posts into more of a formal eBook later on and see how it goes.

Workbench

Anonymous

Have you looked into the workbench module created by Palantir? It has some great workflow states & could be a good addition.

http://drupal.org/project/workbench

Here's a blog post about it
http://www.palantir.net/comment/453

I haven't

Scott Hadfield

No, I've not heard of workbench before right now, tbh. It definitely looks like it could help a lot in improving usability for end users though. Still just reading through the posts :).

Thanks!

Outstanding!

I love the idea, whatever time you can direct to utilizing drush would be outstanding, I'm clueless when it comes to setting up drush on 7 to maintain a workflow through my hosts. Looking forward to the upcoming posts!

YASR

Yet Another Stoked Reader.

Thanks for taking this on. I am stoked! :) I've been working a lot with Features for several months and have been trying to get my head around various bits of the site that just don't fit. I'm eager to hear about what you learned about the division between managing configuration in Features versus installation profiles.

Also Stoked

My team and I are in the process of building 5 different apps/platforms on Drupal right now, all in different states of development), but 1 is in internal alpha right now and another will be rolling out next month. Curious to hear your thoughts, and will try to share our as we progress.

- Willy

Thanks, I'm keenly interested in this.

Features, distributions, installation profiles, Aegir, etc. I think Drupal is well positioned to be a web business development toolkit. Drupal can do almost anything. However, very few people have the skill, time and inclination to choose and configure the appropriate pieces for any specific application. These tools and techniques to pick, choose and integrate pieces into a packaged, tightly focused, easy to use solution from which thousands of identical instances can be instantiated provide an incredible opportunity for developers to add value. It seems to me like the technology to build class factories where each instance is one of many possible types of web sites. Thanks for sharing your investigations into these topics.

Hi, thanks for the guide to

harry

Hi, thanks for the guide to help build platforms in Drupal. I am new to this technology but really wanted to learn. I appreciate you for putting together this tutorial so that novices like me can have a grasp of the subject.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options