> Source: https://meetrix.io/blogs/ghost-developer-guide/
> Markdown copy of that page. Cite the URL above, not this file.

Development

# Ghost - Developer Guide

[By Binuka Ranatunga](https://meetrix.io/blogs/authors/binuka-ranatunga/) • June 22, 2026 • 8 min read

Welcome to the Ghost Deployment Guide for AWS! Ghost is a powerful open-source publishing platform built for modern online publishing. Whether you're running a blog, newsletter, or membership site, this guide walks you through deploying Ghost on AWS using Meetrix's pre-configured AMI, configuring your domain, enabling SSL, and operating it reliably.

## Video Guide

Prerequisites

Before you get started with the Ghost AMI, ensure you have the following prerequisites:

-   Basic knowledge of AWS services, including EC2 instances and CloudFormation.
-   An active AWS account with appropriate permissions.
-   A registered domain name with access to your DNS settings.
-   Enough vCPU limit to create an instance (Follow [https://meetrix.io/blogs/increase-aws-vcpu-quota/](https://meetrix.io/blogs/increase-aws-vcpu-quota/) to ensure this).

## Launching the AMI

### Step 1: Find and Select the 'Ghost' AMI

1.  Log in to your AWS Management Console.
2.  Navigate to the '[Ghost](https://aws.amazon.com/marketplace/pp/prodview-qisvfrxaln2ne)' product in AWS Marketplace.

### Step 2: Initial Setup & Configuration

1.  Click the **"Continue to Subscribe"** button.
2.  Accept the terms and click **"Continue to Configuration"**.

### Step 3: Launching the Instance

1.  Select the **"CloudFormation"** fulfillment option and choose your preferred region, then click **"Continue to Launch"**.
2.  From the action menu, select **"Launch CloudFormation"** and click **"Launch"**.

## Create CloudFormation Stack

### Step 1: Create Stack

1.  Ensure the **"Template is ready"** option is selected under "Prepare template".
2.  Click "Next".

### Step 2: Specify Stack Details

1.  Provide a unique **"Stack name"**.
2.  Provide the **"Admin Email"** for SSL generation.
3.  For **"DeploymentName"**, enter a name of your choice.
4.  Provide a public domain name for **"DomainName"** (SSL will be set up automatically during deployment).
5.  Choose an instance type for **"InstanceType"** (Recommended: **t3.small**).
6.  Select your preferred **"KeyName"**.
7.  Set **"SSHLocation"** as "0.0.0.0/0".
8.  Keep **"SubnetCidrBlock"** as "10.0.0.0/24".
9.  Keep **"VpcCidrBlock"** as "10.0.0.0/16".
10.  Click "Next".

### Step 3: Configure Stack Options

1.  Choose "Roll back all stack resources" and "Delete all newly created resources" under the "Stack failure options" section.
2.  Click "Next".

### Step 4: Review

1.  Review and verify the details you've entered.
![AWS CloudFormation Parameters tab for the Ghost stack showing DomainName, MailHost and a t3a.small instance type](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-01.png)3.  Tick the box that says **"I acknowledge that AWS CloudFormation might create IAM resources with custom names"**.
![AWS CloudFormation IAM capabilities acknowledgment checkbox ticked before creating the Ghost stack](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-02.png)5.  Click **"Submit"**.

Afterward, you'll be directed to the CloudFormation stacks page. Please wait for 5-10 minutes until the stack has been successfully created.

![Ghost CloudFormation stack info tab showing CREATE\_COMPLETE status and the stack overview](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-03.png)

## Update DNS

### Step 1: Copy IP Address

Copy the public IP labeled **"PublicIp"** in the **"Outputs"** tab of your CloudFormation stack.

![Ghost CloudFormation stack Outputs tab listing AdminUrl, DashboardUrl and the PublicIp Elastic IP](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-04.png)

### Step 2: Update DNS

1.  Go to AWS Route 53 and navigate to "Hosted Zones".
2.  Click **Create record**.
3.  Add the **record name** and paste the copied **"PublicIp"** into the **"Value"** textbox.
4.  Click "Save".

![Route 53 Quick create record adding a ghost A record pointing to the Ghost instance Elastic IP](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-05.png)

## Access Ghost

Once the DNS propagates, you can access your Ghost site using the **"DashboardUrl"** provided in the "Outputs" tab. To access the Ghost Admin panel, append `/ghost` to your domain:

```plaintext
https://your-domain.com/ghost
```

![Ghost CloudFormation stack Outputs tab with the AdminUrl admin panel link selected](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-06.png) ![Default Ghost site homepage after deployment with the Thoughts, stories and ideas header and a subscribe form](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-09.png)

Create your administrator account by providing your name, email, and password on the setup screen.

![Ghost setup page asking for site title, full name, email address and password to create the admin account](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-07.png)

After completing setup, you'll be taken to the Ghost Admin dashboard where you can create posts, manage members, configure your theme, and set up newsletters.

![Ghost admin Analytics dashboard showing member count and latest post performance](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-08.png)

Important

The account you create during setup is the **Administrator Account** for your Ghost deployment. The email and password you provide will be used to manage your entire publication, including inviting staff members, configuring integrations, and maintaining overall access.

## Generate SSL Manually

Ghost will automatically try to set up SSL when a Route 53-hosted domain is provided. If it fails, follow these steps to generate SSL manually.

### Step 1: Copy IP Address

1.  Follow the **Update DNS** steps above, if not already done.
2.  Copy the Public IP labeled **"PublicIp"** in the **"Outputs"** tab of your CloudFormation stack.

### Step 2: Log in to the Server

1.  Open the terminal and navigate to the directory where your private key is located.
2.  Run:

```plaintext
ssh -i <your-key-name>.pem ubuntu@<Public IP address>
```

3.  Type "yes" and press Enter to confirm.

### Step 3: Generate SSL

Run the following command and follow the prompts:

```plaintext
bash /root/certificate_generate_standalone.sh
```

## Check Server Logs

### Step 1: Log in to the Server

1.  Open the terminal and navigate to the directory where your private key is located.
2.  Connect to your instance using the following command:

```plaintext
ssh -i <your-key-name>.pem ubuntu@<Public IP address>
```

3.  Type "yes" and press Enter to confirm the host fingerprint and log in.

![Terminal SSH connection to the Ghost server with a PEM key, typing yes at the host authenticity prompt](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-11.png)

### Step 2: Check the Logs

```plaintext
sudo docker ps

sudo docker logs <container_id or container_name>
```

![Terminal sudo docker ps output showing the ghost 6.45.0 container running on port 2368](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-12.png)

## Shutting Down Ghost

1.  Click the link labeled **"Instance"** in the **"Resources"** tab of your CloudFormation stack to navigate to the EC2 instance.
2.  Stop the instance by selecting the checkbox and clicking **"Stop instance"** from the **"Instance state"** dropdown. You can restart it at any time by selecting **"Start instance"**.

![AWS EC2 instance state menu with Stop, Reboot and Terminate options for the running Ghost instance](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-13.png)

## Remove Ghost

Delete the CloudFormation stack from the AWS Management Console under **"CloudFormation > Stacks"** by selecting the stack and clicking the **"Delete"** button. This will remove all associated AWS resources.

## Upgrades

When a new version of Ghost is available, we will update the product in AWS Marketplace. You can check the current product version in the Marketplace listing. If a newer version is available, remove the previous deployment and re-launch using the newer AMI version. Remember to **back up your Ghost content and configuration** before removing the existing stack.

## Troubleshoot

1.  If you encounter a vCPU quota error when launching the stack, follow [https://meetrix.io/blogs/increase-aws-vcpu-quota/](https://meetrix.io/blogs/increase-aws-vcpu-quota/) to increase your vCPU limit.
![CloudFormation events showing a CREATE\_FAILED rollback caused by insufficient g4dn.metal instance capacity](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-14.png)3.  If you see a "do not have sufficient capacity" error while creating the stack, try changing the AWS region or retry at a later time.
![CloudFormation events showing a CREATE\_FAILED rollback caused by insufficient g4dn.metal instance capacity](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-15.png)5.  If the Ghost admin panel is not accessible immediately after deployment, wait 5-10 minutes for the service to fully initialise, then refresh the page.
![Nginx 502 Bad Gateway error page shown by the Ghost server](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-16.png)7.  Check disk usage to ensure the instance storage is not full:

-   Log into the server and run:

```plaintext
df -h
```

![Terminal df -h output showing disk space usage on the Ghost server root filesystem](https://meetrix.io/blog-images/paas-dev-guides/ghost/ghost-17.png)

-   If the root volume is between 90-100%, increase the EBS volume size following AWS documentation. Then reboot the instance and restart the Ghost service.

## Conclusion

The Meetrix Ghost Deployment Guide helps you set up Ghost on AWS quickly and securely. Whether you're a developer, content creator, or DevOps engineer, this guide provides step-by-step instructions to deploy Ghost in a scalable and reliable way - with SSL, Docker-based management, and AWS best practices built in.

## Technical Support

Reach out to Meetrix Support ([aws@meetrix.io](mailto:aws@meetrix.io)) for assistance with your Ghost deployment.

## Frequently Asked Questions

What is Ghost?

Ghost is a powerful open-source publishing platform built for modern online publishing. It supports blogs, newsletters, and membership sites with a clean editor, built-in SEO, and native membership/subscription features.

What are the prerequisites for deploying Ghost on AWS?

You need basic knowledge of AWS services (EC2, CloudFormation), an active AWS account with appropriate permissions, a registered domain name with DNS access, and a sufficient vCPU limit to launch the required instance type.

Which instance type is recommended for Ghost?

t3.small is recommended as a baseline for running Ghost on AWS. You can scale up to t3.medium or larger depending on your traffic and membership volume.

How do I access the Ghost admin panel?

Once your domain propagates, append /ghost to your domain (e.g. https://your-domain.com/ghost) to reach the Ghost Admin panel and complete the initial setup.

How do I handle upgrades?

When a new version is available in the AWS Marketplace, back up your Ghost content and configuration, remove the previous deployment, then relaunch using the newer AMI version.

How do I get technical support?

Reach out to Meetrix Support at [aws@meetrix.io](mailto:aws@meetrix.io) for assistance with your Ghost deployment.

## Ready to Deploy Your Own Ghost Instance?

Get started in minutes with our pre-configured AMI and take full control of your Ghost publishing platform on AWS.

[Deploy Ghost from AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-qisvfrxaln2ne)

Meetrix Store

Ghost

Blogs and paid memberships, no revenue cut

[Deploy it](https://meetrix.io/store/ghost/)

Meetrix Store New

Deploy what this guide covers, pre-configured.

-    [Ghost Blogs and paid memberships, no revenue cut](https://meetrix.io/store/ghost/)
-    [Listmonk Newsletters with no per-subscriber fees](https://meetrix.io/store/listmonk/)
-    [Mailcow Business email on your own domain](https://meetrix.io/store/mailcow/)
-    [Jitsi Meet Self-hosted video calls for 50 to 500 users](https://meetrix.io/store/jitsi-meet/)
-    [RustDesk Remote desktop AMI, a TeamViewer alternative](https://meetrix.io/store/rustdesk/)
-    [Coturn TURN/STUN for WebRTC, no per-minute relay fees](https://meetrix.io/store/coturn/)

[Browse all products](https://meetrix.io/store/)
