Docker Self-Hosting
Run Doverity locally with Docker Compose, building the image from source.
Run Doverity locally with Docker.
In Docker mode, Doverity uses AUTH_MODE=local_noauth (no auth checks, local admin user admin@localhost). Only expose it behind your own auth-protected reverse proxy, tunnel, or private network. For internet-facing self-hosting, use Cloudflare instead.
There is no published Docker image for Doverity. The default compose.yaml builds the image from this repo (Dockerfile.selfhost).
Prerequisites
- Docker Desktop (or Docker Engine + Docker Compose)
- A DataForSEO API key
Quickstart
Clone the repo, then:
git clone https://github.com/every-app/open-seo.git
cd open-seo
cp .env.example .envSet DATAFORSEO_API_KEY in .env using the DataForSEO setup guide, then start Doverity:
docker compose up -dOpen http://localhost:<PORT> (default 3001). The first up builds the image (several minutes), and each container start then builds the app (1-2 minutes); follow progress with docker compose logs -f.
Optional env values:
PORT(defaults to3001)ALLOWED_HOST(single reverse-proxy hostname to allow in Vite preview)AUTH_MODE=local_noauth(already set in compose)OPEN_SEO_IMAGE(optional; overrides the tag the built image receives)
If you are putting Docker behind a reverse proxy or a temporary tunnel, remember that Docker self-hosting runs with app auth disabled. Only expose it behind your own auth-protected reverse proxy, tunnel, or private network, and add the public hostname before restarting:
ALLOWED_HOST=yourdomain.com docker compose up -dYou can also persist it in .env.
Telemetry
Doverity collects anonymized telemetry for core usage events: heartbeats with aggregate counts (installs, users, projects, feature usage) tied to a random install ID, sent every 5 minutes during the first two hours after install, then at most once daily. Telemetry also includes failed setup check names and statuses, never values or error messages. No URLs, keywords, prompts, emails, or IP-derived location are collected, and idle installs send nothing.
To disable it, set OPENSEO_TELEMETRY_DISABLED=1 (or DO_NOT_TRACK=1) in .env, then run docker compose up -d --force-recreate doverity.
Tag the image for your own registry
Set OPEN_SEO_IMAGE to tag the built image, e.g. to push it to your own registry:
OPEN_SEO_IMAGE=ghcr.io/YOUR_GH_USER/doverity:v1.2.3 docker compose up -d --build doverityBuild your own image locally
If you are testing local code changes, build and run a local tag:
docker build -f Dockerfile.selfhost -t doverity:local .
OPEN_SEO_IMAGE=doverity:local docker compose up -dCommon commands
Restart service after env changes:
docker compose up -d doverityRebuild after pulling the latest code:
git pull && docker compose up -d --build doverityStop:
docker compose downHealth and troubleshooting
Startup checks appear in docker compose logs before the build. Once running, /api/health reports configuration and database status, and docker compose ps reports container health.
Troubleshooting environment variables
To confirm Docker Compose is using the expected environment variables:
docker compose configCheck that AUTH_MODE=local_noauth, and that DATAFORSEO_API_KEY is the base64 encoded value of your DataForSEO email and API password in this format: email:password.
If you changed .env, recreate the container so Compose reapplies it:
docker compose up -d --force-recreate doverity