Skip to content

For Ghost

Modern publishing, self-hosted properly

Ghost on a real VM, images in an S3-compatible bucket and the public site cached in 988 locations. Members, newsletters and paid tiers all work, and nobody takes a cut of your revenue.

Free to sign up. No egress fees on any product.

Why Ghost on Edge

All the polish of Ghost(Pro), none of the per-member pricing

The same open-source Ghost, on a VM you own, with the media and the traffic handled by Edge.
  • A complete publishing platform

    Posts, pages, members, newsletters, paid subscriptions and a first-class editor. Open source, with no platform tax.
  • S3-compatible media storage

    The S3 storage adapter sends image uploads to an Edge Storage bucket. Your archive outlives any server.
  • Image transforms at the CDN

    Ghost resizes images itself. For high-volume sites, hand that job to the CDN for AVIF and WebP at the edge.
  • Bring your own email

    Connect Mailgun for newsletters and any SMTP provider for transactional mail. It works exactly as it does on Ghost(Pro).
  • Global CDN, zero egress

    The public site caches in 988 locations. Admin and member routes fall through to your VM.
  • Predictable bills

    A VM, a CDN deployment and a bucket. Nothing scales with your member count or your subscription revenue.

Reference architecture

How Ghost maps to Edge

A standard Ghost install, Node and MySQL on one VM, with media offloaded, the site cached, and email and payments handled by your own accounts.
  • Compute

    Runs Ghost (Node.js) and MySQL behind Nginx on one VM.

  • Storage

    Holds image uploads through the S3 storage adapter.

  • CDN

    Caches the public site worldwide; admin and member routes hit origin.

  • Image optimisation

    Optional: replace Ghost's built-in resizing with edge transforms.

  • DNS

    Anycast DNS for the apex, www and your newsletter sending domain.

  • Shield

    Keeps bot floods out of member sign-up and newsletter forms.

  • Assist

    Answers reader questions from your posts and pages.

Deploy

Ghost on Edge in five steps

Ghost-CLI does the heavy lifting. Run it as a sudo user rather than root; Ghost-CLI insists.
  1. 01

    Create the VM

    The nodejs library script installs Node 22 and Nginx. Add MySQL 8, Ghost's production database.

    shell
    $ edge compute create --name ghost --size s-2vcpu-4gb \
        --image ubuntu-24 --region london --script nodejs
    $ edge storage create acme-media
    
    $ edge compute ssh vm-2e7c19
    $ sudo apt install -y mysql-server
  2. 02

    Install Ghost

    Ghost-CLI sets up the database, the Nginx site and a systemd service in one pass.

    shell
    $ sudo npm install -g ghost-cli@latest
    $ sudo mkdir -p /var/www/ghost
    $ sudo chown $USER:$USER /var/www/ghost && cd /var/www/ghost
    $ ghost install --url https://acme.news \
        --db mysql --process systemd
  3. 03

    Add the S3 storage adapter

    Ghost loads storage adapters from content/adapters, so copy the package in after installing it.

    shell
    $ cd /var/www/ghost
    $ npm install ghost-storage-adapter-s3
    $ mkdir -p content/adapters/storage
    $ cp -r node_modules/ghost-storage-adapter-s3 \
        content/adapters/storage/s3
  4. 04

    Point it at Edge Storage

    Set the endpoint and path-style addressing, and serve images from your media domain. Restart with ghost restart.

    config.production.json
    "storage": {
      "active": "s3",
      "s3": {
        "accessKeyId": "EDGE_KEY",
        "secretAccessKey": "EDGE_SECRET",
        "region": "us-east-1",
        "bucket": "acme-media",
        "endpoint": "https://storage.edge.network",
        "forcePathStyle": true,
        "assetHost": "https://media.acme.news"
      }
    }
  5. 05

    Put the CDN in front

    Cache the public site and serve media straight from the bucket, with image transforms on.

    shell
    $ edge cdn create --name acme-news
    $ edge cdn domains add cdn-a1b2c3 \
        --domain acme.news --origin https://<vm-ip>
    $ edge cdn domains add cdn-a1b2c3 \
        --domain media.acme.news --jit-image \
        --origin-type storage --storage-bucket acme-media

Prefer to hand it off? Give the job to your AI agent or have our engineers do it.

What it costs

A paid newsletter, without the percentage

The hosting side of a 10,000-member publication. Email goes through your own provider and is billed by them, which is why the comparison below includes Mailgun.
  • No per-member pricing, at any size
  • No platform share of subscription revenue
  • Email billed directly by your provider
  • Hourly billing with optional hard caps
See compute pricing

Estimated monthly bill on Edge

~10k members · weekly newsletter · ~50k visits/mo

USD
  • Compute$19.24Standard VM · 2 vCPU · 4 GiB · Ghost + MySQL
  • CDN$0.251.5M requests: 500k free, then 1M × $0.25 per million
  • Storage$0.3025 GB of images: 5 GB free, then 20 GB × $0.015
  • DNS$0.00Zone, www and sending-domain records
  • Egress$0.00
Total$19.79

Indicative monthly cost · newsletter with paid memberships

  • Substack10% of revenue
  • Ghost(Pro) Creator~$50–100
  • Edge (VM + CDN + Storage + Mailgun)~$25–45

Indicative figures. Substack's fee grows with revenue, so its bar is illustrative. Email volume moves the bill more than hosting at this scale.

FAQ

Ghost on Edge, answered

Something else? Ask an engineer.
Self-hosted Ghost or Ghost(Pro)?
Same software, different host. Ghost(Pro) is the official managed service and funds Ghost's development. Self-hosting gives you root, custom integrations through the Admin API and a flat bill, in exchange for running a VM.
How do members and Stripe payments work?
Exactly as on Ghost(Pro). Connect your own Stripe account, set tiers and prices in Ghost Admin, and Ghost handles checkout, gating and renewals. Edge never touches the money.
Where do newsletters get sent from?
Ghost sends bulk newsletters through Mailgun and transactional mail through any SMTP provider. That traffic flows directly between Ghost and your email provider, not through Edge.
How do I deploy a theme?
Upload the zip in Ghost Admin, or keep themes in your repository and pull them into content/themes on deploy. Purge the CDN afterwards so readers see the change.
Can I move from Substack?
Yes. Ghost's migration tools import posts and subscribers from a Substack export. Our Expert Services team can run the move and the bootstrap for you.

Own your publication

Start free. Stand up a fresh Ghost site or move over from Substack, and we'll help with the bootstrap.

Free tiers hard-cap. Nothing bills until you add a card.