Deployment guide

Adminer

Overview

Adminer is a full-featured database management tool that ships as a single, self-contained PHP file. From an ordinary browser you can browse and edit tables, run SQL, import and export data, and manage users and privileges, with no local client to install.

This SecureAnyCloud image serves Adminer 5.4.2 with nginx and PHP 8.3 FPM on a hardened Ubuntu 24.04 LTS base, patched at build time. It includes a local MariaDB server, so the appliance is useful on its own. Adminer can also administer external MySQL, MariaDB and PostgreSQL servers.

What you get:

  • Adminer 5.4.2 served by nginx and PHP 8.3 FPM, managed by systemd
  • A bundled MariaDB 10.11 server, the database Adminer administers out of the box
  • The Adminer web interface on :80 behind an nginx reverse proxy, with cookie authentication
  • A unique MariaDB root password generated on the first boot of every VM and recorded in a root-only file
  • Loopback login with Server localhost, so you only enter the user and password
  • MariaDB bound to 127.0.0.1 only, never exposed to the network
  • A dedicated Azure data disk at /var/lib/mysql for all databases
  • nginx.service, php8.3-fpm.service and mariadb.service as enabled systemd units
  • An unauthenticated /healthz endpoint for Azure Load Balancer health probes
  • 24/7 SecureAnyCloud support

Prerequisites

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

Standard_B2s (2 vCPU / 4 GiB RAM) is a sensible starting size. Choose a larger size for bigger databases or heavier query loads.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the web interface. Adminer serves plain HTTP on port 80, so for production terminate TLS in front of it with your own domain. The bundled MariaDB listens on 127.0.0.1 only, so port 3306 stays off the network.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Adminer by SecureAnyCloud, and select Create.

On the Basics tab, 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 select Review + create and Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:adminer-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name adminer \
  --image sac1647283583153:adminer-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open port 80 for the web interface:

az vm open-port --resource-group <your-rg> --name adminer --port 80

Step 3 - Confirm the services are running

SSH in as azureuser and confirm that nginx, PHP FPM and MariaDB are all active. MariaDB listens only on 127.0.0.1:3306, while nginx serves the web interface on port 80.

systemctl is-active nginx php8.3-fpm mariadb adminer-firstboot
ss -tlnp | grep -E ':80 |:3306 ' | sed 's/ */ /g'

Step 4 - Retrieve the per-VM database password

Each VM generates its own MariaDB root password on first boot. The password, the login server, the user and the URL are written to a root-only credentials file. Read it with sudo:

sudo cat /root/adminer-credentials.txt

Sign in to Adminer with Server localhost, username root and the ADMINER_ROOT_PASSWORD from this file. On the VM itself, run sudo mariadb to reach the database directly over the local socket without a password.

Step 5 - Sign in to Adminer

Browse to http://<vm-public-ip>/. Adminer opens on its login screen.

Leave System on MySQL / MariaDB. Enter Server localhost, username root and the password from Step 4. Leave Database blank to see every database.

After you sign in, the server overview lists every database on the bundled MariaDB server with its collation and quick links to select, export or drop it.

Step 6 - Browse tables and run SQL

Select a database in the left navigation to expand its tables, then click select on a table to browse its rows. The data grid offers inline edit and delete actions, and lets you sort, search and page through large tables.

Open the SQL command page for a full query editor. Type a statement and click Execute. Results appear below with options to export or edit.

You can do the same from the command line on the VM. Read the root password from the credentials file and list the databases over the loopback interface:

PW=$(sudo grep '^ADMINER_ROOT_PASSWORD=' /root/adminer-credentials.txt | cut -d= -f2-); mysql -h127.0.0.1 -uroot -p"$PW" -e 'SHOW DATABASES;'

Step 7 - Administer external database servers

Adminer is not limited to the bundled MariaDB. To manage another server, sign out. On the login screen, enter that server's host under Server (for example db.internal:3306), its username and its password, and pick the matching System. MySQL, MariaDB, PostgreSQL, SQLite and others are supported when the matching PHP driver is present.

The appliance then acts as a single browser-based console for the rest of your database estate, while its own bundled MariaDB stays private on loopback.

Step 8 - Verify the stack

Check the Adminer version, the PHP and MariaDB versions, and the health endpoint that Azure Load Balancer probes:

grep -oaE '5\.4\.2' /var/www/adminer/index.php | head -1
php -v | head -1
mariadb --version
curl -sI http://127.0.0.1/healthz | head -1

Step 9 - Where your data lives

All databases live on a dedicated Azure data disk mounted at /var/lib/mysql, separate from the OS disk. This is the MariaDB datadir, captured into the image and re-provisioned on every VM. Confirm the mount and the filesystem:

df -h /var/lib/mysql | tail -1
findmnt -no SOURCE,TARGET,FSTYPE /var/lib/mysql

Security notes

  • Encrypt web traffic. Adminer serves plain HTTP on port 80. For production, put it behind your own TLS-terminating reverse proxy or an Azure Application Gateway with a certificate for your domain, and restrict port 80 in the NSG to trusted networks.
  • Keep MariaDB private. It listens on 127.0.0.1 only and is never exposed to the network, so port 3306 stays off the NSG. On-VM maintenance uses sudo mariadb over the local socket.
  • Protect the root password. The per-VM root password lives in /root/adminer-credentials.txt, readable only by root. You can rotate it with a standard ALTER USER. Keep a copy somewhere safe.
  • Keep the VM patched. The image is patched at build time and ships with unattended security upgrades enabled.

Support

SecureAnyCloud images come with 24/7 support. For questions about this Adminer image or help with your deployment, contact us through the SecureAnyCloud website.

Deploy on Azure

Launch Adminer 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