For Ghost
Modern publishing, self-hosted properly
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
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
Readers
public site, member sign-in
acme.news
public posts and pages
media.acme.news
images from the bucket
ghost :2368
Node 22 · s-2vcpu-4gb
mysqld :3306
MySQL 8 on the same VM
acme-media
ghost-storage-adapter-s3
Mailgun
newsletters + member email
Stripe
paid tiers, your own account
- 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
- 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 - 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 - 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 - 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" } } - 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
- 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
Estimated monthly bill on Edge
~10k members · weekly newsletter · ~50k visits/mo
- 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
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
Self-hosted Ghost or Ghost(Pro)?
How do members and Stripe payments work?
Where do newsletters get sent from?
How do I deploy a theme?
Can I move from Substack?
Drop-in services
Add these without touching the stack
- Edge ShieldBot protection
POST /siteverify → score: 94Keep bots out of member sign-up and newsletter forms with one server-side check. No puzzles for real readers.
Free for most sites. No puzzles, no widget to style.Explore - Edge AssistAI answers
<script src="…/assist.js">Answer reader questions from your posts, with fewer “where do I manage my subscription?” emails.
Free tier: 250 answered questions a monthExplore
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.