I'm very excited to publish the first article on a new tech stack as part of a rebrand... I've hosted content under DeadlySyn Labs (deadlysyn.com) for several years. The original intent was to have an InfoSec focus, but over time it slanted more toward DevOps/SRE and full stack development. To better align the name with the content, I've migrated to DevOps Dreams. 👋

As part of the rebrand, I also decided to rethink how the site is hosted. I made a conscious choice to move from GitHub Pages to AWS (S3 for static content) and Cloudflare (DNS, CDN and SSL). One reason for that was daily interaction with technologies more relevant to my career. I was leveraging Jekyll with GitHub Pages, and honestly prefer creating vanilla HTML, CSS and Javascript. It's also nice to exercise familiar cloud infrastructure as part of managing the site. The nice thing is that hosting the static content fits nicely into AWS' free tier.

Philosophically, I also wanted to put fewer eggs in the GitHub basket since Micro$oft acquired them. I have a lot of history with GitHub, using them almost since day one professionally and personally. As a UNIX geek with over twenty years in the industry, I also have less than fond memories of being in Silicon Valley when Microsoft went on their (in)famous "Linux is a virus" campaign (top officials at the time equated it to cancer, and as someone directly impacted by the big C, that's offensive and not something to take lightly).

Technically, I also feel it's good to switch up some of my comfortable routines...even moving personal development content to GitLab.  I will no doubt continue using GitHub professionally (or whatever tooling my employer requires), so it's nice to be exposed to different UI/UX in my spare time. Besides, it's all actually Git.  😱

I've also moved the blog from GitHub Pages to Ghost. This is the most exciting change, since it makes the entire publishing workflow easier and more enjoyable. My initial plan was to host the blog on AWS as well. Doing that right requires multiple EC2 instances of a medium-ish size, an ELB, elastic IP, EBS volumes and RDS.

Hosting the blog on AWS can be more expensive than simply paying for the entry level Gost Pro plan. Getting philosophical again, paying the Ghost team to host the blog for me also supports an amazing set of developers and the FLOSS community. For now, this is the right fit for DevOps Dreams. Configuring a custom domain was a breeze, and they provide a SSL certificate for free! I'm hoping the simplified workflow helps take some friction out of publishing quality content on a regular basis.

This is already getting long for a introductory post, so I want to wrap up with a couple resources... If you are interested in hosting your own website, want to do it for free, enjoy playing with cloud infrastructure, and have an hour to invest (it's really that easy if you have the static content and domain already), check out this article.

Aside from some minor Cloudflare UI changes (nothing to prevent you from following along), the instructions are detailed and work perfectly.  If you have any questions about it, feel free to reach out and I'd be happy to help.  As a quick addition, two things I suggest before uploading content (which you'll be doing a lot if you lose hours tweaking CSS like I do) and going live is to apply a simple bucket policy and billing alert.

For the bucket policy, simply follow the article and when you get to creating a S3 bucket named after your domain, go to Permissions > Bucket Policy and paste this in (changing the bucket name to match the one you created):

    "Version": "2012-10-17",
    "Statement": [
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::yourdomain.tld/*"

This would usually be a bad practice, but since the point is hosting content anyone on the Internet can read...this will save you from having to set permissions on each file upload.

Finally, go to Services > Billing > Budgets > Create budget (you may need to use your root account for this step). From there, you can simply work through the wizard to setup a dollar amount and email address for the alert.  This way, if you get a billion views over night and exhaust S3's free tier you'll have a chance to adjust as needed.

If you got this far, thanks for reading...  stay tuned for more DevOps Dreams.