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

LayerComponentRole
OSAlmaLinux 9Enterprise-grade, RHEL-compatible Linux base
Container RuntimeDocker / Docker ComposeRuns ChangeDetection.io and optional browser services
ApplicationChangeDetection.io (Python / Flask)Core monitoring, diffing, and alerting engine
Browser Engine (optional)Playwright / ChromiumHandles JavaScript-rendered websites
Reverse ProxyNginxHTTPS termination, routing, compression
TLSLet’s Encrypt / PKISecures 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 / CapabilityChangeDetection.ioVisualpingDistill.ioWachete
HostingSelf-hostedCloud onlyCloud / limited localCloud only
JavaScript support✅ Yes✅ Yes✅ Yes❌ Limited
Alert channelsExtensiveLimitedModerateModerate
Price monitoring✅ Yes✅ Yes✅ Yes✅ Yes
PrivacyFull controlCloud-basedCloud-basedCloud-based
CostFree, open-sourceSubscriptionSubscriptionSubscription

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.

Shape.host Resources dashboard with Create > Instance highlighted.

Choose a data center close to your users.

Shape.host instance form with the data center location selector highlighted.

Select AlmaLinux 9 (64-bit) as the operating system.

Choose a plan (recommended minimum):

2 vCPUs

4 GB RAM

20 GB NVMe SSD

Shape.host instance form with the operating system image selector highlighted.

Click Create Instance.

Wait around 30 seconds for provisioning.

Shape.host instance form with the Create Instance button highlighted.

Copy the public IP address.

Your server is now ready.

Shape.host Resources dashboard with the server IP address highlighted.

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.

Terminal showing DNF/YUM package management commands and output.

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.

Terminal showing DNF/YUM package management commands and output.

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.

Terminal showing DNF/YUM package management commands and output.

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
Terminal showing systemd service management commands or output.

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.

Terminal showing the GNU nano editor and configuration text.

Step 12: Start ChangeDetection.io

docker compose up -d

Runs the container in the background.

Terminal showing container image download progress.

Step 13: Verify Container Is Running

docker ps

You should see changedetection listed as running.

Terminal showing the Docker container listing.

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
Terminal showing DNF/YUM package management commands and output.

Step 16: Enable and Start Nginx

systemctl enable nginx
systemctl start nginx
Terminal showing systemd service management commands or output.

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;
    }
}
Terminal showing web server configuration text.

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.

Terminal showing systemd service management commands or output.

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.

Terminal showing DNF/YUM package management commands and output.
Terminal showing Certbot certificate commands and messages.

Access ChangeDetection.io Securely

https://your-domain.com

ChangeDetection.io is now fully installed and secured on AlmaLinux 9.

ChangeDetection.io watch list with a URL field for adding a monitored page.

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.