This is my design for a secure static page website that is scalable and allows for ease of collaboration. I have designed several websites using this design model and figured I would document it for others.
This design uses AWS Infrastructure to its fullest potential to allow for scalability and security and collaboration.
Here is the list of AWS components used and what they are used for:
AWS Route 53 - Hosts the DNS records for the website.
AWS CloudFront - This Content Delivery Network provides the front end for the website.
AWS Certificate Manager - This is where the website certificates are created and stored.
AWS S3 Buckets - This is where the website content is stored.
AWS IAM - This is where users are set up and their permissions created.
Here is a diagram of the AWS Infrastructure Design:
This design uses Github for version control of all content and themes for the website.
Content is dedicated to one or more repositories that are separate from the themes and other settings needed by the static HTML generator.
This repository segmentation allows for more granular user access control to different aspects of the website content and themes.
Here is a diagram of the Github repository design:
Currently I am using Pelican as my static HTML generator. Although the modular aspect of this website design means that this could easily be changed to a different page generation program.
With Pelican the markdown formatted content is pulled into the content directory and when the scripts are run the HTML page output with images and css and any other supporting files are created in the output directory.
This output directory then needs to replace the contents of the AWS S3 bucket that feeds the website. This can be done via API programs such as s3cmd or aws-cli, or it can be manually copied via the AWS user web interface.
Here is a diagram of the Pelican Static Generation design:
The workflow for this website design is fairly simple.
Create Content in Github Repositories using Markdown formatted text
Create Static HTML pages from Markdown content using Pelican
Publish HTML to AWS S3 Buckets that feed the website’s AWS Content Delivery Infrastructure