Deploy a Ghost website with Provose
Provose is the easiest way to manage your Amazon Web Services infrastructure.
Ghost is a modern, open-source, and easy-to-use platform for building a website, blog, or subscription newsletter.
This is a summary of the installation details in the official Provose tutorial.
- Make sure your local system has Terraform 0.13 or newer and the AWS CLI v2.
- Make sure your system has AWS credentials that Terraform can find. On a local machine, you can use environment variables or a
~/.aws/credentialsfile. On an AWS EC2 instance, Terraform can use the instance's IAM instance profile.
- You will need a domain name to host your Ghost website. Provose requires a second domain name for the purpose of issuing TLS certificates and routing internal traffic in the Virtual Private Cloud (VPC) that Provose creates.
Then clone this repository with
git clone firstname.lastname@example.org:provose/provose-ghost-website-example.git cd provose-ghost-website-example
Then set up your workspace with
If you have multiple AWS profiles on your system, you may need to specify the profile with an environment variables as follows:
AWS_PROFILE=my_profile_2 terraform apply
Terraform will interactively prompt you for your two domain names. You can also set these Terraform variables as command line arguments or environment variables.
It will take several minutes for your infrastructure to deploy. At the end, Terraform should print a message that starts with
If you have set up this infrastructure for testing and now want to destroy it, you can run:
Make sure to disable Deletion Protection on the MySQL database if you are sure that you want to delete it.
Exercises for the reader
Adding a Content Delivery Network (CDN)
This example sets up a single Docker container running on AWS Fargate, sitting behind an Application Load Balancer (ALB). For further scalability, the ALB should be behind a Content Delivery Network (CDN) like Cloudflare or AWS CLoudFront.
This example sets up Ghost, but without any credentials for sending transactional emails--for example, in case the admin forgets their password.
It is possible to configure Amazon Simple Email Service (SES) and pass those credentials to Ghost. More details can be found here.
Using a SQLite3 database
Typically the Ghost blogging platform is backed via a MySQL database, but SQLite is another option. Switching to SQLite might be a way for blogs with low traffic to save on their cloud costs.