Recently I sold my old sailboat and purchased a new (to me) one. With this new, larger, and older boat, I wanted somewhere for my wife and I to post about working on the boat as well as our (hopefully awesome) sailing adventures. While I wrote and continue to maintain the blogging engine that powers this site, I really wanted to play around with a more mainstream blogging engine for the new site. I asked the Twitter community for suggestions on engines to check out and received quite a few: Ghost, GitHub Pages, Tumblr, Squarespace, Jekyll, Ghost, and WordPress.
Some of the requirements I had for the new site included:
- Minimal coding needed to get going (I already code enough on this engine)
- Theming support with publically available themes (I’m terrible at art)
- Support for multiple authors (my wife wants to be able to post as well)
- A decent web based post editor
- Back when I started with Veritas, the options for web based HTML editors that you could embed was pretty weak (the one I had been using produced really poor HTML / CSS). I know this is something that has gotten better and I’d like to not be tied to Windows Live Writer like I am with this site.
- Good URL SEO (I don’t want URLs to contain a year and a month and a blood type)
- Rich plug-in support (this goes back to me not wanting to code a lot)
- Mobile support (this was a stretch but being able to admin the site from my phone would be nice)
- Custom domain support
- Runs on Azure (why would I put it anywhere else?)
After figuring out what I wanted and taking a look at all of the suggested solutions, and a few others, I came down to one winner. Before we get to the winner, let’s talk about the non-winners.
- GitHub Pages
- This is essentially free web hosting inside of your GitHub repo. You can create a page for your organization and / or for a specific project. Additionally you can do custom domains. Where this appears to fall apart is the theming, plug-ins, and more advanced features. I know a lot of people using GitHub pages and think they’re great for things that are either more simple or if you have more resources (i.e. a designer) but I have neither.
- I probably spent the least time evaluating Tubmlr but it didn’t seem to fit my needs based off of what I’ve seen whenever I view someone else’s Tubmlr site.
- This is a newer service that I had not heard of before. They have some really great templates to select from but it really seems more intended for either a company’s site or maybe a celebrity’s. I’m neither and the real nail in the coffin is that they charge. They were kind enough to tweet back to my above mentioned message and say there is a free trial but I’m not interested in paying for the site today.
- Jeykll is a static-site generator that is written in Ruby and is used for many blogs including my friend Justin’s site, Carpeaqua. Additionally this plugs into GitHub Pages for free hosting. This gets into some of the same issues with GitHub Pages. I don’t want to deal with the code or CSS or figuring that stuff out.
- Ghost is another new blogging platform that seems to be getting a lot of attention as of late. There are lots of themes available, you can easily deploy a Ghost blog to Microsoft Azure, it’s used on some heavily visited sites, and is gaining in popularity. Unfortunately it’s still new so plug-in support and extensibility might be an issue. I could probably extend anything not there myself but, (are you sensing a recurring theme) I don’t really want to deal with the code.
At the end of the day, WordPress ended up being the winner. I’ve played with WordPress before but it’s been a few years since I looked at it in any depth. Some of the factors that lead to WordPress’s winning (aside for everything else not winning) included:
- Completely open source. This is a solution that can be hosted anywhere including…
- Super easy deployment to Azure. WordPress is in the Azure Web Sites gallery so you can deploy a new WordPress blog on Azure in a couple minutes.
- Multiple author support
- Mobile app support (even if the site isn’t running on wordpress.com).
- Themes (tons of themes as well as info on customizing those themes).
- Custom domain support (which Azure also supports (outside of free mode)).
- URL SEO options
- Plug-ins. There are tons and tons of plug-ins.
- A good web-based HTML editor (in addition to an editor in the mobile app).
Deploying WordPress on Azure
Once you’ve signed up for a FREE Azure account, it really is super fast deploying WordPress. After logging into the Azure Portal, click the New button at the bottom left. Under Compute, select WEB SITE, and then FROM GALLERY. A new window will appear with all of the different options for web site apps that you can deploy. At the bottom you’ll find WordPress. You’ll next get to the Configure page where you can specify the URL of your site, what database to use (more on this soon), and a bunch of deployment settings (Auth key, Secure Auth Key, Logged In Key, etc):
To fill all of the deployment settings, it’s useful to use WordPress.com’s provided value generator. The last step before deployment is to create a new database or select an existing database. We’ll talk more about that shortly. After that the deployment starts. After a minute, you can then browse to the site and complete WordPress’s initial configuration. From there, you’re done. You can do any theming you want or add any additional plug-ins or just start blogging.
The MYSQL Database
Out of the box, WordPress relies on MySQL for it’s data storage. Microsoft Azure doesn’t provide MySQL like it provides SQL Database (based off of MS SQL Server) but relies upon a partner, ClearDB, to provide MySQL databases on Azure. From a developer perspective, this is all abstracted away from you when you generate your WordPress blog. A MySQL DB is generated that is running in Azure and is tied to your WordPress site. However, when you are looking at cost and size of the DB, this system becomes a bit more of an issue. ClearDB has their own pricing for your MySQL databases running on Azure. The one generated when you create your first WordPress site is free and will continue to be free up to 20 MB. When you want to go above that, the first plan (up to 1 GB a month) is $9.99. That’s more than I want to pay. Additionally, I don’t like having complete control over my database.
I still wanted to stick with WordPress on Azure, but I wanted another option for my database. The first thing I stumbled upon was this post on connecting WordPress on Azure to SQL Server instead of MySQL. This seemed great. I’m already using a SQL Database in Azure for this site. All I would need to do is generate a new database on my server and point my WordPress site to it (after porting the data / schema). I was pretty excited about how easy that sounded but, not being super comfortable with WordPress or the underlying PHP code, I wanted to ask someone that knew these things a bit better first. Thankfully, Cory Fowler, is super knowledgeable at all of these things. Cory let me know that while it would indeed work, the issue was that while the WordPress code itself would work fine with SQL, any plug-ins would potentially have to be tested or recoded to work with SQL. This strongly violated my “I don’t want to code a lot” requirement. Thankfully there was another option: running MySQL on a VM!
MySQL on a VM
I’m far from an IT admin, but I’ve worked enough with Windows Server and Windows to be comfortable moving around it. This meant that my fear of dealing with a Virtual Machine was low. I quickly found this guide on Installing MySQL on a Virtual Machine Running Windows Server 2008 R2 in Azure. I choose to use Windows Server 2012 instead of 2008 but it was very easy to go from this guide to 2012 without much work. I had already setup my WordPress site and didn’t want to reconfigure it, so I really needed to get a backup of my ClearDB database and restore that to my MySQL server in the VM. To do so, I first downloaded the MySQL Workbench tool. You can write all of the queries yourself but Workbench makes it much easier. Next, go to the Azure portal and navigate to your WordPress site’s Linked Resources tab. Clicking on the name of your database will take you to the ClearDB portal. Here you can click on the Endpoint Information tab:
Take this information and open MySQL Workbench. From the home screen, you should see Server Administration on the right side. Select New Server Instance below that. Enter the Hostname from above into the Remote Host Address in Workbench and click Continue. At the next screen, copy over the Username and click Continue. After finishing the wizard, double click the new instance and you should be taken to an Admin page. Select Data Export from the left side, select your database, ensure all tables are checked, select a place for the output file and start the export:
Once the export is complete. You can go back to the home screen and add the MySQL server on your VM as a new instance. After getting to the admin screen for your new MySQL server, go to the Data Import / Restore section and import from the local file you generated with the export. Start the import and your new DB will be available.
Changing the WordPress Config
The last change you have to make is to the WordPress source code. The easiest way I’ve found to do this is to return to your site in the Azure portal and go to the Dashboard tab. On the right hand side under QUICK GLANCE, you should see an FTP Host Name link. Open this link in FTP and use the DEPLOYMENT/FTP_USER username and the password you’ve set up (you should see a link to set or reset your credentials if you don’t have them) to connect. Once you’ve connected, open the site directory and then wwwroot. You’ll want to pull down the wp-config.php file. Once you do, open that file and enter the correct values in the db_name, db_user, db_password, and db_host. Save these changes and copy the file back to your site via FTP and that’s it, you’re done.
It’s amazingly easy to get WordPress running in Microsoft Azure via the Web Sites gallery and ClearDB’s MySQL service. Today we’ve seen that if you really want as much control as possible, you can roll your own MySQL server in a virtual machine running on Azure. I should add that this VM usage isn’t free (not like the free 20 MB ClearDB MySQL server). That said, with the low usage I’m expecting for the site I’m running on a super small VM which even with the additional cost of storage, is a bit over $10 / month. I’ve scaled the site up (it’s on the same hosting plan as this site) so there’s a separate cost for that, but at the end of the day, I’m paying very little for a super reliable site. That’s all there is to it, you can check out the new blog at SailingMakai.com.