OpenSEO Deployment Options: Hosted SaaS, Docker, and Cloudflare Self-Hosting Compared
OpenSEO offers three deployment options—a managed SaaS at openseo.so, a simple Docker container for local testing, and a Cloudflare Workers self-hosted setup—each sharing the same core src/server codebase but differing in runtime environment and authentication layer.
The open-source SEO toolkit from Every App can be deployed to match your operational requirements, from zero-maintenance cloud hosting to fully controlled infrastructure. All deployment paths include the same MCP (Micro-Command-Processor) API that AI agents use to interact with the platform.
Hosted SaaS: Zero-Maintenance Cloud Deployment
The Hosted SaaS option runs on Every App's managed Cloudflare Workers and D1 infrastructure. You access the service at https://openseo.so without provisioning any infrastructure.
This option includes:
- Managed backend services (MCP, database, authentication)
- Automatic scaling and secret storage
- Cloudflare Access for team authentication
- Subscription pricing at approximately $10/month
Choose this when you need immediate availability without infrastructure overhead. The hosted version is documented in the README at README.md lines 13-18.
Docker Self-Hosting: Quick Local Deployment
The Docker deployment packages the entire OpenSEO stack into a single container. This is the fastest path to running the codebase yourself.
How Docker Deployment Works
The container runs a Node.js process using:
AUTH_MODE=local_noauth— authentication disabled by default- Local SQLite file for persistence
- DataForSEO API key from a
.envfile
Docker Setup Steps
# Create .env with your DataForSEO key
echo "DATAFORSEO_API_KEY=your_key_here" > .env
# Build and run the container
docker run -p 3000:3000 \
-v "$(pwd)/.env:/app/.env" \
everyapp/open-seo:latest
Place the container behind a reverse proxy, tunnel, or private network for external access. The complete Docker guide is at docs/SELF_HOSTING_DOCKER.md.
This option suits personal testing, development environments, and existing Docker workflows.
Cloudflare Self-Hosting: Production-Grade Deployment
The Cloudflare Self-Host option is the recommended path for production deployments. It delivers SaaS-like reliability while maintaining full environmental control.
Cloudflare Architecture
This deployment provisions:
- Cloudflare Workers — serverless compute runtime
- D1 — SQLite-based managed database
- KV — key-value storage for caching
- Cloudflare Access — identity-aware proxy for authentication
The pnpm deploy:selfhost command handles one-command provisioning of all resources.
Cloudflare Deployment Steps
# Install dependencies
pnpm install
# Add your DataForSEO key to .env.selfhost
echo "DATAFORSEO_API_KEY=your_key_here" > .env.selfhost
# Deploy to Cloudflare (provisions Workers, Access, and secrets)
pnpm deploy:selfhost
The Cloudflare deployment runs on the free tier and provides automatic backups, multi-device access, and the same security posture as the hosted SaaS. See docs/SELF_HOSTING_CLOUDFLARE.md for the complete workflow.
Architecture Comparison
All three OpenSEO deployment options share identical business logic in src/server/** — the MCP API, auth middleware, and database adapters remain unchanged. Runtime differences are isolated to environment configuration:
| Deployment | Runtime | Authentication | Persistence | Best For |
|---|---|---|---|---|
| Hosted SaaS | Cloudflare Workers + D1 | Cloudflare Access (managed) | D1 managed database | Zero-maintenance production use |
| Docker | Node.js container | local_noauth (none) |
Local SQLite file | Local development, testing |
| Cloudflare Self-Host | Cloudflare Workers + D1 | Cloudflare Access (self-configured) | D1 with backups | Production self-hosting, team collaboration |
Because the code is framework-agnostic, you can migrate between runtimes without modifying application logic.
Critical Configuration Files
| File | Purpose |
|---|---|
README.md (lines 44-52) |
Deployment decision matrix and option overview |
docs/SELF_HOSTING_DOCKER.md |
Docker environment variables and setup steps |
docs/SELF_HOSTING_CLOUDFLARE.md |
pnpm deploy:selfhost workflow and secret handling |
docs/DATAFORSEO_API_KEY.md |
API key placement for both self-hosted paths |
src/server/** |
Core implementation shared across all deployments |
The DATAFORSEO_API_KEY is required for all deployments—hosted and self-hosted alike—since OpenSEO proxies SEO data requests through this external service.
Using the Hosted SaaS API
When using the managed service, authenticate with an MCP API key:
import { createClient } from '@open-seo/mcp';
const client = createClient({
baseUrl: 'https://api.openseo.so',
apiKey: process.env.OPENSEO_MCP_KEY,
});
await client.project.create({ name: 'My Site' });
Self-hosted deployments use the same client library with your own base URL.
Summary
- Hosted SaaS (
openseo.so) provides managed Cloudflare infrastructure with no setup for ~$10/month - Docker enables single-container local deployment with
local_noauthand SQLite persistence - Cloudflare Self-Host delivers production-grade, free-tier deployment via
pnpm deploy:selfhost - All options share the
src/servercodebase and MCP API; only runtime environment and authentication differ - DataForSEO API key configuration is required regardless of deployment path
Frequently Asked Questions
Which OpenSEO deployment option is best for production?
The Cloudflare Self-Host deployment is recommended for production. It runs on Cloudflare's free tier with automatic D1 backups, Cloudflare Access authentication, and the same reliability as the hosted SaaS—while keeping you in control of your environment.
Can I run OpenSEO without authentication?
Yes, but only with the Docker deployment. Set AUTH_MODE=local_noauth in your environment to disable authentication entirely. The hosted SaaS and Cloudflare self-hosted options both require Cloudflare Access for security.
Is the DataForSEO API key required for all OpenSEO deployments?
Yes. Every deployment path—hosted SaaS, Docker, and Cloudflare self-host—requires a valid DATAFORSEO_API_KEY because OpenSEO proxies SEO data requests through this external service. See docs/DATAFORSEO_API_KEY.md for placement instructions specific to your deployment method.
Can I switch between OpenSEO deployment options later?
Yes. Since all deployments use the same core src/server codebase, you can migrate from Docker to Cloudflare self-host or to the hosted SaaS without changing business logic. Only environment-specific configuration (secrets, auth mode, base URLs) needs adjustment.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →