Overview
This guide covers running MergeWatch and Postgres as Docker containers, setting up a reverse proxy with TLS using nginx or Caddy, and configuring the GitHub App webhook to point at your domain.Prerequisites
1
Install Docker and Docker Compose
2
Open port 443
Ensure your firewall allows inbound HTTPS traffic on port 443. If you use
ufw:3
Point a domain at your server
Create a DNS A record pointing your domain (e.g.
mergewatch.example.com) to your server’s public IP address. A domain is required for TLS certificates.4
Gather your GitHub App credentials
5
Choose an LLM provider
Set
LLM_PROVIDER to your preferred provider. For the default Anthropic provider, you also need ANTHROPIC_API_KEY.Deploy with Docker Compose
1
Create the project directory
2
Create the docker-compose.yml
3
Create the .env file
4
Start the services
Set up Postgres
By default, thedocker-compose.yml above runs PostgreSQL as a container alongside MergeWatch. Data is persisted to a Docker volume (pgdata).
If you prefer an external managed database, remove the
postgres service from docker-compose.yml and set DATABASE_URL in your .env file to the external connection string.Set up a reverse proxy with TLS
Expose MergeWatch on port 443 with TLS using nginx or Caddy. GitHub requires HTTPS for webhook delivery.Configure the webhook URL
Set the webhook URL on your GitHub App to your domain followed by/webhook:
Next steps
Configure review behavior
Tune sensitivity, ignored paths, and review focus areas.
Environment variables
Full list of supported environment variables.
Troubleshooting
Common issues and how to fix them.
Upgrading
How to update MergeWatch to the latest version.