How to Install ChangeDetection.io on AlmaLinux 9 (Docker + Nginx + SSL)
ChangeDetection.io is an open-source website change monitoring and alerting platform that allows you to track content changes on any website. It can detect modifications in text, HTML structure, prices, availability, images, and API responses, making it a powerful self-hosted alternative to SaaS tools such as Visualping, Distill.io, or Wachete. It supports both static websites and JavaScript-rendered pages using a headless browser engine.
Running ChangeDetection.io on AlmaLinux 9, a RHEL-compatible, enterprise-grade Linux distribution, provides long-term stability, predictable updates, and strong security defaults. AlmaLinux 9 is an excellent choice for production environments, especially when combined with Docker, Nginx, and SSL encryption, resulting in a secure, scalable, and fully self-hosted monitoring stack.
Architecture Overview
| Layer | Component | Role |
|---|---|---|
| OS | AlmaLinux 9 | Enterprise-grade, RHEL-compatible Linux base |
| Container Runtime | Docker / Docker Compose | Runs ChangeDetection.io and optional browser services |
| Application | ChangeDetection.io (Python / Flask) | Core monitoring, diffing, and alerting engine |
| Browser Engine (optional) | Playwright / Chromium | Handles JavaScript-rendered websites |
| Reverse Proxy | Nginx | HTTPS termination, routing, compression |
| TLS | Let’s Encrypt / PKI | Secures web interface and API access |
Why Use ChangeDetection.io?
- Monitor any website – text, prices, availability, DOM structure, or APIs
- JavaScript-aware monitoring – works with dynamic websites via Playwright
- Flexible alerting system – email, Telegram, Slack, Discord, Webhooks, and more
- Visual & textual diffs – clearly see what changed between checks
- Advanced filtering – CSS selectors, XPath, regex-based detection
- Fully self-hosted – no SaaS dependency, full privacy and data ownership
- Efficient and lightweight – runs well even on small VPS instances
ChangeDetection.io vs Other Website Monitoring Tools
| Feature / Capability | ChangeDetection.io | Visualping | Distill.io | Wachete |
|---|---|---|---|---|
| Hosting | Self-hosted | Cloud only | Cloud / limited local | Cloud only |
| JavaScript support | ✅ Yes | ✅ Yes | ✅ Yes | ❌ Limited |
| Alert channels | Extensive | Limited | Moderate | Moderate |
| Price monitoring | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
| Privacy | Full control | Cloud-based | Cloud-based | Cloud-based |
| Cost | Free, open-source | Subscription | Subscription | Subscription |
ChangeDetection.io is ideal for users who want maximum control, flexibility, and privacy, without relying on third-party monitoring services.
Security & Best Practices on AlmaLinux 9
- Run ChangeDetection.io behind Nginx with HTTPS enabled.
- Bind the application container to localhost and expose only Nginx publicly.
- Store SMTP credentials, tokens, and webhooks using environment variables.
- Enable SELinux enforcing mode and use compatible Docker volume labeling.
- Configure firewalld to allow only ports 80 and 443.
- Keep AlmaLinux, Docker, and ChangeDetection.io images updated.
- Automate SSL renewals using Certbot or an ACME-compatible solution.
- Back up ChangeDetection.io data volumes regularly.
- Limit Playwright/Chromium usage to trusted websites when enabled.
Typical Use Cases
- E-commerce price and stock monitoring
- Competitor website change tracking
- Job posting and vacancy alerts
- Legal, policy, or compliance change detection
- Landing page and marketing content monitoring
- API response change monitoring
- QA and frontend regression detection
Installing ChangeDetection.io on AlmaLinux 9 with Docker, Nginx, and SSL gives you a powerful, private, and enterprise-ready website monitoring platform — capable of tracking everything from simple text updates to complex JavaScript-driven content, all hosted securely on your own infrastructure.
Create a Cloud Server Instance on Shape.Host
Before installing ChangeDetection.io, you need a clean AlmaLinux 9 VPS.
Go to https://shape.host and log in.
Click Create.
Select Instance.

Choose a data center close to your users.

Select AlmaLinux 9 (64-bit) as the operating system.
Choose a plan (recommended minimum):
2 vCPUs
4 GB RAM
20 GB NVMe SSD

Click Create Instance.
Wait around 30 seconds for provisioning.

Copy the public IP address.
Your server is now ready.

Step 1: Connect to the Server via SSH
Linux / macOS
ssh root@YOUR_SERVER_IP
Windows (PowerShell or Windows Terminal)
ssh root@YOUR_SERVER_IP
Accept the fingerprint when prompted. You are now logged in as root.
Step 2: Update the System
dnf update
Updates all system packages to the latest versions.

Step 3: Enable Required Repositories
dnf install epel-release
dnf config-manager --set-enabled crb
- EPEL provides extra packages
- CRB is required for some dependencies on AlmaLinux
Step 4: Install Required Dependencies
dnf install ca-certificates curl gnupg2 dnf-utils
These tools allow secure downloads and repository management.

Step 5: Add Docker Repository
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
AlmaLinux uses the CentOS Docker repository.
Step 6: Install Docker Engine and Docker Compose
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Installs Docker Engine and Docker Compose v2.

Step 7: Enable and Start Docker
systemctl enable docker
systemctl start docker
Ensures Docker starts automatically on boot.
Step 8: Verify Docker Installation
docker version
docker compose version
Confirms Docker and Docker Compose are installed correctly.
Step 9: Create ChangeDetection Directory
mkdir -p /opt/changedetection
This directory stores configuration and persistent data.
Step 10: Enter the Directory
cd /opt/changedetection

Step 11: Create Docker Compose Configuration
nano docker-compose.yml
Paste the exact configuration from your history:
services:
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:latest
container_name: changedetection
restart: unless-stopped
ports:
- "127.0.0.1:5000:5000"
volumes:
- ./data:/datastore
environment:
- BASE_URL=https://watch.example.com
- TZ=Europe/Bucharest
Explanation:
- Application runs inside Docker
- Port is bound only to localhost for security
- Data is persisted on disk
- BASE_URL must match the final domain
Save and exit.

Step 12: Start ChangeDetection.io
docker compose up -d
Runs the container in the background.

Step 13: Verify Container Is Running
docker ps
You should see changedetection listed as running.

Step 14: Test ChangeDetection Locally
curl http://127.0.0.1:5000
Confirms the application responds before exposing it publicly.
Step 15: Install Nginx
dnf install nginx

Step 16: Enable and Start Nginx
systemctl enable nginx
systemctl start nginx

Step 17: Create Nginx Reverse Proxy Configuration
nano /etc/nginx/conf.d/changedetection.conf
Paste:
server {
listen 80;
server_name watch.example.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Step 18: Remove Default Nginx Configuration
rm -f /etc/nginx/conf.d/default.conf
Prevents conflicts with the default virtual host.
Step 19: Test and Reload Nginx
nginx -t
systemctl reload nginx
Step 20: Allow Nginx Network Access (SELinux)
setsebool -P httpd_can_network_connect on
This is required on AlmaLinux because SELinux blocks proxy connections by default.

Step 21: Install Certbot and Enable SSL
dnf install certbot python3-certbot-nginx
certbot --nginx -d almalinux-tutorials.shape.host
Certbot automatically issues and configures an SSL certificate.


Access ChangeDetection.io Securely
https://your-domain.com
ChangeDetection.io is now fully installed and secured on AlmaLinux 9.

ChangeDetection.io, Miniflux, Ghostfolio, NocoDB, HedgeDoc, and similar tools require fast and stable infrastructure.
Shape.Host provides:
- High-performance NVMe Cloud VPS
- Instant provisioning
- Clean OS templates
- Excellent uptime
- Easy scalability
Visit https://shape.host to deploy your next self-hosted application with confidence.