Skip to content

Windows

This page describes running the Canvus Server Linux containers on Windows, inside a Linux VM managed by Podman Desktop (WSL2 backend) or Docker Desktop. For installation without containers, see Windows standalone installation.

Note

For production, deploy on a Linux host. Podman Desktop on Windows is supported for development, evaluation, and test deployments, but WSL2 networking (especially UDP for WebRTC) and resource limits are less predictable than a native Linux server. The Linux container install is the reference deployment.

Supported Windows versions: Windows 10/11 and Windows Server 2019/2022 (64-bit) with WSL2 enabled.

System requirements

  • RAM: 8 GB minimum (16 GB recommended) on the host. Allocate at least 4 GB to the WSL2 VM --- the combined container needs 4 GB minimum itself (see Linux page).
  • 2 CPU cores minimum (4 recommended)
  • 20 GB disk space minimum
  • WSL2 enabled (Podman Desktop handles this automatically on Windows 10/11)
  • Administrator access for installation

Install Podman Desktop

  1. Download the Windows installer from podman-desktop.io/downloads.
  2. Run the installer and follow the prompts.
  3. Podman Desktop enables WSL2 and installs a Podman-optimized distribution automatically.
  4. Launch Podman Desktop from the Start Menu and click Initialize and Start if prompted.

Verify in PowerShell:

podman --version
# Should show: podman version 4.x.x or higher

Install podman-compose

Podman Desktop does not include podman-compose. Choose one:

Option A: Built-in compose (Podman 4.0+, recommended)

podman compose version

If this works, use podman compose (with a space) in place of podman-compose for all commands on this page.

Option B: Install via Python

winget install Python.Python.3.11
# Close and reopen PowerShell to refresh PATH
pip install podman-compose

Docker Desktop alternative

The same images and compose file work with Docker Desktop. Docker Desktop requires a paid subscription for organizations with more than 250 employees or more than \$10M annual revenue. Podman Desktop avoids that licensing exposure, but if Docker Desktop is already approved in your environment, nothing prevents you from using it.

Allocate resources to WSL2

Create C:\Users\YourUsername\.wslconfig before you start the containers:

[wsl2]
memory=8GB
processors=4
swap=2GB
localhostForwarding=true

Apply with wsl --shutdown (WSL2 restarts on next use). Allocating less than 4 GB to WSL2 will cause canvus-combined to be OOM-killed.

Container registry access

Canvus Server images are hosted on the MultiTaction public container registry and pull anonymously --- no registry login is required.

Download the compose file

mkdir C:\canvus-server
cd C:\canvus-server

Invoke-WebRequest -Uri "https://canvus-downloads.multitaction.com/server/podman-compose.yml" -OutFile "podman-compose.yml"

Note

The 26.4.0 compose file deploys two services by default: canvus (container canvus-combined) and postgres (container canvus-postgres). A third service, canvus-media, ships commented out --- it only applies once you enable the coming-soon WebRTC feature, and then exposes UDP 40000-40100; make sure Windows Firewall allows those ports if you enable it and clients outside the host need video streaming. See the Linux page for the full architecture.

Configure the deployment

Edit podman-compose.yml in Notepad or your preferred text editor. At minimum, change these in the canvus service:

environment:
  CANVUS_EXTERNAL_URL: https://canvus.example.com
  CANVUS_ADMIN_EMAIL: admin@yourcompany.com
  CANVUS_ADMIN_PASSWORD: YourSecurePassword123!
  POSTGRES_PASSWORD: a-strong-database-password

And match the same POSTGRES_PASSWORD in the postgres service.

Note

The compose file uses Linux-style paths (/canvus-data/...). Podman Desktop creates these inside the WSL2 VM automatically. Do not change these to Windows paths.

Start services

cd C:\canvus-server
podman compose -f podman-compose.yml up -d

Verify

podman compose -f podman-compose.yml ps

Both containers (canvus-combined, canvus-postgres) should be running (plus canvus-media if you have enabled WebRTC). Open https://localhost in your browser --- the request is served by the in-process gateway inside canvus-combined, which serves the unified React web-client directly. Accept the self-signed certificate warning and login with the admin credentials you set above.

Backup, restore, and migration

For routine backups, see Server backup and restore. To move a 3.x or 26.x standalone server into containers, use the following procedure. Run the container commands in PowerShell, from C:\canvus-server as used above.

Before you start

Use a container release that includes PostgreSQL 18 and the same or a newer Canvus Server version than your standalone installation. See migration prerequisites.

1. Back up the standalone server

Ask users to finish editing. On the old server, open Services (services.msc) and stop the Canvus Server service, leaving its PostgreSQL service running. Canvus saves automatically; there is no manual save step.

Run the existing server's backup command in PowerShell as Administrator, adjusting the installation path if necessary:

& "C:\Program Files\MT Canvus Server\bin\mt-canvus-server.exe" --backup

For a Linux source, use the Linux backup commands.

Wait for the backup to complete successfully and note the folder printed by the command. Copy the whole backup folder to a safe location outside the old installation, for example C:\CanvusMigration\backup-folder. It must include mt-canvus-backup-metadata.json, db_dump.sql and the backed-up assets.

Save mt-canvus-server.ini, the license file and any TLS certificate/key files separately in C:\CanvusMigration. These are not included in the Canvus backup; see file locations.

2. Remove the old installation if reusing the machine

If reusing the same Windows machine, uninstall the old Canvus Server and any legacy Canvus Dashboard through Programs and Features, then reboot. For 26.x, follow the standalone uninstall/reboot instructions, stopping before the reinstall step. Keep your backup and saved files; do not delete the old data folders as part of this move.

If moving to a different machine, leave the old installation intact and its Canvus service stopped.

3. Install and configure the containers

Follow the installation steps above through Start services and Verify. Do not add real content to the new server: restore replaces its existing Canvus data.

Then stop only Canvus, leaving its PostgreSQL container running:

cd C:\canvus-server
podman compose -f podman-compose.yml stop canvus

4. Copy the backup and saved files

On Windows, /canvus-data/ is inside the Podman VM, not on C:. Use podman cp to copy into the stopped container's mounted folders. The following creates a new backup folder named migration; adjust the source paths to your saved files:

podman cp "C:\CanvusMigration\backup-folder" canvus-combined:/var/lib/mt-canvus-server/backups/migration
podman cp "C:\CanvusMigration\mt-canvus-server.ini" canvus-combined:/etc/MultiTaction/canvus/mt-canvus-server.ini.standalone
podman cp "C:\CanvusMigration\license-file" canvus-combined:/var/lib/mt-canvus-server/MultiTaction/Licenses/

These files persist in the VM at /canvus-data/backups/migration/, /canvus-data/config/mt-canvus-server.ini.standalone and /canvus-data/licenses/ respectively. The backup metadata must be directly inside migration, not inside another nested backup folder.

Open \\wsl$\podman-machine-default\canvus-data\config\ in Explorer, as described under Data persistence. Use the saved .ini.standalone file as a reference to bring your site settings into the generated mt-canvus-server.ini. Keep the container's database settings and filesystem paths rather than replacing its INI wholesale. A license tied to the old machine may need reactivation.

If using your own TLS certificate/key, copy the saved files into canvus-combined:/etc/MultiTaction/canvus/server/certificates/ with podman cp, using the certificate filenames from the Linux instructions. These persist under /canvus-data/certs/ in the VM.

5. Restore the Canvus backup

Run the Linux server binary supplied by the image, not the Windows .exe, in a temporary container with the installed service's configuration and mounts:

podman compose -f podman-compose.yml run --rm --no-deps --entrypoint /opt/canvus/bin/mt-canvus-server canvus --restore --backup-path /var/lib/mt-canvus-server/backups/migration

--backup-path is the path inside the container, mapped from /canvus-data/backups/migration in the VM. Canvus restores the database and assets together. Wait for the command to finish successfully; if it reports an error or does not return, leave Canvus stopped and contact MultiTaction support with the output.

6. Restart and check

podman compose -f podman-compose.yml start canvus
podman compose -f podman-compose.yml ps

Sign in with an account from the old server and check your canvases, folders and media before reconnecting clients. When migrating from 3.x, update the clients to 26.x too. Keep the original backup until you have checked the new server.

Windows-specific notes

Data persistence

Container data lives inside the WSL2 VM at /canvus-data/. To access from Windows Explorer:

\\wsl$\podman-machine-default\canvus-data\

Firewall configuration

Windows Firewall may block incoming connections from other machines:

# Run as Administrator
New-NetFirewallRule -DisplayName "Canvus HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
New-NetFirewallRule -DisplayName "Canvus HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "Canvus WebRTC" -Direction Inbound -Protocol UDP -LocalPort 40000-40100 -Action Allow  # only needed if you have enabled WebRTC

Port conflicts

If ports 80/443 are already in use (IIS, Apache):

netstat -ano | findstr :443

Stop the conflicting service, or use unprivileged ports in podman-compose.yml (see the Linux page).

Management

cd C:\canvus-server

# Start / stop / restart
podman compose -f podman-compose.yml up -d
podman compose -f podman-compose.yml stop
podman compose -f podman-compose.yml restart

# View logs
podman compose -f podman-compose.yml logs -f canvus-combined
podman compose -f podman-compose.yml logs -f canvus-media
podman compose -f podman-compose.yml logs -f canvus-postgres

# Update to latest version
podman compose -f podman-compose.yml pull
podman compose -f podman-compose.yml down
podman compose -f podman-compose.yml up -d

Windows Server

For Windows Server Core (no GUI), enable WSL2 and follow the Linux guide from within a WSL2 Ubuntu session:

# Enable WSL2 (requires reboot)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Restart-Computer

# After reboot
wsl --set-default-version 2
wsl --install -d Ubuntu

Then follow the Linux container install from within the WSL2 Ubuntu session --- that is the canonical deployment guide; the Windows path above is a convenience wrapper only.

Troubleshooting

"Cannot connect to Podman":

podman machine stop
podman machine start

"WSL2 not found":

wsl --status
wsl --set-default-version 2

Container won't start:

podman logs canvus-combined
podman logs canvus-media
podman logs canvus-postgres

WebRTC video not working from external clients:

WSL2 port forwarding for UDP ranges can be unreliable. If clients cannot receive media, the first fallback is to move the deployment to a native Linux host. See Linux troubleshooting for the full WebRTC diagnostic flow.