Storage Azure

XBackBone on Ubuntu 24.04 on Azure User Guide

| Product: XBackBone on Ubuntu 24.04 LTS on Azure

Overview

This guide covers the deployment and configuration of XBackBone on Ubuntu 24.04 on Azure using cloudimg Azure Marketplace images. XBackBone is a simple, self-hosted, lightweight PHP file manager that supports the instant sharing of images and arbitrary files. It works out of the box with ShareX and the ShareX-compatible clients, and gives you a clean web interface to browse, publish, hide, tag and revoke everything you have uploaded, with inline previews for images, video, audio, text and code.

The cloudimg image ships XBackBone 3.8.2, the free and open source, AGPL-3.0 licensed server, installed and configured the officially supported way and served by nginx on port 80. The full upstream source ships unmodified under /var/www/xbackbone. Because the upstream project is normally set up through a browser based installation wizard that creates the first administrator, nothing here ships with a known secret: the schema is built and a single administrator account with a random password unique to each VM is generated on first boot, before the app is reachable, and the installation wizard is removed from the image. Backed by 24/7 cloudimg support.

XBackBone is a trademark of its respective owner. This image is produced by cloudimg and is not affiliated with, endorsed by, or sponsored by the XBackBone project. It ships the free and open source AGPL-3.0 licensed self hosted software, unmodified.

The php8.3-fpm, nginx and xbackbone-firstboot services all active, nginx listening on port 80, and PHP 8.3.6 running XBackBone 3.8.2

What is included:

  • XBackBone 3.8.2 (the AGPL-3.0 licensed self-hosted file and screenshot sharing server), full source under /var/www/xbackbone
  • PHP 8.3 with php-fpm and the required extensions (pdo_sqlite, gd, intl, zip, curl, mbstring, dom), served by nginx on port 80
  • A self-contained SQLite database and local file storage, both created empty on first boot
  • php8.3-fpm.service and nginx.service as systemd units, plus a one-shot xbackbone-firstboot.service, enabled and active on boot
  • A single administrator account with a random password generated per VM on first boot, written to a root-only file, never baked into the image
  • The browser installation wizard removed from the image, no default login and an empty database on first boot
  • Uploads accepted up to 512 MB, ready for ShareX, Screencloud and the Linux script client
  • Ubuntu 24.04 LTS base with the latest security patches applied at build time and unattended security upgrades enabled
  • Azure Linux Agent for seamless cloud integration and SSH key injection
  • 24/7 cloudimg support with guaranteed 24 hour response SLA

Prerequisites

  • Active Azure subscription, SSH public key, VNet + subnet in target region
  • Subscription to the XBackBone listing on Azure Marketplace

Recommended virtual machine size: Standard_B2s (2 vCPU, 4 GB RAM) is a sensible starting point for an individual or a small team. For heavier use or many concurrent users use Standard_D2s_v5 or larger, and attach a larger OS disk or a dedicated data disk for your uploads. NSG inbound: allow 22/tcp from your management network and 80/tcp for the web interface from the networks that use it.

Step 1: Deploy from the Azure Portal

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for XBackBone 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). Then Review + create and Create.

Step 2: Deploy from the Azure CLI

RG="xbackbone-prod"; LOCATION="eastus"; VM_NAME="xbackbone-01"
GALLERY_IMAGE_ID="/subscriptions/<sub-id>/resourceGroups/azure-cloudimg/providers/Microsoft.Compute/galleries/cloudimgGallery/images/xbackbone-ubuntu-24-04/versions/<version>"
SSH_KEY="$(cat ~/.ssh/id_rsa.pub)"
az group create --name "$RG" --location "$LOCATION"
az network vnet create -g "$RG" --name xbb-vnet --address-prefix 10.100.0.0/16 --subnet-name xbb-subnet --subnet-prefix 10.100.1.0/24
az network nsg create -g "$RG" --name xbb-nsg
az network nsg rule create -g "$RG" --nsg-name xbb-nsg --name allow-ssh --priority 100 \
  --source-address-prefixes "<your-mgmt-cidr>" --destination-port-ranges 22 --access Allow --protocol Tcp
az network nsg rule create -g "$RG" --nsg-name xbb-nsg --name allow-http --priority 110 \
  --destination-port-ranges 80 --access Allow --protocol Tcp
az vm create -g "$RG" --name "$VM_NAME" --image "$GALLERY_IMAGE_ID" \
  --size Standard_B2s --storage-sku StandardSSD_LRS \
  --admin-username azureuser --ssh-key-values "$SSH_KEY" \
  --vnet-name xbb-vnet --subnet xbb-subnet --nsg xbb-nsg --public-ip-sku Standard

Step 3: Connect to your VM

Connect over SSH as azureuser (the Ubuntu 24.04 login user for this image):

ssh azureuser@<public-ip>

Step 4: Confirm the services are running

XBackBone is served by nginx on port 80 in front of php-fpm. Confirm the units are active and nginx is listening:

systemctl is-active php8.3-fpm nginx xbackbone-firstboot
ss -tlnp | grep ':80 '

You should see active for each unit and nginx listening on 0.0.0.0:80.

Step 5: Read the per instance credentials

On first boot a one-shot service builds the database, creates a single administrator account with a password unique to this VM, and writes the details to a root-only file. Read them with:

sudo cat /root/xbackbone-credentials.txt

The xbackbone-credentials.txt file at mode 0600 root root showing the per VM URL, the admin login name and the generated password, with the password redacted

The file records the instance URL, the administrator login name (admin) and the generated password. These credentials are unique to this VM and are never baked into the image.

Step 6: Verify the security model

The login page is public, but the dashboard requires authentication. An unauthenticated request to the dashboard is redirected to the login page:

curl -s -o /dev/null -w 'login page: HTTP %{http_code}\n' http://127.0.0.1/login
curl -s -o /dev/null -w 'dashboard: HTTP %{http_code} -> %{redirect_url}\n' http://127.0.0.1/home

curl showing the public login page returning HTTP 200 and the dashboard returning HTTP 302 redirecting an unauthenticated visitor to the login page

The login page returns 200, and the dashboard returns 302 redirecting to /login, proving the backend is protected.

Step 7: Confirm the generated credentials authenticate

The generated administrator password logs in (a 302 redirect to /home), while a wrong password is bounced back to /login. This reads the real password from the credentials file:

PW=$(sudo grep '^xbackbone.admin.pass=' /root/xbackbone-credentials.txt | cut -d= -f2-)
curl -s -o /dev/null -w 'correct password: HTTP %{http_code} -> %{redirect_url}\n' \
  --data-urlencode "username=admin" --data-urlencode "password=$PW" http://127.0.0.1/login
curl -s -o /dev/null -w 'wrong password:   HTTP %{http_code} -> %{redirect_url}\n' \
  --data-urlencode "username=admin" --data-urlencode "password=wrong-password" http://127.0.0.1/login

curl showing the correct generated password redirecting to /home on login and a wrong password being bounced back to /login

Step 8: Open the web interface and sign in

Browse to http://<public-ip>/ and sign in at http://<public-ip>/login with the username admin and the generated password from Step 5.

The XBackBone sign in page with the username admin entered and the Login button

Step 9: Browse and manage your uploads

After signing in you land on the home dashboard, which lists every upload with an inline preview, filename, size, public flag, owner and date, plus per item actions to open, download, copy the link, embed, star or delete. Search and order controls let you find items quickly.

The XBackBone home dashboard listing an uploaded file with its preview, filename, size, public flag, owner, date and per item action buttons, with search and order controls

Step 10: Upload files from the browser

The Upload page accepts files up to 512 MB. Drag and drop, click to choose, or paste an image or video to upload it and get an instant shareable link.

The XBackBone upload page showing the drop zone that accepts files up to 512 MB, with a tip that you can paste images or videos to upload them

Step 11: Configure your ShareX client

Open your profile from the top right menu. Here you can set your email and password, generate an upload token, choose the copy URL mode, and download a ready made client configuration for ShareX, Screencloud or the Linux script. Import the downloaded configuration into your client and every capture uploads straight to your server.

The XBackBone profile page showing the email, username, password and upload token fields and the client configuration download buttons for ShareX, Screencloud and Linux Script

Step 12: Add users

From the Users menu an administrator can create additional users, each with their own upload token, storage quota and admin flag, so a whole team can share one server while keeping their uploads separate.

Step 13: Server components

The image runs a lean PHP stack:

  • nginx serves the front controller on port 80 and denies direct access to the application internals, the SQLite database, the storage directory and the configuration file.
  • php8.3-fpm runs the XBackBone application, tuned to accept uploads up to 512 MB.
  • SQLite stores users, uploads and settings in a single file under /var/www/xbackbone/resources/database.
  • Local storage keeps uploaded files under /var/www/xbackbone/storage. XBackBone can also use S3, Google Cloud, Azure Blob, Dropbox or FTP from the System settings.

Confirm the installed version at any time:

jq -r '"XBackBone " + .version' /var/www/xbackbone/composer.json

Step 14: Managing the service

systemctl restart php8.3-fpm nginx
journalctl -u nginx --no-pager | tail -n 20

Restart the stack after configuration changes, and review the nginx logs if you need to troubleshoot.

Step 15: Use your own domain and HTTPS (production)

For production use, point a DNS record at your VM and put the site behind HTTPS. Set base_url in /var/www/xbackbone/config.php to your https:// domain (no trailing slash), install a certificate with certbot, and reload nginx:

sudo certbot --nginx -d files.your-domain.com

After the certificate is issued, edit base_url to https://files.your-domain.com and reload nginx so links and the ShareX configuration use your domain.

Step 16: Security recommendations

  • Restrict 22/tcp to your management network in the NSG, and expose 80/tcp (and 443/tcp once TLS is configured) only to the networks that need it.
  • Sign in and change the administrator password after first launch, and create individual non-admin users for day to day uploads.
  • Put the site behind HTTPS with your own domain before sharing links publicly.
  • Keep the OS current; unattended security upgrades are enabled by default.
  • Back up /var/www/xbackbone/resources/database (the SQLite database) and /var/www/xbackbone/storage (your files).

Step 17: Support and Licensing

XBackBone is free and open source software distributed under the GNU Affero General Public License v3.0 (AGPL-3.0). The full source ships unmodified on the image under /var/www/xbackbone. This image is produced by cloudimg and is not affiliated with or endorsed by the XBackBone project. cloudimg provides 24/7 support for the image and its deployment with a guaranteed 24 hour response SLA.

Deploy on Azure

Launch XBackBone on Ubuntu 24.04 from the Azure Marketplace or with the Azure CLI as shown above, and you will have a private, self-hosted file and screenshot sharing server in minutes.