Data Validation Platform (DVP) macOS Installation Guide
Step-by-step instructions for deploying DVP on macOS using Docker Desktop and Docker Compose
Data Validation Platform (DVP)
macOS Installation Guide
Step-by-step instructions for deploying DVP on macOS using Docker Desktop and Docker Compose
Table of Contents
Overview
The Serpentua Data Validation Platform (DVP) is a web-based file integrity monitoring system. It continuously scans files and directories using SHA-256 checksums, alerts you when files are modified or deleted, and provides reporting and export capabilities.
DVP is delivered as a Docker Compose application consisting of two containers:
| Container | Image | Role |
|---|---|---|
app |
Built from Dockerfile (Python 3.13-slim) |
Flask web application — serves the UI on port 8443 |
db |
mysql:8.0 |
MySQL database — stores assets, checksums, and alerts |
/host (read-only),
allowing DVP to scan any local path without installing agents on individual machines.Prerequisites
Before you begin, confirm the following:
- ☐macOS 12 Monterey or later — Intel or Apple Silicon (M1 / M2 / M3)
- ☐An account with Administrator (sudo) privileges
- ☐Internet access (to download Docker Desktop, images, and Python packages)
- ☐At least 4 GB RAM available (Docker Desktop requires a minimum of 4 GB)
- ☐At least 2 GB of free disk space for images and the MySQL data volume
- ☐Ports 8443 and 3306 not already in use
- ☐The DVP project files (folder
serpentua-dvp-docker/)
System Preparation
3.1 — Verify your macOS version
Open the Terminal application (find it in Finder → Applications → Utilities → Terminal, or press ⌘ + Space and type Terminal) and run:
3.2 — Install Xcode Command Line Tools
The Xcode Command Line Tools provide git and other utilities needed during
installation. If they are not already installed, run:
A dialog will appear asking you to install the tools. Click Install and wait for the download to complete (~500 MB). If the tools are already installed you will see the message "xcode-select: error: command line tools are already installed" — that is fine, continue to the next step.
3.3 — (Apple Silicon only) Install Rosetta 2
If your Mac has an Apple Silicon chip (M1, M2, or M3), install Rosetta 2 so that Docker can run x86_64 container images when needed:
Install Docker Desktop
4.1 — Download Docker Desktop for Mac
Go to docker.com/products/docker-desktop in your browser and download
the Docker Desktop for Mac installer (.dmg file). On the download
page, choose either Mac with Intel Chip or Mac with Apple Chip to match
your hardware.
4.2 — Install from the disk image
Open the .dmg file
Double-click the downloaded Docker.dmg to mount it.
Drag Docker to Applications
In the window that opens, drag the Docker icon into the Applications folder.
Launch Docker Desktop
Open Finder → Applications and double-click Docker. macOS may ask you to confirm opening an application downloaded from the internet — click Open.
Complete the first-run setup
Accept the Docker Subscription Service Agreement. Docker Desktop will ask for your password to install its helper components — enter it and click Install Helper. Wait for the Docker Engine to start (the whale icon in the menu bar will stop animating).
4.3 — Verify the installation
4.4 — Configure file sharing
Docker Desktop on macOS can only mount directories that are explicitly allowed. Confirm that the directory containing your project files is in the sharing list:
Open Docker Desktop → Settings (gear icon) → Resources →
File Sharing. The list should already include /Users,
/Volumes, /private, and /tmp. If you plan to store
the project or monitor files outside of these paths, click + to add the
required directory, then click Apply & Restart.
Get the Application Source
Copy the serpentua-dvp-docker project folder to your Mac.
Choose the method that suits your situation:
Option A — Clone from a Git repository
Option B — Copy an existing folder
Use Finder to copy the serpentua-dvp-docker folder to your home directory,
or use Terminal:
Option C — Extract from a ZIP archive
After this step you should be inside a directory that contains, at a minimum:
Dockerfile, docker-compose.yml, requirements.txt,
runserver.py, .env, and the dvp/ folder.
Configure the Environment
All runtime settings are read from the .env file in the project root.
Open it with any text editor — nano in Terminal is the quickest option:
The file contains the following variables:
| Variable | Default | Description |
|---|---|---|
DB_USER |
dvp |
MySQL application user name |
DB_PASSWORD |
see file | Password for the MySQL application user — change this |
DB_NAME |
dvp_app |
Name of the MySQL database |
DB_HOST |
db |
Internal Docker service name — do not change |
MYSQL_ROOT_PASSWORD |
see file | MySQL root password — change this |
SERVER_HOST |
0.0.0.0 |
Flask bind address — leave as-is to listen on all interfaces |
SERVER_PORT |
8443 |
Port the application listens on |
DB_PASSWORD and
MYSQL_ROOT_PASSWORD. The .env file should never be
committed to a public Git repository.
Save the file after making your changes (Ctrl+O then Ctrl+X in nano).
Build & Launch the Application
From the project root directory, run:
Docker will:
Pull the MySQL 8.0 image
Downloaded from Docker Hub (~600 MB on first run).
Build the application image
Uses python:3.13-slim as the base, installs gcc + libffi-dev, then installs all Python packages from requirements.txt.
Start the db container
MySQL initialises the database and creates the user defined in .env. A health check polls every 10 seconds.
Start the app container
Waits for the database health check to pass, then launches the Flask server on port 8443.
Watching the logs in real time
Verify the Installation
Check container status
Both containers should show a status of running.
The db container should show healthy.
Access the web interface
Open a browser and navigate to:
Or, from another machine on the same network:
File Path Mapping
The Docker Compose file mounts the macOS host's filesystem into the container at
/host (read-only). Because macOS already uses Unix-style paths, the
mapping is straightforward: prepend /host to any absolute macOS path
when entering it inside the DVP application.
| Host Path (macOS) | Container Path to Enter in DVP |
|---|---|
/Users/alice/Documents |
/host/Users/alice/Documents |
/Users/alice/Desktop/data |
/host/Users/alice/Desktop/data |
/var/log |
/host/var/log |
/Volumes/BackupDisk/files |
/host/Volumes/BackupDisk/files |
/private/etc |
/host/private/etc |
/host to any absolute macOS path when entering
it inside the DVP application. For example, /Users/alice/data becomes
/host/Users/alice/data.
/Users, /Volumes,
/private, and /tmp. If you need to monitor a path outside
these directories, add it under Docker Desktop → Settings → Resources
→ File Sharing before adding it as an asset in DVP.
Firewall & Remote Access
The macOS Application Firewall controls inbound connections on a per-application basis rather than per port. When Docker Desktop first binds a port, macOS may display a dialog asking whether to allow incoming connections — click Allow. If the dialog was dismissed or the firewall blocks access, manage it manually:
Check and configure the firewall via Terminal
If the firewall is enabled and remote machines cannot connect, explicitly allow the Docker Desktop application:
Configure via System Settings (alternative)
Open System Settings → Network → Firewall → Options. Locate Docker Desktop in the list and set it to Allow incoming connections. Click OK.
3306 (MySQL) is exposed on all interfaces by the default
docker-compose.yml. In a production environment, consider removing the
ports entry from the db service so MySQL is only accessible
internally between containers.
Auto-Start on Boot
Docker Desktop auto-start (recommended)
Both containers already have restart: unless-stopped set in
docker-compose.yml, which means they restart automatically whenever the
Docker Engine restarts. Enable Docker Desktop to launch at login by opening Docker
Desktop → Settings (gear icon) → General → check
"Start Docker Desktop when you log in" → click Apply & Restart.
restart: unless-stopped, DVP will come back up automatically after a
reboot without any additional configuration.
Optional — launchd service
If you need the containers to start as a background service without requiring a user login (e.g., on a dedicated Mac server), create a launchd plist:
Day-to-Day Management
| Task | Command |
|---|---|
| Start all containers | docker compose up -d |
| Stop all containers | docker compose down |
| Restart all containers | docker compose restart |
| View live logs | docker compose logs -f |
| View app logs only | docker compose logs -f app |
| Check container status | docker compose ps |
| Open a shell in the app container | docker compose exec app bash |
| Open a MySQL shell | docker compose exec db mysql -u dvp -p dvp_app |
| Rebuild after code changes | docker compose up -d --build |
| Remove containers (keeps data) | docker compose down |
| Remove containers + volumes (deletes DB) | docker compose down -v |
Updating the application
Database backups
Troubleshooting
Container fails to start — "port already in use"
Another process is already listening on port 8443 or 3306.
Note the PID in the output and stop the conflicting process with kill <PID>,
or change the port mapping in docker-compose.yml (e.g., "8080:8443"
maps host port 8080 to container port 8443).
App container restarts repeatedly
Common causes:
- Database not yet ready — the app may have started before MySQL finished initialising. Wait 30 seconds and run
docker compose restart app. - Wrong credentials in
.env— ensureDB_USER,DB_PASSWORD, andDB_NAMEmatch what MySQL was initialised with. - Missing
.envfile — make sure the file exists in the same directory asdocker-compose.yml. Note: macOS Finder hides files beginning with a dot (.) by default. Press ⌘ + Shift + . to show hidden files.
Database container health check failing
If you see InnoDB or permission errors, the MySQL data volume may be corrupted or initialised with different credentials. Remove the volume and start fresh:
Cannot access the web UI from another machine
- Confirm Docker is listening:
sudo lsof -i :8443. - Check the macOS firewall: System Settings → Network → Firewall — confirm Docker Desktop is allowed.
- Check that your router or any cloud security group also allows port 8443.
Apple Silicon — platform mismatch warnings
On Apple Silicon Macs you may see a warning such as:
"The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8)".
Docker Desktop uses Rosetta 2 to run x86_64 images transparently, so the containers will
still work, but you can silence the warning by adding a platform key to each
service in docker-compose.yml:
Docker Desktop runs slowly or uses too much memory
Docker Desktop allocates a fixed amount of RAM and CPU to its Linux VM. If the machine feels sluggish, adjust the limits under Docker Desktop → Settings → Resources. A minimum of 2 GB RAM and 2 CPUs is recommended for DVP.
Docker Desktop does not start
- Restart Docker Desktop from the menu bar: click the whale icon → Restart.
- Try the built-in reset tool: whale icon → Troubleshoot → Restart Docker Desktop.
- Review Docker Desktop logs at
~/Library/Containers/com.docker.docker/Data/log/.
Uninstalling
Stop and remove containers and volumes
Remove the Docker images
Remove the project files
Optionally uninstall Docker Desktop
The easiest way to uninstall Docker Desktop is via its built-in uninstaller, which also removes all associated data and virtual machine files:
Click the whale icon in the menu bar → Troubleshoot → Uninstall. Confirm when prompted.
Alternatively, drag Docker.app from Applications to the Trash, then remove the remaining data:
Remove the launchd service (if created)
Serpentua Data Validation Platform — macOS Installation Guide | serpentua.com
Licensed under the Serpentua Source Available License. See the LICENSE file for full terms.