domain-watchdog

domain-watchdog

Docker app from DevlinDelFuego's Repository

Overview

Domain Watchdog monitors domain names using RDAP, tracks their history, and helps you acquire them when they expire.

Requires an existing PostgreSQL and Redis container on the same Docker network.

Also deploy the domain-watchdog-worker container.

Before starting, create the database:
docker exec -it YOUR_POSTGRES_CONTAINER psql -U YOUR_USER -c "CREATE DATABASE domainwatchdog;"

Domain Watchdog

Domain Watchdog

Your companion in the quest for domain names 🔍
domainwatchdog.eu »


Domain Watchdog is an app that uses RDAP to collect publicly available info about domains, track their history, and purchase them.
For more information please check out the documentation !

Why use it?

  • Historical Tracking: Know the history of a domain name, from its inception to its release into the public domain.
  • Detailed Monitoring: Follow the evolution of a domain name and the entities that manage it in detail.
  • Auto-purchase Domain: You want the domain name of your dreams, but it is already taken? Domain Watchdog detects the deletion of the domain name on WHOIS and can trigger the purchase of the domain name via a provider's API

Although the RDAP and WHOIS protocols allow you to obtain precise information about a domain, it is not possible to perform a reverse search to discover a list of domain names associated with an entity. Additionally, accessing a detailed history of events (ownership changes, renewals, etc.) is not feasible with these protocols.

Install

[!TIP] For more details on the installation procedure, please refer to the documentation.

Docker Deployment

  1. Download the docker-compose.yml and modify it as needed
  2. Download the .env and modify it as needed
  3. Add static files to customize your instance (under public/content)
  4. Pull the latest version of the Domain Watchdog image from Docker Hub
docker compose pull
  1. Start the project in production environment
docker compose up

By default, the container listens on http://localhost:8080, but you can configure this in environment variables.

Development and contributions

See the documentation for information on setting up a development environment and making your contributions.
To add a new provider, a dedicated page is available.

Security

Please see SECURITY.md.

License

This source code of this project is licensed under GNU Affero General Public License v3.0 or later. Contributions are welcome as long as they do not contravene the Code of Conduct.

Disclaimer

[!IMPORTANT]

  • Domain Watchdog is an opensource project distributed under GNU Affero General Public License v3.0 or later license
  • In the internal operation, everything is done to perform the least possible RDAP requests: rate limit, intelligent caching system, etc.
  • Please note that this project is NOT affiliated IN ANY WAY with the API Providers used to order domain names.
  • The project installers are responsible for the use of their own instance.
  • Under no circumstances will the owner of this project be held responsible for other cases over which he has no control.

Install domain-watchdog on Unraid in a few clicks.

Find domain-watchdog in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for domain-watchdog Review the template variables and paths Click Install

Requirements

PostgreSQL container | Redis container | Both on the same Docker network | Also install domain-watchdog-worker

Download Statistics

28,736
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
maelgangloff/domain-watchdog:latest
Last Updated2026-04-25
First Seen2026-06-02

Runtime arguments

Web UI
http://[IP]:[PORT:80]/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--restart=unless-stopped

Template configuration

Web UI PortPorttcp

Port to access the Domain Watchdog web interface.

Target
80
Default
8080
Value
8080
Caddy DataPathrw

Internal Caddy state storage.

Target
/data
Default
/mnt/user/appdata/domain-watchdog/caddy/data
Value
/mnt/user/appdata/domain-watchdog/caddy/data
Caddy ConfigPathrw

Internal Caddy configuration storage.

Target
/config
Default
/mnt/user/appdata/domain-watchdog/caddy/config
Value
/mnt/user/appdata/domain-watchdog/caddy/config
Public ContentPathrw

User-uploaded public content. Create a home.md file here to customize the landing page.

Target
/app/public/content
Default
/mnt/user/appdata/domain-watchdog/public/content
Value
/mnt/user/appdata/domain-watchdog/public/content
JWT PassphraseVariable

Passphrase used to encrypt JWT keypair. Generate with: openssl rand -hex 32 — If changing this on an existing install, regenerate keys with: docker exec domain-watchdog php /app/bin/console lexik:jwt:generate-keypair --overwrite

Target
JWT_PASSPHRASE
App EnvironmentVariable

Leave as prod.

Target
APP_ENV
Default
prod
Value
prod
App SecretVariable

Random secret key. Generate with: openssl rand -hex 32

Target
APP_SECRET
Secure CookiesVariable

Set to true if behind a reverse proxy with SSL. Set to false for plain HTTP direct access.

Target
HTTP_SECURE_COOKIE
Default
true
Value
true
Server NameVariable

Internal Caddy binding. Leave as :80.

Target
SERVER_NAME
Default
:80
Value
:80
Outgoing IPVariable

Your server's outgoing public IP address. Required for some domain connectors/registrars.

Target
OUTGOING_IP
Enable RegistrationVariable

Allow new users to register. Set to false to lock down the instance.

Target
REGISTRATION_ENABLED
Default
true
Value
true
Verify Email on RegistrationVariable

Require email verification on signup. Requires a working Mailer DSN.

Target
REGISTRATION_VERIFY_EMAIL
Default
false
Value
false
Database URLVariable

Full PostgreSQL connection string. Format: postgresql://USER:PASSWORD@CONTAINER_NAME:PORT/DATABASE?serverVersion=VERSION&charset=utf8

Target
DATABASE_URL
Default
postgresql://app:password@postgresql:5432/domainwatchdog?serverVersion=16&charset=utf8
Value
postgresql://app:password@postgresql:5432/domainwatchdog?serverVersion=16&charset=utf8
Redis Async DSNVariable

Redis connection for async messages. Format: redis://CONTAINER_NAME:PORT/messages?lazy=1

Target
MESSENGER_ASYNC_TRANSPORT_DSN
Default
redis://redis:6379/messages?lazy=1
Value
redis://redis:6379/messages?lazy=1
Redis RDAP Low DSNVariable

Redis connection for low-priority RDAP messages.

Target
MESSENGER_RDAP_LOW_TRANSPORT_DSN
Default
redis://redis:6379/messages-rdap-low?lazy=1
Value
redis://redis:6379/messages-rdap-low?lazy=1
Redis RDAP High DSNVariable

Redis connection for high-priority RDAP messages.

Target
MESSENGER_RDAP_HIGH_TRANSPORT_DSN
Default
redis://redis:6379/messages-rdap-high?lazy=1
Value
redis://redis:6379/messages-rdap-high?lazy=1
Redis Lock DSNVariable

Redis connection for distributed locking. Format: redis://CONTAINER_NAME:PORT

Target
LOCK_DSN
Default
redis://redis:6379
Value
redis://redis:6379
Mailer DSNVariable

SMTP connection for email alerts. Example: smtp://user:pass@smtp.example.com:587 — Leave as null://null to disable.

Target
MAILER_DSN
Default
null://null
Value
null://null
Mailer Sender NameVariable

Display name for outgoing notification emails.

Target
MAILER_SENDER_NAME
Default
Domain Watchdog
Value
Domain Watchdog
Mailer Sender EmailVariable

Sender address for outgoing notification emails.

Target
MAILER_SENDER_EMAIL
Default
notifications@example.com
Value
notifications@example.com
OAuth Client IDVariable

OAuth2/OIDC client ID. Leave blank to disable SSO.

Target
OAUTH_CLIENT_ID
OAuth Client SecretVariable

OAuth2/OIDC client secret.

Target
OAUTH_CLIENT_SECRET
OAuth Authorization URLVariable

OAuth2 authorization endpoint URL.

Target
OAUTH_AUTHORIZATION_URL
OAuth Token URLVariable

OAuth2 token endpoint URL.

Target
OAUTH_TOKEN_URL
OAuth UserInfo URLVariable

OAuth2 userinfo endpoint URL.

Target
OAUTH_USERINFO_URL
OAuth ScopeVariable

OAuth2 scopes to request. Example: openid profile email

Target
OAUTH_SCOPE
SSO Auto RedirectVariable

Automatically redirect to SSO login instead of showing the local login form.

Target
SSO_AUTO_REDIRECT
Default
false
Value
false