Application Infrastructure Azure

Transmission on Ubuntu 24.04 on Azure User Guide

| Product: Transmission on Ubuntu 24.04 LTS on Azure

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 transmission systemd 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-daemon holding settings, downloads and torrent state
  • transmission-daemon.service + nginx.service as systemd units, enabled and active
  • transmission-remote, transmission-create, transmission-edit and transmission-show command-line utilities
  • An unauthenticated /healthz endpoint 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.

The transmission-daemon and nginx services active, the RPC/web UI listening on loopback port 9091, nginx listening on port 80, and the dedicated 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).

The Transmission daemon version and the per-VM credentials file with the generated RPC username, password and web UI URL

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).

The RPC authentication round trip through transmission-remote - a wrong password rejected and the per-VM password authenticating and listing torrents

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.

The Transmission web UI signed in via the browser's Basic Auth prompt, showing the empty torrent list toolbar

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.

The Transmission add-torrent dialog with a magnet link entered, ready to start the download

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).

The Transmission torrent list showing an active torrent with progress, transfer speed, peer count and status

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.

The Transmission settings/preferences panel showing speed limits, download directory and peer configuration

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 the rpc-password field in settings.json to a new plaintext value (Transmission salts it automatically on the next start), and sudo 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+udp unless you changed peer-port in settings) on your NSG and confirm it matches the peer-port value in settings.json.
  • Storage: all Transmission state - settings, torrent/resume data, downloads and incomplete files - lives under /var/lib/transmission-daemon on 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, and sudo systemctl restart transmission-daemon. Your data under /var/lib/transmission-daemon is 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.