Following our previous guide on installing EmDash self-hosted on Ubuntu 24 VPS, this article will walk you through deploying EmDash on Cloudflare Workers – Cloudflare's cutting-edge serverless platform. Additionally, TND will provide a detailed cost comparison between various deployment methods to help you choose the most suitable and cost-effective solution for your needs.
Why Choose Cloudflare for EmDash?
EmDash is specifically designed and optimized for Cloudflare's ecosystem. When you deploy EmDash on Cloudflare Workers, you benefit from:
- Automatic Scaling: Effortlessly scale from zero to millions of requests without any manual configuration.
- Pay-as-you-go Pricing: Only pay for what you use, incurring no costs when your website has no traffic.
- Plugin Sandbox: Utilize Cloudflare Dynamic Workers to completely isolate plugins, enhancing security and stability.
- Global Edge Network: Your website is served from over 300 data centers worldwide, ensuring low latency and high availability.
- Integrated Services: Seamlessly leverage Cloudflare's D1 (database), R2 (storage), and KV (session management) services.
Installation Guide: EmDash on Cloudflare Workers
Follow these steps to get your EmDash instance running on Cloudflare Workers.
Step 1: Create a Cloudflare Account
If you don't already have one, sign up at
dash.cloudflare.com. You will need to upgrade to the Workers Paid plan ($5/month) to utilize Dynamic Workers, which is a mandatory feature for EmDash's plugin sandbox functionality.
Step 2: Install Wrangler CLI
Wrangler is Cloudflare's command-line interface (CLI) for managing Workers. Install it globally and log in:
npm install -g wrangler
wrangler login
Step 3: Create an EmDash Project
Initialize a new EmDash project and navigate into its directory:
npm create emdash@latest my-cf-website
cd my-cf-website
When prompted for the deployment target, select
Cloudflare Workers.
Step 4: Configure for Cloudflare
Open your
astro.config.mjs file and configure it to use the D1 database and R2 storage:
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { d1 } from "emdash/db";
import cloudflare from "@astrojs/cloudflare";
export default defineConfig({
output: "server",
adapter: cloudflare(),
integrations: [
emdash({
database: d1(),
}),
],
});
Step 5: Create D1 Database, R2 Bucket, and KV Namespace
Set up the necessary Cloudflare resources for your EmDash project:
# Create D1 database
wrangler d1 create emdash-db
# Create R2 bucket for media storage
wrangler r2 bucket create emdash-media
# Create KV namespace for sessions
wrangler kv namespace create emdash-sessions
Update your
wrangler.toml file with the IDs obtained from the output of the commands above:
name = "my-emdash-site"
compatibility_date = "2024-01-01"
[[d1_databases]]
binding = "DB"
database_name = "emdash-db"
database_id = "your-d1-id-here"
[[r2_buckets]]
binding = "MEDIA"
bucket_name = "emdash-media"
[[kv_namespaces]]
binding = "SESSIONS"
id = "your-kv-id-here"
Step 6: Deploy to Cloudflare
Build your project and deploy it to Cloudflare:
# Build project
pnpm build
# Deploy
wrangler deploy
After deployment, your website will be available at
my-emdash-site.your-subdomain.workers.dev. You can then point your custom domain to it within the Cloudflare dashboard.
Step 7: Configure Custom Domain (Optional)
In your Cloudflare dashboard, navigate to Workers & Pages -> Custom Domains and add your desired domain. Cloudflare will automatically configure DNS records and SSL certificates for you.
One-Click Deployment Option
EmDash also supports one-click deployment directly through the Cloudflare dashboard. Visit the
GitHub EmDash repository and click the “Deploy to Cloudflare Workers” button found in the Blog template section.
Detailed Cost Comparison: Cloudflare vs. Self-Hosted vs. WordPress
Below is a detailed monthly cost comparison for a website with approximately 50,000-100,000 pageviews/month across different hosting solutions.
1. EmDash on Cloudflare Workers
| Category |
Free tier |
Paid plan |
| Workers (compute) |
100,000 req/day free |
$5/month (10 million req) |
| D1 database |
5GB free |
$0.75/GB/month |
| R2 storage (media) |
10GB free |
$0.015/GB/month |
| KV (sessions) |
100,000 reads/day free |
$0.50/million reads |
| Domain Name |
– |
$10-15/year |
| Total |
$0/month (within free tier) |
$5-8/month |
2. EmDash Self-Hosted on VPS
| Category |
Small VPS |
Medium VPS |
| VPS (1 vCPU, 1GB RAM) |
$5-6/month |
– |
| VPS (2 vCPU, 4GB RAM) |
– |
$15-20/month |
| SSL Certificate |
Free (Let’s Encrypt) |
Free (Let’s Encrypt) |
| Backup |
$1-2/month |
$2-5/month |
| Domain Name |
$10-15/year |
$10-15/year |
| Total |
$6-9/month |
$18-26/month |
3. Traditional WordPress (for Comparison)
| Category |
Shared Hosting |
VPS/Managed Hosting |
| Hosting |
$3-10/month |
$15-50/month |
| Premium Theme |
$50-100/one-time |
$50-100/one-time |
| Premium Plugins (SEO, cache, security) |
$100-300/year |
$100-300/year |
| SSL Certificate |
Often free |
Often free |
| Domain Name |
$10-15/year |
$10-15/year |
| Total |
$5-15/month |
$25-75/month |
Cost Analysis by Scale
Let's break down the optimal choice based on your website's traffic volume.
Small Websites (under 10,000 pageviews/month)
Best Option: Cloudflare Free tier – $0/month. With 100,000 free requests per day, 5GB of D1, and 10GB of R2, you can run a website entirely free. You'll only need to cover the domain name cost.
Medium Websites (10,000-100,000 pageviews/month)
Best Option: Cloudflare Paid – $5-8/month. This is 20-50% cheaper than a VPS, requires no server management, offers auto-scaling, and includes a global CDN.
Large Websites (over 100,000 pageviews/month)
Depends on your needs. If you require full server control and have a DevOps team, a self-hosted VPS might be more cost-effective. However, if you prioritize simplicity and worry-free scaling, Cloudflare remains a solid choice with predictable costs.
Summary Comparison Table
| Criterion |
Cloudflare |
Self-Hosted VPS |
WordPress |
| Starting Cost |
$0 |
$5/month |
$3/month |
| Cost for 100k Views |
$5-8/month |
$15-20/month |
$25-75/month |
| Auto-scale |
Yes |
No (requires VPS upgrade) |
No |
| Plugin Security |
Full Sandbox |
No sandbox |
No |
| Server Management |
Not required |
Requires Linux knowledge |
Depends on hosting |
| Global CDN |
Built-in (300+ PoPs) |
Requires additional config |
Requires plugin/service |
| SSL |
Automatic, free |
Let’s Encrypt |
Depends on hosting |
| Backup |
Automatic (D1, R2) |
Requires manual config |
Requires plugin |
| Custom Code |
Limited (serverless) |
Full control |
PHP |
Conclusion
For most use cases,
EmDash on Cloudflare Workers is the most optimal choice in terms of cost, performance, and security. For just $5/month, you can have a complete CMS website with a global CDN, auto-scaling, and plugin sandboxing – features that would cost dozens of dollars per month to achieve with WordPress.
However, if you require full server control, need to run complex applications alongside your CMS, or already have existing VPS infrastructure, then
self-hosting on an Ubuntu 24 VPS remains an excellent option.
Regardless of your chosen method, EmDash represents a significant advancement over traditional WordPress – it's safer, faster, and more economical.
Useful Links: