Self-hosted deployment guide

Setup

This guide is for the other server that will run the actual remote desktop tool — not this download site. All IP addresses, domain names and login details below are generic examples. Replace them with your own real values before going to production.

ViewerChrome — no install
Signalingwss://YOUR_DOMAIN
Host agentUbuntu / Windows
FallbackTURN — turn.YOUR_DOMAIN
Important: Every value on this page is a placeholder. Replace all of them before running anything in production.

·Fill in your own configuration

Fill in the fields below and the commands and config files on this page update automatically with your own values. Everything happens in your browser — nothing is sent anywhere.

01Get the code

Download the latest release (v0.1.1) from the Downloads page, and unpack it on the server that will run the tool — not on this web server. The zip contains signaling-server/, host-agent/, web-viewer/ and deploy/ with all the templates mentioned below.

02Replace these placeholders

The same placeholders recur in renderer.js, viewer.js, and every file in deploy/. Find/replace all of them before you start anything.

your-domain.example → your real domain, e.g. remote.yourdomain.com
+turn.your-domain.example → turn.your-real-domain.com
TURN_PUBLIC_IP → the public IP where coturn runs
+SIGNALING_INTERNAL_IP → internal IP of the machine running server.js
CHANGE_ME_TURN_USER / CHANGE_ME_TURN_PASSWORD → your own random values

Generate strong, random TURN login credentials yourself, e.g. with openssl rand -base64 24 — never use the example values directly.

03Installation

Signaling server (runs 24/7, e.g. behind nginx)
bash deploy/ubuntu/install-ubuntu.sh server
sudo systemctl daemon-reload
sudo systemctl enable --now signaling-server
Host agent (the machine to be controlled remotely)
bash deploy/ubuntu/install-ubuntu.sh host
cd host-agent && npm start

Ubuntu 24.04 uses Wayland by default — choose "Ubuntu on Xorg" at login, or run npm start -- --ozone-platform=x11 if screen capture fails.

Nginx + TLS in front of the signaling server
sudo ln -s /etc/nginx/sites-available/YOUR_DOMAIN /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d YOUR_DOMAIN
TURN server (coturn)
sudo apt install -y coturn certbot
sudo certbot certonly --standalone -d YOUR_TURN_DOMAIN
sudo systemctl enable --now coturn
sudo ufw allow 3478
sudo ufw allow 5349
sudo ufw allow 49152:65535/udp
Host agent (the machine to be controlled remotely)
powershell -ExecutionPolicy Bypass -File deploy\windows\install-windows.ps1
cd host-agent
npm start

Installs Node.js via winget if missing, and runs npm install in host-agent/.

Signaling server on Windows instead of Ubuntu

Use NSSM to run it as a service — see deploy/windows/run-signaling-server-as-service.md in the zip for the full commands.

04Web viewer (the controlling side)

Requires no installation:

cd web-viewer
npx serve .

Open the printed URL in Chrome, enter the signaling server address and the session code, and connect.

05Your filled-in config files

Automatically replaces the commands and files below on this page as you fill in the fields above. Values are only stored locally in your browser (localStorage) — nothing is sent to any server.

signaling.conf
Loading…
turnserver.conf
Loading…
signaling-server.service
Loading…
.env
Loading…

06Placeholder reference

PlaceholderMeaning
your-domain.exampleYour public domain
turn.your-domain.exampleSubdomain for the TURN server
TURN_PUBLIC_IPPublic IP of the coturn machine
SIGNALING_INTERNAL_IPInternal IP of the machine running server.js
SIGNALING_PORTPort server.js listens on (default 8080)
CHANGE_ME_TURN_USER / _PASSWORDYour own random TURN login credentials
INSTALL_PATHWhere you unpack the project on the target machine

07Production checklist

☐ Real TURN login credentials generated and inserted everywhere
☐ TLS enabled on both the signaling domain and the TURN domain
☐ Firewall rules restricted to only the necessary ports
☐ Signaling server runs as a non-root service user
☐ Session codes are long enough (16+ characters) if used without a password
☐ systemd/NSSM restarts services automatically on crash and boot