created Feb 18, 2020
This Hacker News discussion began yesterday. The thread now contains over 250 comments.
"Building a static serverless website using S3 and CloudFront"
I have used the following Amazon Web Services:
- Route53 for domain name management
- EC2 for Ubuntu server hosting to run my CMS
- S3 for hosting static files
- CloudFront for caching
AWS offers many more features, with some being quite advanced for serious web infrastructure setup.
In my experience since 2013 or 2014, I find the Digital Ocean user documentation to be better written than the documentation for AWS.
The AWS web-based console can be a bit daunting to use for non-technical people, but AWS is meant for technically-inclined people.
I have created multiple S3 buckets, mainly for test sites.
For someone wanting to host a website with static files, such as HTML and images, along with no server-side CMS and other applications, then S3 is a good choice, in my opinion.
A user could use Route53 to purchase a domain name and point the domain name to the author's S3 bucket. I would leave CloudFront out of the mix, initially.
I have not used SSL/TLS with any of my S3 test sites. I use Let's Encrypt for one of my websites, hosted at Digital Ocean.
Before applying an SSL/TLS certificate, I would suggest that an author focus on how the author plans to create and update content and how to get the content on the S3 bucket.
An author can create and update Markdown or other text/plain files on a local computer. Those files could be stored in a Dropbox folder, which means those files get backed up to the author's Dropbox account out in the cloud. Dropbox costs a fee to use.
When saving files on a local computer, an author could use the command line to commit the files to a GitHub/GitLab repo for backing up the files, but this is leaning toward being quite technical for most people.
If the command line is not an issue, then the author can use the S3 command line tool on the local computer to copy the files to the author's S3 bucket.
Super technical workflow solutions work great for most of the geeks who post at and read Hacker News.
It is possible to upload files to an S3 bucket by using the AWS web console, which provides a simple way to upload files through the web browser. This would be better for people who don't want to work from the command line, but the AWS web console is not user-friendly for a mass audience.
Creating and updating text/plain Markdown files on a local machine means that some program is needed to convert the text/plain files to HTML. Again, this process may be too technical for most people because it might involve using a command line tool, such as pandoc or using a static site generator on the local machine, which also operates from the command line. Templates would need to be maintained for the header and footer sections of the web pages.
The so-called easiest solution would probably need to be decided by people who do not program nor design. I use Linux on the server and on the desktop, which disqualifies me from making suggestions.
My suggestion for my wife a couple years ago was to use Svbtle. It's a CMS-hosted solution. I "bought" her a domain name, and I pointed it to her Svbtle account.
Leasing a domain name, automatic renewal of the domain name, maintaining a current credit card to pay for the domain name, and the one-time DNS management of domain name mapping should be about as technical as it gets for using a CMS-hosted solution, such as blogger.com and wordpress.com.
Svbtle costs $6 a month to use, which, of course, means maintaining a current credit card to keep the service going. Even this step might be too much for many people, compared to posting at social media or compared to using a personal website with out a domain name, such as myname.blogspot.com or myname.wordpress.com. Credit/debit cards expire every few years. The info needs updated, or an author could lose the domain name and the CMS-hosted account.
The Admin Tax is a significant obstacle to attracting more non-technical people to use the open web. The big silos made it easy to maintain web presences for hosting content. Most social media silo users do not care about leasing a domain name and maintaining a personal website. But for the small percentage of non-technical people who may be interested hosting their own content, then they need setups that are super easy to use.
This is the top comment from the above HN thread:
I don't work for them or anything, but I've honestly found Netlify to be the absolute easiest solution for static site hosting. And it's free! There are some paid features, but the free stuff is all you need. You can use SSL, accept form inputs through request capturing, automate deployments with Github/Gitlab hooks, auto generate static pages for most popular static site generators (Jekyll, Hugo, etc.) Absolute breeze to use. Beats any hacky AWS solution hands down imo.
That sounds interesting to me, but that sounds daunting to non-technical people.
If someone wants to replace posting longform content to Facebook Notes, then to use the above setup, the user would replace Facebook's ease-of-use with:
- leasing a domain name
- DNS management for domain name mapping
- creating an account with Netlify
- creating an account with GitHub or GitLab
- learning git???
- possibly learning about SSGs, such as Jekyll or Hugo
- applying SSL/TLS cert???
I don't know how much of the above occurs automatically behind the scenes that requires no learning by the author.
Here's the filter bubble-related comment, made by someone who is technically proficient with web technologies.
Absolute breeze to use. Beats any hacky AWS solution hands down imo.
It's not a breeze to use, compared to posting to Facebook or even posting to myname.wordpress.com. The above description by the commenter would be viewed as "hacky" by non-technical users.
Sorry, but this all needs to be nearly as easy as a one-button install, assuming that's easy. I have very little experience with using wordpress.com. I created a test site account many years ago. I'm guessing that using wordpress.com as a CMS-hosted solution is quite popular because the WordPress crew has made it easy for non-technical people.
While the above commenter's suggestions interest me, I would never recommend it to my wife, who is a senior vice president in her company, nor would I recommend the above Netlify/GitHub/etc. setup to my Stepdaughter who works as a nurse and is currently attending school to become a nurse practitioner. Both my wife and my Stepdaughter are smarter than I am.
It's not about having the "smarts" to use a highly technical setup to maintain a personal website. It's about the technical interest of the users. I have been interested in computer programming for over 30 years, and I have been doing web programming since 1996. I have been using Unix/Linux systems since 1995.
When it comes to health care concerns, I consult with my Stepdaughter. If my Stepdaughter suddenly became interested in what server-side web framework to use to maintain a website, I could help her with that issue.
We have different interests. I could learn how to do repairs on my car, but I don't have the interest. I prefer to pay professionals.
But I DO have an interest in learning how to spin my own yarn and learn how to crochet my own sweaters.
Here's the second comment in that HN thread, which is a reply to the top comment.
I recommend using AWS Amplify if you need to stay within AWS.
The full product can be compared to Google Firebase but the Amplify Console specifically offers features similar to Netlify on top of standard AWS services (S3/CF/Codebuild).
I find it a much better experience than manually setting up S3/CF websites because of the out-of-the-box features that simply wouldn't happen otherwise for a static site like:
- instant cache invalidation
- branch deployments (with password protection & rollbacks)
- deployment process only deploys modified files
- simple custom headers
- simple redirects (redirecting individual assets in Cloudfront is not easy)
Again, that commenter's solution sounds juicy for me and most of the HN crowd. But for the carpenter, dentist, accountant, and landscaper who have never worked on a nix machine and have not worked from the command line in forever, they are going to have no clue what "instant cache invalidation" means. They probably won't have any interest in understanding "branch deployments."
If the intended audience is tech geeks, then to me, some of these so-called simple solutions are still too complicated.
Currently, if I wanted to use a CMS-hosted solution without having to pay for that service, then I would use GitHub Pages, and I would NOT use git from the command line on a local computer. I would use GitHub's simple web-based editing interface to create and update content, or I would connect prose.io to my GitHub account for a nicer editing interface.
http://perchwire.com is a test website that I built by using GitHub Pages and by creating and updating Markdown files by using GitHub's simple web-based editing interface. Now this means that my content is stored in only one location: GitHub.
Backups are always my concern. I could maintain backups on my current local machine and on physical storage, such as a thumb drive or SD card. But I would like a cloud-based backup too, such as Dropbox or an S3 bucket for backups only.
perchwire.com was a mirror of http://babyutoledo.com, which I created in 2015 for a local non-profit, and I maintain today. I built Baby U, using a database-backed CMS that I created in 2014. At Baby U, I also rely on Memcached. I did not need to use a server-hosted solution for Baby U, since it's web of documents-type of website.
If the website does not need to perform any complicated server-side functions, such as payment processing, then it's possible that the site could be hosted with CMS-hosted solution, instead of a server-hosted solution. To test this theory, I maintained an exact copy of babyutoledo.com at perchwire.com for a couple years.
Here's another "simple" solution used by someone at HN.
Agreed, Netlify is fantastic.
Another thing I really like, though I wouldn't really recommend it for corporate sites (but I would recommend it for personal sites because of the community/purpose) is Gitlab + Neocities. I use Gitlab CI to build my site, rclone to copy it to Neocities, and that's it.
Very simple, no-hassle combination with loads of bandwidth (I think my paid account has 3 TB/mo).
Right, very simple. The average person hanging out at a mall food court or exiting from a sports stadium or attending a holiday parade has experience with using "rclone."
Here's a good question by someone in the above HN thread.
Maybe an overly simple and dumb question but have to ask: What's the big difference between hosting static sites on services like these and just going with a regular webhost like Bluehost and slapping in something like a wordpress template? This is what a lot of blogs, landing pages and even fairly static small business or organization sites seem to do without problems and it's all pretty user.friendly for the non-developer crowd (me included)
HN comment about the article that the HN thread pointed to:
This is hilarious. All this complicated and unneeded stuff for a static website. It completely misses not just a point but multiple points.
Maybe you want a static sites so that it'll 'live' forever and not be effected by future changes in software stacks. You definitely don't get that by doing this.
Maybe you want a static site so that it's simple to set up. It's not this.
Maybe you want a static site for security, all the complexity and accounts here make it less secure than a random site running random php.
This is just buzzword bingo for someone's resume.
Using Greymatter at a $5 a month Digital Ocean server is better for technical people, like me. Greymatter is a web-based static site generator that I first used in 2001.
At sawv.org, I use my own web-based static generator called Wren that permits me to create and update web pages through a web browser, running on any computer that's connected to the internet. I create and update web posts on my laptop and on my old iPhone. About once a month, I download all of the markup (Textile and Markdown) text files for a backup. It would be nice to backup to another cloud service.
Here's the expected technology-related filter bubble reply comment to the above comment:
Hmm you conveniently omitted comments about HA, latency or scalability ... Pushing a bundle of files to a CDN it's undeniably a superior static site/SPA hosting in many ways.
Maybe the article overcomplicates but with services like Netlify, Amplify or Firebase Hosting it's stupid easy and cheap, and there's no vendor lock-in.
Latency or scalability??
I thought that the discussion was focused more on personal websites and not building websites for clients, such as companies of all sizes. If the web shop is building a static serverless website for a Fortune 500 company, then yeah, latency or scalability are concerns. Sophisticated setups would be expected.
But 99 percent of personal websites probably never need to worry about scaling to some mythical level to handle a ton of traffic. For the small percentage of people who have wildly popular personal websites, then they might need to worry about handling the traffic.
From the post that the HN thread pointed to:
... I moved this blog from a Wordpress installation hosted on EC2 to a static website.
The article was focused on a personal website and not building a website for big company.
... rock solid hosting for small projects has been free for a long time and takes 0 maintenance time. Plus making it to the top of HN won't kill your site.
O maintenance time??? For whom? The average HN reader or for the average Facebook user?
What percentage of personal websites have a post that makes it to the front page of HN?
I have no idea if a sawv.org HTML page posted to the front page of HN could hold up to the potential traffic with my site hosted at Digital Ocean. If it does not hold up because of bandwith limits reached for my DO account, so what? It's a personal website. I'm not selling anything. I'm not displaying ads.
Over the course of a year, it might be cheaper to host a personal website that receives little traffic at an AWS S3 bucket or on an EC2 box if server access via SSH is desired, compared to hosting at a $5 per moth Digital Ocean Droplet server.
But what if one day for whatever reason a post appears at HN and traffic spikes. Does the S3/EC2 user get hit with an unexpectedly high hosting bill? Can the $5 a month DO Droplet handle the traffic fine? And if the $5 a month DO Droplet has its bandwidth limit reached, at least the author knows that his or her bill will still be $5.
Context needs applied to discussions like this. If a person simply wants to maintain a personal website to store notes, observations, and thoughts with no intention of trying to become popular nor to monetize the website, then pointing a domain name to an account at wordpress.com or blogger.com might make the most sense.
If Mark Zuckerberg decided to post all of his text-based posts to a personal website that uses his own domain name, and it won't be hosted on a Facebook server, then he would need to consider a hosting setup and a workflow that can handle the expected traffic. These are the exceptions not the norm for personal web publishers.
If the web design company is building the static serverless website for a giant corporation that is well-known in pop culture, then the design company will obviously need to consider scalability. A $5 per month DO Droplet will probably not suffice. But in my opinion, the article that started the HN thread is not focused on this concern.
Also, the cheapest VPS you can find likely won't ever achieve the level of scale your static website in S3 could achieve.
Again, why is this a concern for the vast majority of personal web publishers?
A non-technical user wanting to maintain a personal website is probably most concerned about how easy it is to maintain the website.
An HN geek wanting to maintain a personal website seems most concerned about continues integration, scalability, connecting two or three or four services together to make it simple to use.
Chances are, the non-technical user will update his or her website more often than the HN geek user who will probably change technical setups every year or two, based upon what appears to be popular at HN.
HN reply to the above comment:
You gotta receive a ton of traffic for Nginx to stop serving static files. I'm pretty sure most of the static websites today could survive on a lite Nginx vps with minimal tuning.
Also, i rather have my server go down than to receive a larger bill from aws, but that all depends on your use case obviously
If the use-case is ME, then yes, I would prefer a bandwidth limit be reached with my Digital Ocean VPS setup and my site being unreachable for a while than trying to explain to my wife why my unimportant personal website has been hit with an expensive hosting fee bill.
Regarding a spike in traffic, it's probably not an issue with Nginx serving static HTML files. It's probably an issue with the server hosting account's bandwidth limits. I assume that the $10 a month Digital Ocean setup has a higher bandwidth limit than the $5 a month account.
Yeah this is probably true, I've never actually had a nginx instance be overwhelmed myself. I just don't know how much I trust VPS providers that aren't charging a premium $5+/month to deliver quality reliable performance.
The best part of S3 + Route53 is your costs are basically constant. $.50 a month for the hosted zone and then you pay pennies on the dollar for GBs of data transfer. In theory your bill could balloon if you had a hefty static website or some big files left public in your buckets and someone constantly downloaded it.
I enjoyed using the AWS features. It was a good experience in case I need to use that setup in the future. If I need to create a site that is expected to receive a ton of traffic, or if the site needs to be monetized, then I would consider using AWS or the configurations suggested in this HN thread. For commercial purposes, I might not use what I'm doing to host sawv.org.
I host babyutoledo.com at Digital Ocean. Since it's for a non-profit, maintained by people who we know, then I absorb the costs. I pay more money to Google to maintain custom email addresses that use the babyutoldo.com domain name. If I were going to host babyutoledo.com differently, then I would use GitHub Pages, as I mentioned above.
As a former sysadmin, this is still a lot of pain in the ass. One Terraform file that keeps my S3 + CloudFront sites configured, run once a month to ensure LetsEncrypt certs are rolled, and done. Have maintained enough servers for a lifetime, I’d rather be coding!
That still sounds too complicated for most people.
I like Svbtle. I only used it to setup and seed my wife's personal website, which she has not used, unfortunately.
At $6 a month, Svbtle is only slightly more than a $5 per month Digital Ocean server, and Svbtle removes the admin tax incurred with using a server-hosted solution. The main technical expense with Svbtle is leasing a domain name and mapping it to the Svbtle account.
Once you set everything up with S3, your deployment is literally.
aws S3 cp $your-local-directory S3://your-bucket
Command line usage though, which can be daunting for most non-technical people.
This is a ridiculously complicated tutorial.
Sure, S3 works if you're deploying it as safest as possible and want to pay for it too and do this on a recurrent basis, but otherwise is too big of a fuss for a personal blog, I use GitHub pages for over 4 years now with no issues, my own domain and SSL.
The simplest is surge.sh, period. If you don't need a domain, a web platform and just want to deploy from your CLI, surge.sh is the solution. It's good when you want to show off a static website to someone outside your sever. Even the switching to a premium plan is done from the CLI.
Other solutions are: Netlify, ZEIT Now, Aerobatic or Render.
I frequently use this list from this GatsbyJS wiki to check for static website hosts, I recommend it: https://www.gatsbyjs.org/docs/deploying-and-hosting
I found s3 + cloudflare to be a better combo. Cloudflare offers free ssl certs and has overall been a great experience. I also use AWS SES for my domain mail. It gets delivered to S3, then a local python script grabs it and dumps it in a mailbox file for dovecot to serve via imap. I pay $0.05/month for my hosting of my site and email.
Or GitHub Pages + CloudFlare.
And as another comment mentions, GitHub Pages now offers HTTPS certificates  for custom domains, so GitHub Pages alone is sufficient for most static websites.
Another GH link mentioned in the thread:
Another HN suggestion:
For static websites nothing beats the CLI experience of surge.sh - one (simple) command and its deployed. Its so smooth that I forget its there.
The way the API has been designed to make the usage natural/guessable has inspired me a lot when I have made other CLI projects.
Anyway, the HN discussion is interesting. It contains a lot of good suggestions. But the discussion is obviously geared toward technical people. Duh. It's at HN. Of course, the suggestions are complex for people who are not programmers, designers, nor sys admins.
While this HN discussion is interesting for me, it does nothing to convince social media users to start their first personal website.
These two HN comments probably sum it up well.
What I’ve gleaned from this thread is that in 2020 there are a thousand easy ways to host a static website. Just take your pick and go with it.
And for every way, there will be 10 people who will call you names for doing it this way, and that you should really do it another way. Just do whatever makes sense for you.
For me, I like using my own web-based static site generator at sawv.org that's hosted at Digital Ocean.
Honorable mention setups that I could see me using if I did not want to maintain my own server:
- GitHub Pages
- AWS S3
Svbtle focuses on writing. Svbtle offers almost no customization, theming, nor so-called plug-ins. It provides an RSS feed for the author's website.
Just do whatever makes sense for you.
Here's an HN thread that was started a few days ago.
"18-year-old personal website, built with Frontpage and still updated"
In that thread, I like this personal website that has been maintained since 1996. !!!
I wonder if the burger.com owner is using Netlify, AWS, GitHub, GitLab, CloudFront, CloudFlare, Digital Ocean, continuous integration, etc. I wonder if the burger.com owner is concerned about latency and scalability.
Good suggestions exist in this December 2019 post.