Site deployment to S3 and SSL
Previous Hosting and Deployment
Previously, the website was hosted using
GitHub Pages, a free static website hosting
provided by GitHub. Once Pages is configured, the updated site can be deployed
by pushing it to GitHub with git push
.
The old website used the Jekyll static site generator. As Jekyll is written by GitHub, GitHub Pages also natively supports Jekyll sites, running the build step for you.
S3 Website Hosting
AWS S3 can be configured to host static websites. As the Jekyll build process produces a static website, this static site can be hosted on S3. This requires an extra build step; with GitHub Pages the Jekyll build was managed by GitHub, on S3 it needs to be run manually. The website is deployed by uploading it to S3.
These two steps can be automated using the following Make
process:
build: # Create the static and store it in _site/
jekyll build
deploy-prod: build # Deploy the production website to S3
aws s3 sync _site s3://jamesroutley.co.uk --delete
They deployment uses the AWS CLI, which must be correctly configured with AWS credentials for the destination account.
A development environment was set up at dev.jamesroutley.co.uk.
DNS
S3 static websites are assigned a URL, such as http://jamesroutley.co.uk.s3-website-eu-west-1.amazonaws.com/. To access the website from a custom domain name, a Route53 Alias Record pointing the custom domain name to the S3 bucket should be created.
SSL
While S3 can be used to host static websites, it doesn't natively support SSL. To set it up, a CloudFront distribution must be created. CloudFront is AWS's content delivery network (CDN), a geographically distributed network of servers used to deliver web content. CDNs are usually used to speed up web response times and reduce server load. CloudFront is used in this case because it supports SSL. To set it up, this guide can be followed. A free SSL certificate was obtained from AWS Certificate Manager.