Comprehensive Guide to Deploying Ghost CMS on Render.com

Ewan MakEwan Mak
4 min read

Executive Summary

Deploying Ghost CMS on Render.com provides a scalable, managed solution for professional publishing. This guide synthesizes best practices from official documentation and user experiences, covering:

  • Core requirements including MySQL 8 databases and persistent storage

  • Step-by-step deployment via Render's Blueprint or Docker

  • Critical configurations for domains, email, and performance

  • Headless CMS integration with frameworks like Astro

  • Maintenance protocols including backups and scaling

Render's infrastructure simplifies Ghost deployment by automating TLS certificates, load balancing, and daily database snapshots, making it ideal for publishers prioritizing reliability and ease of use.


Ghost CMS Architecture and Requirements

Core Components

Ghost is an open-source Node.js CMS optimized for content creators, featuring built-in newsletters, membership tiers, and subscription payments via Stripe. Its architecture separates:

  • Content Management: Admin interface for editorial workflows

  • Content Delivery: API-driven headless mode or traditional frontend

  • Database Layer: Requires MySQL 8+ for production (SQLite is development-only).

Infrastructure Requirements

  1. Database: MySQL 8 instance (mandatory for production).

  2. Persistent Storage: For asset uploads and theme files (ephemeral storage loses data on redeploys).

  3. Environment Variables: Critical for database credentials and site URLs.

  4. Compute Resources: Minimum 1 GB RAM recommended.


Deployment Workflow

  1. Fork the Template: Clone render-examples/ghost or use "Use this template" on GitHub.

  2. Create Blueprint:

    • In Render Dashboard, select New > Blueprint Instance.

    • Grant Render access to your repository.

  3. Configure Database:

    • Under the MySQL service's Environment tab, copy MYSQL_PASSWORD.
  4. Link Ghost to Database:

    • In the Ghost service's Environment tab, add database__connection__password with the copied MySQL password.

Method 2: Manual Docker Deployment

  1. Create Web Service:

    • In Render Dashboard, choose New > Web Service.
  2. Specify Ghost Image:

    • Select Existing Image and enter ghost:latest (official Docker image).
  3. Attach Persistent Disk:

    • Under Advanced Settings, add a disk mounted to /var/lib/ghost/content (stores themes, images, and data).
  4. Set Environment Variables:

     database__client=mysql  
     database__connection__host=[MySQL hostname]  
     database__connection__user=root  
     database__connection__password=[MySQL password]  
     url=https://yourdomain.com
    

Initial Setup

After deployment:

  1. Access Ghost admin at https://[your-service].onrender.com/ghost.

  2. Complete onboarding (create admin account, configure site details).

  3. Trigger content migration via Settings > Labs > Migrate Content if restoring from backup.


Critical Configurations

Custom Domains

  1. Add domain in Render Dashboard under your Ghost service's Custom Domains.

  2. Set environment variable:

     url=https://www.yourdomain.com
    
  3. Render automatically provisions TLS certificates.

Email Setup (Mailgun Example)

For newsletters and member invitations:

  1. Create a Mailgun account (10,000 emails/month free tier).

  2. Configure environment variables:

     mail__transport=SMTP  
     mail__options__service=Mailgun  
     mail__options__auth__user=postmaster@yourdomain.mailgun.org  
     mail__options__auth__pass=[Mailgun API key]
    

Performance Optimization

  • CDN Caching: Enable Render's built-in CDN for assets.

  • Resource Scaling: Upgrade instance size for traffic spikes (via Dashboard).

  • Background Workers: Offload email jobs to dedicated workers.


Headless CMS Implementation

Ghost's Content API enables JAMstack architectures:

Astro Integration

  1. Install the Ghost Content API SDK:

     npm install @tryghost/content-api
    
  2. Fetch posts in Astro:

     ---  
     import GhostContentAPI from '@tryghost/content-api';  
     const api = new GhostContentAPI({  
       url: 'https://blog.yourdomain.com',  
       key: import.meta.env.GHOST_API_KEY,  
       version: 'v5.0'  
     });  
     const posts = await api.posts.browse();  
     ---  
     {posts.map(post => <h2>{post.title}</h2>)}
    
  3. Store API keys in .env for security.

Next.js Integration

Use @tryghost/content-api with getStaticProps for static generation.


Maintenance and Scaling

Backups and Restorations

  • Daily Snapshots: Render automatically backs up persistent disks. Restore via Dashboard > Disks > Snapshots.

  • Database Exports: Use Ghost's Settings > Labs > Export Content for JSON backups.

Monitoring

  • Logs: Access real-time logs in Render Dashboard.

  • Metrics: Track CPU, memory, and disk usage; set alerts for thresholds.

Cost Management

  • Free Tier: Suitable for testing (limited resources).

  • Production Pricing: Starts at $7/month for basic instances + database costs. Use Render Pricing Calculator for estimates.


Troubleshooting Common Issues

Deployment Failures

  • Database Connection Errors: Verify database__connection__password matches MySQL service's password.

  • Disk Mount Issues: Ensure path is /var/lib/ghost/content and disk size ≥1GB.

Performance Bottlenecks

  • High CPU: Upgrade instance size or optimize themes.

  • Slow Loads: Enable CDN and compress images via Ghost's image optimization.


Conclusion

Render.com streamlines Ghost CMS deployment by automating infrastructure management while retaining flexibility for customization. Key takeaways:

  1. Always use MySQL 8 and attach persistent disks for production reliability.

  2. Leverage environment variables for configurations (never hardcode secrets).

  3. For JAMstack projects, Ghost's Content API integrates smoothly with Astro, Next.js, or Vue.

  4. Monitor resources proactively and scale based on traffic patterns.

For advanced use cases like multi-region deployments or automated testing, explore Render's Preview Environments and Infrastructure as Code (IaC) options.

0
Subscribe to my newsletter

Read articles from Ewan Mak directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ewan Mak
Ewan Mak

Crafting seamless user experiences with a passion for headless CMS, Vercel deployments, and Cloudflare optimization. I'm a Full Stack Developer with expertise in building modern web applications that are blazing fast, secure, and scalable. Let's connect and discuss how I can help you elevate your next project!