Data Validation Platform (DVP) Windows 10/11 Installation Guide
Step-by-step instructions for deploying DVP on Windows using Docker Desktop and Docker Compose
Data Validation Platform (DVP)
Windows Installation Guide
Step-by-step instructions for deploying DVP on Windows 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 |
| ⓘ | The application container mounts a Windows drive into the container at /host (read-only),
allowing DVP to scan any local path without installing agents on individual machines. |
Prerequisites
Before you begin, confirm the following:
- ☐ Windows 10 64-bit (Build 19041 or later) or Windows 11 — Home, Pro, Enterprise, or Education
- ☐ An account with Administrator privileges
- ☐ Hardware virtualisation enabled in BIOS/UEFI (Intel VT-x or AMD-V)
- ☐ At least 4 GB RAM available (Docker Desktop requires a minimum of 4 GB)
- ☐ Internet access (to download Docker Desktop, images, and Python packages)
- ☐ 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 — Enable WSL2
Docker Desktop on Windows uses the Windows Subsystem for Linux 2 (WSL2) backend for best performance. You must enable WSL2 before installing Docker Desktop.
| ⚠ | Run all PowerShell commands below in a PowerShell window opened as Administrator. Right-click the Start menu, choose Windows Terminal (Admin) or Windows PowerShell (Admin). |
3.1 — Enable WSL and the Virtual Machine Platform
Restart your computer after running both commands before continuing.
3.2 — Set WSL2 as the default version
| ⓘ | If you see a message about updating the WSL2 kernel, run wsl --update
and then retry the command above. |
Install Docker Desktop
| ⚠ | On Windows, Docker is installed via Docker Desktop — an all-in-one installer that includes Docker Engine, Docker Compose, and the WSL2 integration. Do not attempt to install Docker Engine directly on Windows. |
4.1 — Download Docker Desktop
Go to docker.com/products/docker-desktop in your browser and download the
Docker Desktop Installer for Windows (the .exe file).
4.2 — Run the installer
1 | Launch the installerDouble-click |
2 | Choose the WSL2 backendOn the configuration screen, ensure "Use WSL 2 instead of Hyper-V" is checked. Click Ok. |
3 | Complete the installationWait for the installer to finish, then click Close and restart to reboot. |
4 | Launch Docker DesktopAfter reboot, Docker Desktop will start automatically. Wait for the whale icon in the system tray to stop animating — this means the Docker Engine is running. |
4.3 — Verify the installation
Open a new PowerShell or Command Prompt window (no administrator rights needed) and run:
4.4 — Enable drive sharing (if prompted)
Docker Desktop may ask for permission to share your local drives so that containers can access files on your Windows filesystem. When prompted, click Share it. You can also manage this manually:
Open Docker Desktop → Settings → Resources → File Sharing, and confirm that the drive containing your project files (typically C:) is listed and enabled.
Get the Application Source
Copy the serpentua-dvp-docker project folder to your Windows machine.
Choose the method that suits your situation:
Option A — Clone from a Git repository
If Git is not installed, download it from git-scm.com and run the installer with default settings. Then open PowerShell and run:
Option B — Copy an existing folder
Use File Explorer to copy the serpentua-dvp-docker folder to a convenient
location, for example C:\serpentua-dvp. Alternatively, use PowerShell:
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 Notepad, Notepad++, or VS Code:
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 |
| ⚠ | Always change the default passwords before going into production.
Use strong, unique values for both DB_PASSWORD and
MYSQL_ROOT_PASSWORD. The .env file should never be
committed to a public Git repository. |
Save and close the file after making your changes.
Build & Launch the Application
Open PowerShell, navigate to the project root directory, and run:
Docker will:
1 | Pull the MySQL 8.0 imageDownloaded from Docker Hub (~600 MB on first run). |
2 | Build the application imageUses |
3 | Start the
|
4 | Start the
|
| ⓘ | The first build takes several minutes because Python packages must be compiled and downloaded. Subsequent starts are much faster as Docker caches the image layers. |
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:
| ✓ | If the DVP dashboard loads in your browser, the installation is complete and the application is running correctly. |
File Path Mapping
The Docker Compose file mounts the Windows C:\ drive into the container at
/host (read-only). When you add asset paths inside the DVP UI, you must use
the container path, not the Windows path. Replace the drive letter and backslashes
with the /host prefix and forward slashes.
| Host Path (Windows) | Container Path to Enter in DVP |
|---|---|
C:\Users\alice\Documents |
/host/Users/alice/Documents |
C:\ProgramData\MyApp |
/host/ProgramData/MyApp |
C:\inetpub\wwwroot |
/host/inetpub/wwwroot |
C:\Logs\AppLogs |
/host/Logs/AppLogs |
C:\Data\Backups |
/host/Data/Backups |
| ⓘ | The general rule: strip the drive letter (C:\), prepend /host/,
and replace all backslashes (\) with forward slashes (/).
For example, C:\Users\alice\data becomes /host/Users/alice/data. |
| ⚠ | Only files on the C: drive are accessible by default. If you need to
monitor files on another drive (e.g., D:\), the volume mount in
docker-compose.yml must be updated to include that drive, and a
new prefix (e.g., /host-d/) would need to be configured accordingly. |
Firewall & Remote Access
Windows Defender Firewall may block inbound connections on port 8443.
When Docker Desktop starts a container that binds a port, Windows will often prompt you
to allow access. If no prompt appeared, or if remote machines cannot reach the web UI,
add the rule manually.
Add an inbound firewall rule via PowerShell
Verify the rule was created
Add the rule via the GUI (alternative)
Open Windows Defender Firewall with Advanced Security (search in Start menu) →
Inbound Rules → New Rule → select Port, enter
8443, choose Allow the connection, apply to all profiles, and name the
rule Serpentua DVP Web.
| ⚠ | Port 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 will restart automatically whenever the
Docker Engine restarts. Enable Docker Desktop to start with Windows by opening Docker
Desktop → Settings (gear icon) → General → check
"Start Docker Desktop when you sign in to your computer" → click
Apply & Restart.
| ⓘ | With Docker Desktop set to start on login and the containers configured with
restart: unless-stopped, DVP will come back up automatically after a
reboot without any additional configuration. |
Optional — Task Scheduler startup task
If you need the containers to start before any user logs in (e.g., on a server), use
Windows Task Scheduler to run docker compose up -d at system startup:
To verify the task was created:
Day-to-Day Management
Run all management commands from a PowerShell window inside the project directory
(C:\serpentua-dvp\serpentua-dvp-docker).
| 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 from the last column and find the process in Task Manager (Details tab), or
use: Get-Process -Id <PID>. Stop the conflicting process, 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: Windows File Explorer may hide file extensions; confirm the file is named.envand not.env.txt.
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:
| ⚠ | The following command permanently deletes all data in the MySQL volume. Take a backup first if you have data to preserve. |
Cannot access the web UI from another machine
- Confirm the firewall rule exists:
Get-NetFirewallRule -DisplayName "Serpentua DVP Web"— the rule should showEnabled: True. - Confirm Docker is listening:
netstat -ano | findstr :8443. - Check that any external firewall, router, or cloud security group also allows port 8443.
- Try disabling Windows Defender Firewall temporarily to rule it out as the cause.
Docker Desktop does not start / whale icon not appearing
- Confirm WSL2 is installed correctly: open PowerShell and run
wsl --status. - Confirm virtualisation is enabled: open Task Manager → Performance tab → CPU — Virtualisation: Enabled should appear.
- Try restarting Docker Desktop from the system tray: right-click the whale icon → Restart.
- Review Docker Desktop logs at
%APPDATA%\Docker\log.txt.
Line-ending issues with shell scripts in the container
Windows uses CRLF (\r\n) line endings while Linux expects LF (\n).
If startup scripts fail inside the container with "No such file or directory"
errors, configure Git to not alter line endings:
Then re-clone or re-checkout the project files.
Uninstalling
Stop and remove containers and volumes
Remove the Docker images
Remove the project files
Remove the firewall rule
Optionally uninstall Docker Desktop
Open Windows Settings → Apps → search for Docker Desktop → click Uninstall. This will remove Docker Desktop and all associated data including any remaining images and volumes.
| ⓘ | The Docker Desktop uninstaller does not remove WSL2 or the Linux distributions installed alongside it. If you no longer need WSL2, you can disable it from Turn Windows features on or off → uncheck Windows Subsystem for Linux and Virtual Machine Platform. |