Transmission on Ubuntu 24.04 on Azure User Guide
Overview
Transmission is a fast, lightweight, cross-platform BitTorrent client. transmission-daemon runs quietly in the background and exposes both an RPC API and a bundled web interface (transmission-web) so you can add magnet links or .torrent files and manage your downloads entirely from a browser - no desktop client required. Use it to legally distribute or receive content you have the right to share: Linux distribution ISOs, open-source project releases, public-domain media and open movies, or your own files and backups. The cloudimg image builds the pinned Transmission 4.1.3 from the official source release (Ubuntu 24.04's own package is an older 4.0.x), runs it as a dedicated transmission system user under systemd, and fronts the web UI and RPC endpoint on port 80 with an nginx reverse proxy. Transmission's own RPC authentication (not nginx Basic Auth) gates every request with a per-VM username and password generated on first boot, downloads and application state live on a dedicated Azure data disk, and an unauthenticated /healthz endpoint is available for load balancer probes. Backed by 24/7 cloudimg support.
What is included:
- Transmission 4.1.3, built from the official source release, running as the
transmissionsystemd service - The bundled Transmission web UI and RPC API on
:80, fronted by nginx - Transmission's own RPC authentication (username/password), with a unique password generated on first boot
- A dedicated Azure data disk at
/var/lib/transmission-daemonholding settings, downloads and torrent state transmission-daemon.service+nginx.serviceas systemd units, enabled and activetransmission-remote,transmission-create,transmission-editandtransmission-showcommand-line utilities- An unauthenticated
/healthzendpoint for Azure Load Balancer health probes - 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet + subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a comfortable starting point for typical home/small-office use; scale up if you plan to seed many large torrents concurrently. NSG inbound: allow 22/tcp from your management network, 80/tcp for the web UI and RPC, and 443/tcp if you add TLS. Transmission's peer port (51413/tcp+udp by default) is used for outbound peer connections, which work with no NSG change; if you want to maximise inbound peer connectability for better swarm performance, also open the peer port inbound on the NSG (see Maintenance). Transmission serves plain HTTP on port 80; for production-adjacent use, terminate TLS in front of it with your own domain.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Transmission by cloudimg, and select Create. On Basics pick your subscription, resource group, region and size; under Administrator account choose SSH public key and paste your key; under Inbound port rules allow SSH (22) and HTTP (80). Review the dedicated data disk on the Disks tab, then Review + create -> Create.
Step 2 - Deploy from the Azure CLI
az vm create \
--resource-group <your-rg> \
--name transmission \
--image <marketplace-image-urn> \
--size Standard_B2s \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name transmission --port 80 --priority 1010
Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 - Confirm the services are running
systemctl is-active transmission-daemon.service nginx.service
Both report active. Transmission listens for RPC and the web UI on the loopback connector 127.0.0.1:9091; nginx fronts it on port 80. Transmission's settings, torrent state, downloads and incomplete files all live on the dedicated Azure data disk mounted at /var/lib/transmission-daemon.

Step 5 - Retrieve your RPC password
Transmission protects its RPC endpoint and web UI with its own username/password authentication - a per-VM password is generated on the first boot of your VM and written to a root-only file:
sudo cat /root/transmission-credentials.txt
This file contains TRANSMISSION_USERNAME, TRANSMISSION_PASSWORD and the TRANSMISSION_URL to open in a browser. Store the password somewhere safe - there is no way to retrieve it again once you lose it (you would need to reset it directly in settings.json).

Step 6 - Confirm the health endpoint
nginx serves an unauthenticated health endpoint for load balancers and probes:
curl -s http://localhost/healthz
It returns ok. This endpoint never requires authentication, so it is safe for an Azure Load Balancer health probe.
Step 7 - Confirm RPC authentication
Because a password is set on first boot, an unauthenticated request to the RPC endpoint is rejected, so nobody can reach your downloads without the password. The following reads the per-VM password from the credentials file and proves the round-trip with transmission-remote - a wrong password is rejected, and the correct password authenticates and lists torrents:
PW=$(sudo grep '^TRANSMISSION_PASSWORD=' /root/transmission-credentials.txt | cut -d= -f2-)
transmission-remote 127.0.0.1:9091 -n admin:wrong-password -si >/dev/null 2>&1 && echo "wrong password: ACCEPTED (unexpected)" || echo "wrong password: rejected"
transmission-remote 127.0.0.1:9091 -n admin:$PW -l
The wrong password is rejected; the correct one authenticates and lists your active torrents (empty on a fresh VM, with a Sum: totals line).

Step 8 - Sign in to the web UI
Browse to http://<vm-public-ip>/transmission/web/. Your browser prompts for a username and password - enter admin and the password from Step 5 (this is Transmission's own RPC authentication, not a web login page, so your browser shows its native Basic Auth dialog). Transmission opens on its main view: an empty torrent list ready for your first download.

Step 9 - Add a torrent
Click the + (add) icon in the toolbar, and either paste a magnet link or upload a .torrent file. Transmission fetches the metadata from the swarm, adds the torrent to your download queue, and begins downloading to /var/lib/transmission-daemon/downloads.

Step 10 - Manage your downloads
The main view lists every torrent with its progress, download/upload speed, ratio, peers and status. Select a torrent to pause, resume, verify, remove, or change its priority; the sidebar filters by status (downloading, seeding, paused, finished).

Step 11 - Review settings and preferences
Open the settings/preferences panel (gear icon) to review or change speed limits, the download/incomplete directories, peer limits, and other torrent behaviour - all backed by settings.json on the dedicated data disk.

Step 12 - Confirm data lives on the dedicated disk
Transmission's settings, resume/torrent state, downloads and incomplete files are kept entirely under /var/lib/transmission-daemon on the dedicated Azure data disk, so your data survives OS changes and the disk can be resized independently:
findmnt /var/lib/transmission-daemon
The mount is backed by a separate Azure data disk captured into the image and re-provisioned on every VM.
Maintenance
- Password: the RPC password is set on first boot and stored (salted) in
/var/lib/transmission-daemon/settings.json. To change it, stop the service, edit therpc-passwordfield insettings.jsonto a new plaintext value (Transmission salts it automatically on the next start), andsudo systemctl restart transmission-daemon. - Peer connectivity: by default only outbound peer connections are used. For better inbound connectability, open Transmission's peer port (
51413/tcp+udpunless you changedpeer-portin settings) on your NSG and confirm it matches thepeer-portvalue insettings.json. - Storage: all Transmission state - settings, torrent/resume data, downloads and incomplete files - lives under
/var/lib/transmission-daemonon the data disk; back up that volume to protect your downloads and configuration. - Legal use: only use this appliance to distribute or receive content you have the right to share - Linux ISOs, open-source releases, public-domain media, open movies (Creative Commons), and your own files.
- TLS: Transmission serves plain HTTP on port 80; front it with TLS (for example certbot with your own domain) before exposing it beyond a trusted network.
- Upgrades: Transmission is built from source at
/usr/local/bin/transmission-daemon; to upgrade, build a newer pinned release the same way (see the install steps), verify its checksum, andsudo systemctl restart transmission-daemon. Your data under/var/lib/transmission-daemonis preserved. - Security patches: unattended-upgrades remains enabled so the OS continues to receive security updates automatically.
Support
cloudimg provides 24/7 expert support for this image. Contact support@cloudimg.co.uk.