How to Install Open-SEO: Docker and Cloudflare Workers Setup Guide
Open-SEO can be installed locally using Docker Compose for rapid testing or deployed to Cloudflare Workers for production edge scaling, both utilizing the same unified monorepo codebase managed with pnpm workspaces.
Open-SEO is a modern, full-stack SEO platform developed by the every-app/open-seo repository that supports two distinct self-hosting pathways. Whether you need to run it locally for development or serve it globally at the edge, the installation process leverages shared configuration files including compose.yaml and wrangler.jsonc. This guide explains how to install open-seo using both methods with direct references to the authoritative source files in the codebase.
Installation Methods Overview
Open-SEO’s architecture consists of a Vite-powered React frontend (defined in web/src/routes/_marketing.tsx), a TanStack Server backend API (implemented in src/server/mcp/transport.test.ts), and a database layer configured via drizzle.config.ts. You can deploy this stack using either:
- Docker Compose – Recommended for local development and simple self-hosting
- Cloudflare Workers – Optimized for edge-scaled production deployments
Both methods share the same source code and rely on pnpm-workspace.yaml to manage the monorepo dependencies.
Installing Open-SEO with Docker (Recommended for Local Development)
The Docker pathway packages the frontend, backend, and database into containers defined in compose.yaml, using Dockerfile.selfhost as the base image.
Prerequisites
- Docker Engine and Docker Compose installed
- Git for cloning the repository
- Port 3001 available on your local machine
Step-by-Step Docker Installation
-
Clone the repository to your local machine:
git clone https://github.com/every-app/open-seo.git cd open-seo -
Configure environment variables by copying the example file:
cp .env.example .envEdit
.envto add required secrets such asDATAFORSEO_API_KEYor database credentials. -
Launch the stack using Docker Compose:
docker compose up -dThis command reads
compose.yamlto start the API container, database (SQLite by default), and optional telemetry services. -
Access the dashboard at the default local address:
open http://localhost:3001The documentation in
docs/SELF_HOSTING_DOCKER.mdconfirms the default port is3001.
Custom Configuration Options
-
Custom domain: Set the
ALLOWED_HOSTenvironment variable when launching:ALLOWED_HOST=example.com docker compose up -d -
Disable telemetry: Add
OPENSEO_TELEMETRY_DISABLED=1orDO_NOT_TRACK=1to your.envfile, then force recreate the container:OPENSEO_TELEMETRY_DISABLED=1 docker compose up -d --force-recreate open-seo -
View logs: Run
docker compose logs -fto stream container output. -
Stop services: Execute
docker compose downto halt the stack.
Deploying Open-SEO to Cloudflare Workers (Production)
The Cloudflare pathway compiles the TanStack Server backend into a Worker using the configuration in wrangler.jsonc, enabling global edge deployment.
Prerequisites
- pnpm package manager installed (the project uses
pnpm-workspace.yamlfor monorepo management) - A Cloudflare account with Workers enabled
- (Optional) A fork of the repository for CI/CD integration
Cloudflare Installation Steps
-
Clone your fork of the repository:
git clone https://github.com/YOUR_GITHUB_USER/open-seo.git cd open-seo -
Install dependencies using pnpm:
pnpm installThis command resolves workspaces defined in
pnpm-workspace.yamlacross theweb,src, andbadseopackages. -
Configure secrets using Wrangler:
pnpm exec wrangler secret put DATAFORSEO_API_KEYSecrets are bound according to the rules in
wrangler.jsonc. -
Deploy to Cloudflare:
pnpm exec wrangler publishThis builds the project and deploys the Worker to Cloudflare’s edge network.
-
Verify deployment by checking the health endpoint:
curl https://<YOUR_SUBDOMAIN>.workers.dev/api/healthThe backend exposes this health check route to confirm successful installation.
Environment Configuration Reference
Both installation methods rely on environment variables defined in .env.example:
DATAFORSEO_API_KEY– Required for SEO data provider integrationDATABASE_URL– Connection string for PostgreSQL (Cloudflare) or SQLite path (Docker)OPENSEO_TELEMETRY_DISABLED– Set to1to opt out of analytics
For Docker, these values are loaded from the .env file at runtime. For Cloudflare, use wrangler secret put to encrypt sensitive values at the edge.
Summary
- Two pathways: Install open-seo locally with
docker compose up -d(usingcompose.yaml) or deploy globally viapnpm exec wrangler publish(usingwrangler.jsonc). - Default access: Docker exposes port
3001; Cloudflare Workers use your custom subdomain. - Database flexibility: SQLite works for Docker local installs, while Cloudflare production deployments typically use D1 or PostgreSQL as configured in
drizzle.config.ts. - Monorepo structure: All installation methods share the same codebase organized by
pnpm-workspace.yaml. - Telemetry control: Disable tracking via environment variables in
.envor Docker run commands.
Frequently Asked Questions
What is the default port for Open-SEO when using Docker?
The default port is 3001. After running docker compose up -d, access the dashboard at http://localhost:3001 as documented in docs/SELF_HOSTING_DOCKER.md.
Can I use PostgreSQL instead of SQLite with Open-SEO?
Yes. While the Docker quick-start uses SQLite for simplicity, production deployments (especially on Cloudflare Workers) can configure PostgreSQL or Cloudflare D1 by setting the appropriate DATABASE_URL in your environment variables and updating drizzle.config.ts.
How do I disable telemetry in Open-SEO?
Add OPENSEO_TELEMETRY_DISABLED=1 or DO_NOT_TRACK=1 to your .env file, then restart the container with docker compose up -d --force-recreate open-seo. For Cloudflare, set the secret via wrangler secret put with the same variable name.
What is the difference between the Docker and Cloudflare Workers installation methods?
Docker runs the full stack (frontend, API, and database) in containers on your local machine or server using compose.yaml and Dockerfile.selfhost, making it ideal for local development. Cloudflare Workers deploy only the backend API to Cloudflare’s edge network using wrangler.jsonc, requiring separate hosting for the frontend and database, but offering global low-latency access for production traffic.
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 →