# OpenSEO Deployment Options: Hosted SaaS, Docker, and Cloudflare Self-Hosting Compared

> Explore OpenSEO deployment options: choose managed SaaS, Docker for local use, or Cloudflare Workers self-hosting. Deploy OpenSEO easily and find the best fit for your needs.

- Repository: [Every App/open-seo](https://github.com/every-app/open-seo)
- Tags: comparison
- Published: 2026-09-01

---

**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`](https://github.com/every-app/open-seo/blob/main/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 `.env` file

### Docker Setup Steps

```bash

# 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`](https://github.com/every-app/open-seo/blob/main/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

```bash

# 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`](https://github.com/every-app/open-seo/blob/main/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`](https://github.com/every-app/open-seo/blob/main/README.md) (lines 44-52) | Deployment decision matrix and option overview |
| [`docs/SELF_HOSTING_DOCKER.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_DOCKER.md) | Docker environment variables and setup steps |
| [`docs/SELF_HOSTING_CLOUDFLARE.md`](https://github.com/every-app/open-seo/blob/main/docs/SELF_HOSTING_CLOUDFLARE.md) | `pnpm deploy:selfhost` workflow and secret handling |
| [`docs/DATAFORSEO_API_KEY.md`](https://github.com/every-app/open-seo/blob/main/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:

```typescript
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_noauth` and SQLite persistence
- **Cloudflare Self-Host** delivers production-grade, free-tier deployment via `pnpm deploy:selfhost`
- All options share the `src/server` codebase 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`](https://github.com/every-app/open-seo/blob/main/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.