Deployment guide

Apache Guacamole

Overview

Apache Guacamole is a clientless HTML5 remote-desktop gateway. It lets you reach RDP, VNC and SSH machines from a web browser, with nothing to install on the client.

This image gives you Guacamole 1.6.0 ready to use on Azure. It generates a unique administrator password on the first boot of every VM and is backed by 24/7 SecureAnyCloud support.

What you get:

  • Apache Guacamole 1.6.0 web application (guacamole.war) under Tomcat 9
  • The native guacd proxy daemon with the RDP, VNC and SSH protocol clients
  • PostgreSQL authentication and connection storage via the JDBC auth extension
  • A dedicated Azure data disk at /var/lib/postgresql that holds all users and connections. It is separate from the OS disk and re-provisioned with every VM.
  • An nginx reverse proxy on :80 with the WebSocket headers the Guacamole tunnel requires
  • A per-VM guacadmin password generated at first boot, in a root-only file
  • guacd.service, tomcat9.service, postgresql.service and nginx.service as systemd units, enabled and active
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet and subnet in the target region.

Standard_B2ms (2 vCPU / 8 GiB RAM) is a good starting point, because Tomcat's JVM, PostgreSQL and guacd run together on the VM.

For the NSG, allow 22/tcp inbound from your management network. Allow 80/tcp from the users who connect to the gateway. For public exposure, front port 80 with TLS (see Enabling HTTPS).

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, and search the Marketplace for Apache Guacamole by SecureAnyCloud. 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 choose Review + create and Create.

Step 2 - Deploy from the Azure CLI

Accept the Marketplace terms once, then create the VM and open port 80:

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:apache-guacamole-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name guacamole \
  --image sac1647283583153:apache-guacamole-ubuntu-24-04:default:latest \
  --size Standard_B2ms \
  --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 guacamole --port 80 --priority 1010

Step 3 - Connect to your VM

Connect over SSH with the public IP address of the VM:

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the services are running

Check that all four services are active:

systemctl is-active guacd.service tomcat9.service postgresql.service nginx.service

All four services report active.

Step 5 - Confirm the web gateway answers

Request the gateway from the VM itself:

curl -s -o /dev/null -w 'guacamole web UI -> HTTP %{http_code}\n' http://127.0.0.1/

The nginx reverse proxy fronts the Tomcat web application and returns HTTP 200 (the login page).

Step 6 - Retrieve your admin password

The first boot of your VM generates a unique administrator password and writes it to a root-only file. Read it with:

sudo grep -E '^GUACAMOLE_' /root/guacamole-credentials.txt

GUACAMOLE_ADMIN_USER is guacadmin and GUACAMOLE_ADMIN_PASSWORD is the password.

Step 7 - Verify the login REST API

Guacamole issues an auth token from POST /api/tokens. The following commands read the per-VM password. They show that a wrong password is rejected and that the real one returns a token:

PW=$(sudo grep '^GUACAMOLE_ADMIN_PASSWORD=' /root/guacamole-credentials.txt | cut -d= -f2-)
echo "wrong password -> HTTP $(curl -s -o /dev/null -w '%{http_code}' --data-urlencode 'username=guacadmin' --data-urlencode 'password=wrong' http://127.0.0.1/api/tokens)" curl -s --data-urlencode 'username=guacadmin' --data-urlencode "password=$PW" http://127.0.0.1/api/tokens | head -c 80; echo

The wrong password returns HTTP 403. The correct one returns a JSON document that contains an authToken.

Step 8 - Sign in to the web UI

Open http://<vm-public-ip>/ in a browser. Sign in as guacadmin with the password from Step 6.

After you sign in, you land on the home screen, which lists your recent and available connections.

Step 9 - Add a remote-desktop connection

Open the user menu (top right), then choose Settings, Connections and New Connection. Choose the protocol (RDP, VNC or SSH) and give the connection a name. Fill in the target host, port and credentials, then choose Save.

The connection appears on the home screen, where any authorised user can launch it in their browser.

Confirm the Guacamole version

Check that the Guacamole web application is deployed:

sudo ls /opt/tomcat/webapps/guacamole.war && echo "Apache Guacamole 1.6.0 deployed"

Enabling HTTPS

For production, terminate TLS at nginx with a real domain that points at the VM's public IP. Install certbot and request a certificate, replacing the domain with your own:

sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com

Backup and maintenance

All Guacamole data (users, connection definitions and permissions) lives in PostgreSQL on the dedicated data disk at /var/lib/postgresql. Snapshot that disk in Azure to back up your configuration.

Keep the OS patched with sudo apt update && sudo apt upgrade. The gateway restarts cleanly with sudo systemctl restart guacd tomcat9 nginx.

Support

This image is backed by 24/7 SecureAnyCloud support. Contact us by email or chat for help with RDP, VNC and SSH connection setup, user and permission management, scaling, TLS and backups.

All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.

Deploy on Azure

Launch Apache Guacamole on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure