XBackBone on Ubuntu 24.04 on Azure User Guide
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.

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.serviceandnginx.serviceas systemd units, plus a one-shotxbackbone-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 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

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

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.

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.

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.

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.

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
80and 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/tcpto your management network in the NSG, and expose80/tcp(and443/tcponce 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.