Complete guide for running DroneOpsCommand on a Windows 10/11 machine using Docker Desktop.
| Requirement | Minimum | Recommended |
|---|---|---|
| OS | Windows 10 (version 2004+) or Windows 11 | Windows 11 |
| RAM | 8 GB | 16 GB |
| Disk | 25 GB free | 50 GB free |
| CPU | 4 cores | 8 cores |
| Virtualization | Enabled in BIOS | — |
The AI report engine (Ollama/Qwen 2.5 3B) reserves ~8 GB of RAM. With 8 GB total you will be tight — 16 GB is strongly recommended. Alternatively, use
LLM_PROVIDER=claudewith an Anthropic API key to skip the local model entirely.
Docker Desktop on Windows requires WSL 2 (Windows Subsystem for Linux). Open PowerShell as Administrator and run:
wsl --installThis enables WSL 2 and installs Ubuntu. Restart your computer when prompted.
After reboot, verify:
wsl --versionYou should see WSL version 2.x. If you see version 1, upgrade:
wsl --set-default-version 2- "Virtualization not enabled" — Enter your BIOS/UEFI settings and enable Intel VT-x or AMD-V. The setting is usually under CPU Configuration or Security.
- Windows Home edition — WSL 2 works on Windows Home. No need for Pro/Enterprise.
- Corporate machines with Group Policy restrictions — Contact your IT department to enable Hyper-V and WSL 2.
- Download Docker Desktop from docker.com/products/docker-desktop
- Run the installer — accept defaults
- When prompted, choose "Use WSL 2 instead of Hyper-V"
- Restart if required
After installation, open Docker Desktop and verify it's running (whale icon in the system tray).
Open Docker Desktop → Settings → Resources → WSL Integration:
- Ensure your WSL 2 distro (Ubuntu) is enabled
- Under Resources → Advanced, allocate at least:
- CPUs: 6 (if you have 8 total)
- Memory: 10 GB (if you have 16 GB total)
- Disk: 40 GB
Click Apply & Restart.
If you don't already have Git:
- Download from git-scm.com/download/win
- Run the installer — accept defaults
- Important: When asked about line endings, choose "Checkout as-is, commit as-is" to avoid CRLF issues
Verify in PowerShell:
git --versionOpen PowerShell (regular, not Admin) and run:
# Clone the repo
git clone https://github.com/BigBill1418/DroneOpsCommand.git
cd DroneOpsCommand
# Create your config file
copy .env.example .envNow edit .env with Notepad (or any text editor):
notepad .envChange these two values at minimum (do not use the defaults in production):
POSTGRES_PASSWORD=your_secure_database_password
JWT_SECRET_KEY=your_random_secret_string_here
Note: There is no
ADMIN_PASSWORDenv var. The admin account is created via the setup wizard on first visit in your browser.
Tip: To generate a random secret, run this in PowerShell:
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Maximum 256 }) -as [byte[]])
Also update the DATABASE_URL to match your new password:
DATABASE_URL=postgresql+asyncpg://doc:your_secure_database_password@db:5432/doc
Save and close the file.
In PowerShell, from the DroneOpsCommand directory:
docker compose up -dThe first run will:
- Build the backend, frontend, and flight-parser images (5-10 minutes)
- Download PostgreSQL, Redis, and Ollama base images (~2 GB)
- Pull the AI model — Qwen 2.5 3B is ~1.5 GB
Watch the model download progress:
docker compose logs -f ollama-setupPress Ctrl+C when you see "Model pulled." — the app is ready.
Open your browser and go to:
- Web UI: http://localhost:3080
- API docs: http://localhost:3080/docs
On first visit, the setup wizard will prompt you to create your admin account. On subsequent visits, log in with the credentials you created.
Another application is using port 3080. Edit .env and change:
FRONTEND_PORT=3090
Then restart:
docker compose down
docker compose up -dAccess the app at http://localhost:3090 instead.
- Open Docker Desktop
- Click the restart button, or quit and reopen
- If it persists, run in PowerShell as Admin:
Then reopen Docker Desktop.
wsl --shutdown
Docker's virtual disk is full. Open Docker Desktop → Settings → Resources → Disk image size → increase it. Or clean up unused images:
docker system prune -aWarning: This removes all unused images. You will need to rebuild on next
docker compose up -d.
Create or edit the file C:\Users\<YourUsername>\.wslconfig:
[wsl2]
memory=10GB
processors=6
swap=4GBThen restart WSL:
wsl --shutdownAdd these exclusions to your antivirus:
C:\Program Files\Docker\C:\Users\<YourUsername>\AppData\Local\Docker\- The
DroneOpsCommandfolder
By default the app listens on all interfaces. In .env, make sure FRONTEND_PORT is set to just the port number (not bound to localhost):
FRONTEND_PORT=3080
Then access from other devices using your Windows machine's IP address (find it with ipconfig):
http://192.168.1.xxx:3080
You may need to allow port 3080 through Windows Firewall:
# Run as Administrator
netsh advfirewall firewall add rule name="DroneOpsCommand" dir=in action=allow protocol=TCP localport=3080# Start (runs in background)
docker compose up -d
# Stop
docker compose down
# Restart
docker compose restart
# View logs
docker compose logs -f
# View logs for a specific service
docker compose logs -f backend# Pull latest code
git pull origin main
# Rebuild and restart
docker compose up -d --buildThe app stores data in Docker volumes. To back up:
# Database backup
docker compose exec db pg_dump -U doc doc > backup.sql
# Find where uploads/reports are stored
docker volume inspect droneopscommand_app_dataOr use the built-in backup feature in Settings → Account → Backup & Restore in the web UI.
If you need a clean start:
docker compose down -v
docker compose up -dWarning:
docker compose down -vdeletes all data (database, uploads, reports). Back up first.
If you fly newer DJI drones with encrypted flight logs, you need a DJI API key for the flight parser:
- Register at developer.dji.com
- Create an application and obtain an API key
- Add it to
.env:DJI_API_KEY=your_key_here - Restart:
docker compose restart flight-parser
To access your DroneOpsCommand instance from anywhere without opening router ports, set CLOUDFLARE_TUNNEL_TOKEN in your .env file. Get a token from the Cloudflare Zero Trust dashboard under Networks → Tunnels.
Configure email delivery for sending reports to customers. Either:
- Edit
.envwith your SMTP settings, or - Configure in the web UI: Settings → Email & Billing
After configuring, use the Test Email button in Settings to verify.