Run your own CrossDesk server.

Use your own server to coordinate remote connections and relay traffic when a direct connection is unavailable. Connect both clients to the same service.

1. Prepare the server and release configuration

Prepare a Linux amd64 or arm64 server with Docker Engine and the Compose plugin. Download compose.yaml and env.example from the same CrossDesk Server release into one deployment directory.

Use matching configuration files and image versions. Review the current requirements in the server deployment documentation.

cp env.example .env
openssl rand -hex 32
openssl rand -hex 32

Edit .env with your real addresses, a fixed image version, and persistent storage paths. Use the two different generated keys for COTURN_AUTH_SECRET and COTURN_STATELESS_NONCE_SECRET.

2. Configure the network and start the services

Allow the configured ports in both the server firewall and cloud security group. Update those rules if you change the defaults.

Setting Purpose and defaults
EXTERNAL_IP / INTERNAL_IP Public server address and a local address Coturn can bind to.
CROSSDESK_SERVER_PORT Signaling port; the Compose default is 9099 / TCP.
COTURN_PORT STUN / TURN port; the default is 3478 / TCP and UDP.
MIN_PORT / MAX_PORT TURN media ports; the default range is 50000–60000 / UDP.
CROSSDESK_DATA_DIR / CROSSDESK_LOG_DIR Persistent directories for data, certificates, and logs.
sudo docker compose config -q
sudo docker compose pull
sudo docker compose up -d --no-build
sudo docker compose ps

Run these commands from the deployment directory after saving your configuration. Once the containers start, check the certificates and establish a remote session to verify signaling and media connectivity.

3. Configure certificates and clients

  1. Make clients trust your deployment’s certificate. It must cover the connection address; a domain name needs a matching certificate. Obtain a self-signed root only from your own server.
  2. Open the self-hosting configuration in desktop settings, enter the server address and signaling port, enable it, and save. Option names may vary by client version.
  3. Configure both clients to use the same server. After both are connected, use the remote device’s current ID and password to start a session.

See the server deployment guide for certificate trust commands and client settings. For a self-hosted browser client, configure its signaling address using the Web client documentation.

Troubleshooting connections

The client cannot connect to the server

Check the server address, signaling port, firewall, and the certificate’s validity, address match, and trust status.

The server is connected but the device is offline

Confirm that both clients use the same server and the remote computer is running. Copy its current device ID again.

Direct access fails and no remote picture appears

Check Coturn, TURN and media ports, and compatibility between your client and server versions.

Explore CrossDesk