When I first saw Gatsby (@ElliotJ), I had two impressions:
(1) That's a really nice site design, and
(2) That's a great idea - wish I'd thought of it.
Now that it's gone, last night I was thinking about what it would take to create something similar.
So What Do you Need?
Realistically, you'd need
- a server
- DDOS protection - it'd be very easy to have some user's drama result in many gbps you don't want.
Could this be run on a VPS? Maybe. Let's use BuyVM as an example because I'm familiar with them and they provide DDOS protection. Let's say you start with:
- the largest BuyVM KVM (with DDOS Protection)
- another large KVM for MySQL
The problem is that you've only got 70GB of disk, which may not be sufficient for many user accounts. There's the storage KVMs, but in my experience they are excellent for backup/storage but are often overtaxed for something like hosting. And they top out at 1GB RAM.
The math is the same for other well-known providers - you could scale by adding more VPSes but I suspect ultimately you'd need to look at a dedicated server. Prior to shutdown, Gatsby ran on a dual quad-core box (according to its status page). I think you'd need RAID-redundant hard drives and maybe a local backup drive as well.
Looking at QuickPacket (just because I'm familiar with them), a dual quad-core 2.5Ghz server, 24GB RAM, with 2x2TB SATA for primary storage + a 2TB backup drive is $115/month. Of course, one could start with something smaller - an Atom!?
And that doesn't include DDOS protection (which ain't cheap) or GRE from BuyVM/whoever.
It's unfortunate all of the major cloud providers (AWS, Azure, etc.) charge per GB of bandwidth, because that make it infeasible.
Business Model?
The vast majority of your clients would want simple free hosting. I don't think Gatsby had any limitations on size but I could be wrong. You'd probably have to put some in - I mean, I have 50GB of pictures on my self-hosted photo-sharing blog - wanna host it for free?
You could charge for premium features, a la wordpress.com, such as custom domain names, CDN, etc. It would not be hard to undersell wordpress.com - the prices they want are outrageous. I think that was Gatsby's long-term plan (via cake.io) though I don't know if that ever got spun up.
But ultimately I think this would be a labor of love. You could offset some of the costs but I'm not sure one should go into it with the idea of making money.
It'd be possible to take donations also.
Heck, considering some of the crap I see on Kickstarter, crowdfunding should be an option, though I think KS is "build something, not fund a business/organization".
WordPress Choices
For wordpress itself, you have to make some decisions:
- Do you allow people to install any plugin they want?
If no, can you disable that? How do you take requests for new plugins? Do you install every allowed plugin for every user, which could be overwhelming. For example, someone may want Disqus, many people won't care.
If yes, how do you handle bad plugins?
- How do you handle anti-spam? Akismet for enterprise is waaaaaay too expensive. Prior to shutdown, Gatsby used Cloudflare (not sure exactly that) + reCaptcha + an in-house "obvious comment spam" system.
- How do you handle wordpress updates? realistically you have auto-update for people otherwise you'll have zombie blogs that compromise your server. You'd need to update plugins, too.
- Speaking of zombie blogs - probably need to require people login to their admin panel once every X days or their blog gets nuked.
- And you have to pick out some nice themes, etc. Do you allow people to install any theme they want? What's to stop a user from uploading 2GB of themes, picking one, and letting the rest sit there soaking up disk space?
- You could potentially reduce your processing by requiring use of SuperCache. But when I played with it several years ago, it was not 100% reliable and I had to periodically manually refresh the cache, etc. Maybe it's better now. But of course you're trading disk space for CPU.
- Gatsby used Google Authenticator, which was a nice touch.
Other Software
What else do you need software-wise...
- Probably nginx for better scalability than apache.
- Presumably php-fpm and some kind of opcode cache (apc, etc.)
- MySQL or MariaDB or Percona or whatever. Does WP prefer MyISAM or InnoDB?
- A nameserver for subdomains and perhaps custom domains - maybe NSD would be sufficient.
- Monitoring
- Backup - which could potentially be a real pain. You'd need to backup all user's home directories + MySQL on a regular basis. Realistically, for free users, you could only promise perhaps weekly backups and divide them so you're only backing up 1/7 of your customer base on a nightly basis. But that then either goes to another local drive, another server/VPS on the same LAN, or you're burning bandwidth/time to upload somewhere. Daily backups could be a premium feature.
- also, what about HTTPS? Presumably you'd want HTTPS for logins but HTTPS for everything would be another option. Then again, if they're public blogs, HTTPS is kind of silly since it's all public info.
- what about private blogs? e.g., not available to the general public, only to invited people? I don't remember if WP supports that or not out of the box. In that case HTTPS is not so silly, though now you have the headache of unwittingly hosting someone's child porn ring.
Custom Software
Now for software, you have to write some signup code, which isn't rocket science. When a new user signs up, you have to:
- email verify
- Create a home directory for him/her and untar your standard WP config into it. Note this means that every time WP is updated you have to update your config and test it.
- Create a subdomain (myblog.example.com) in your NS
- Update your web server config
- Put your defaults into the WP config. This could probably be a DB operation or better to do it through WP itself. This is setting SuperCache to true (perhaps), setting the user's signup blog name, turning on the plugins you want, etc. Maybe you have a new blog template DB you put in place.
- It would be interesting to see to what extent some of the redundant disk files could be replaced with links to a central copy. For example, all the .php that Wordpress uses, all the themes, etc. - rather than create a copy for each user, perhaps you could just create links.
- and of course once you start to charge (if you do) for premium features, some kind of merchant setup.
You'd also need some custom reports. I think you'd want to have some data to tell you info on typical blog size, how often people typicaly login/access, capacity planning, etc.
(1) That's a really nice site design, and
(2) That's a great idea - wish I'd thought of it.
Now that it's gone, last night I was thinking about what it would take to create something similar.
So What Do you Need?
Realistically, you'd need
- a server
- DDOS protection - it'd be very easy to have some user's drama result in many gbps you don't want.
Could this be run on a VPS? Maybe. Let's use BuyVM as an example because I'm familiar with them and they provide DDOS protection. Let's say you start with:
- the largest BuyVM KVM (with DDOS Protection)
- another large KVM for MySQL
The problem is that you've only got 70GB of disk, which may not be sufficient for many user accounts. There's the storage KVMs, but in my experience they are excellent for backup/storage but are often overtaxed for something like hosting. And they top out at 1GB RAM.
The math is the same for other well-known providers - you could scale by adding more VPSes but I suspect ultimately you'd need to look at a dedicated server. Prior to shutdown, Gatsby ran on a dual quad-core box (according to its status page). I think you'd need RAID-redundant hard drives and maybe a local backup drive as well.
Looking at QuickPacket (just because I'm familiar with them), a dual quad-core 2.5Ghz server, 24GB RAM, with 2x2TB SATA for primary storage + a 2TB backup drive is $115/month. Of course, one could start with something smaller - an Atom!?
And that doesn't include DDOS protection (which ain't cheap) or GRE from BuyVM/whoever.
It's unfortunate all of the major cloud providers (AWS, Azure, etc.) charge per GB of bandwidth, because that make it infeasible.
Business Model?
The vast majority of your clients would want simple free hosting. I don't think Gatsby had any limitations on size but I could be wrong. You'd probably have to put some in - I mean, I have 50GB of pictures on my self-hosted photo-sharing blog - wanna host it for free?
You could charge for premium features, a la wordpress.com, such as custom domain names, CDN, etc. It would not be hard to undersell wordpress.com - the prices they want are outrageous. I think that was Gatsby's long-term plan (via cake.io) though I don't know if that ever got spun up.
But ultimately I think this would be a labor of love. You could offset some of the costs but I'm not sure one should go into it with the idea of making money.
It'd be possible to take donations also.
Heck, considering some of the crap I see on Kickstarter, crowdfunding should be an option, though I think KS is "build something, not fund a business/organization".
WordPress Choices
For wordpress itself, you have to make some decisions:
- Do you allow people to install any plugin they want?
If no, can you disable that? How do you take requests for new plugins? Do you install every allowed plugin for every user, which could be overwhelming. For example, someone may want Disqus, many people won't care.
If yes, how do you handle bad plugins?
- How do you handle anti-spam? Akismet for enterprise is waaaaaay too expensive. Prior to shutdown, Gatsby used Cloudflare (not sure exactly that) + reCaptcha + an in-house "obvious comment spam" system.
- How do you handle wordpress updates? realistically you have auto-update for people otherwise you'll have zombie blogs that compromise your server. You'd need to update plugins, too.
- Speaking of zombie blogs - probably need to require people login to their admin panel once every X days or their blog gets nuked.
- And you have to pick out some nice themes, etc. Do you allow people to install any theme they want? What's to stop a user from uploading 2GB of themes, picking one, and letting the rest sit there soaking up disk space?
- You could potentially reduce your processing by requiring use of SuperCache. But when I played with it several years ago, it was not 100% reliable and I had to periodically manually refresh the cache, etc. Maybe it's better now. But of course you're trading disk space for CPU.
- Gatsby used Google Authenticator, which was a nice touch.
Other Software
What else do you need software-wise...
- Probably nginx for better scalability than apache.
- Presumably php-fpm and some kind of opcode cache (apc, etc.)
- MySQL or MariaDB or Percona or whatever. Does WP prefer MyISAM or InnoDB?
- A nameserver for subdomains and perhaps custom domains - maybe NSD would be sufficient.
- Monitoring
- Backup - which could potentially be a real pain. You'd need to backup all user's home directories + MySQL on a regular basis. Realistically, for free users, you could only promise perhaps weekly backups and divide them so you're only backing up 1/7 of your customer base on a nightly basis. But that then either goes to another local drive, another server/VPS on the same LAN, or you're burning bandwidth/time to upload somewhere. Daily backups could be a premium feature.
- also, what about HTTPS? Presumably you'd want HTTPS for logins but HTTPS for everything would be another option. Then again, if they're public blogs, HTTPS is kind of silly since it's all public info.
- what about private blogs? e.g., not available to the general public, only to invited people? I don't remember if WP supports that or not out of the box. In that case HTTPS is not so silly, though now you have the headache of unwittingly hosting someone's child porn ring.
Custom Software
Now for software, you have to write some signup code, which isn't rocket science. When a new user signs up, you have to:
- email verify
- Create a home directory for him/her and untar your standard WP config into it. Note this means that every time WP is updated you have to update your config and test it.
- Create a subdomain (myblog.example.com) in your NS
- Update your web server config
- Put your defaults into the WP config. This could probably be a DB operation or better to do it through WP itself. This is setting SuperCache to true (perhaps), setting the user's signup blog name, turning on the plugins you want, etc. Maybe you have a new blog template DB you put in place.
- It would be interesting to see to what extent some of the redundant disk files could be replaced with links to a central copy. For example, all the .php that Wordpress uses, all the themes, etc. - rather than create a copy for each user, perhaps you could just create links.
- and of course once you start to charge (if you do) for premium features, some kind of merchant setup.
You'd also need some custom reports. I think you'd want to have some data to tell you info on typical blog size, how often people typicaly login/access, capacity planning, etc.