Storage Azure

Portabase on Ubuntu 24.04 on Azure User Guide

| Product: Portabase on Ubuntu 24.04 LTS on Azure

Overview

Portabase is an open source, self hosted database backup and restore dashboard. From one modern web interface you schedule and run backups and restores across PostgreSQL, MySQL and MariaDB, MongoDB, SQLite, Redis and Valkey, Firebird, Microsoft SQL Server and Docker volumes. A lightweight agent performs the actual dumps and restores and reports back to the dashboard, so you manage all of your database backups in one place and send them to your own storage. The cloudimg image runs Portabase the officially supported way, as the upstream containers orchestrated by Docker Compose under systemd and fronted by nginx: the dashboard, its own PostgreSQL metadata database, and a backup agent already enrolled to the local dashboard. Every image is pinned by digest and captured into the VM, so your instance starts in seconds. A unique administrator, application secret, metadata database password and agent enrolment key are generated for each VM on first boot, before the port is reachable, and public sign up is disabled so nobody can claim your instance before you sign in. Backed by 24/7 cloudimg support.

Portabase is a trademark of its respective owner. This image is produced by cloudimg and is not affiliated with, endorsed by, or sponsored by Portabase. It ships the free and open source Apache 2.0 dashboard and agent, unmodified.

The Portabase database view showing a completed backup with a 100 percent success rate

What is included:

  • Portabase v1.28.0 (the Apache 2.0 self hosted dashboard), pinned by image digest
  • A Portabase backup agent (Apache 2.0) enrolled to the local dashboard on first boot, with PostgreSQL, MySQL, MongoDB and other database client tools bundled
  • A bundled PostgreSQL 16 as the dashboard's metadata store, pinned by image digest and reachable only inside a private Docker network (never published to a host port)
  • Docker Engine (Docker CE) with the dashboard published to the loopback interface only, fronted by nginx on port 80
  • docker.service, portabase.service and nginx.service as systemd units, enabled and active on boot
  • A unique administrator, application secret, metadata database password and per VM agent enrolment key generated on first boot, never baked into the image, with public sign up disabled
  • 24/7 cloudimg support

Prerequisites

An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2ms (2 vCPU / 8 GiB RAM) is the recommended starting point: the dashboard, its metadata database and the agent run comfortably on 2 vCPU, and the extra memory gives the agent headroom when dumping and restoring larger databases. NSG inbound: allow 22/tcp from your management network and 80/tcp (and 443/tcp once you add TLS) for the web interface. Portabase serves plain HTTP on port 80; for production, put it behind TLS with your own domain (see the final section) and keep the network security group tight.

Step 1 - Deploy from the Azure Marketplace

  1. In the Azure portal, choose Create a resource and search the Marketplace for the cloudimg Portabase offer.
  2. Select the plan, then Create.
  3. On the Basics tab pick your subscription, resource group and region, name the VM, and select Standard_B2ms (or larger).
  4. Choose SSH public key authentication with admin username azureuser and provide your public key.
  5. On the Networking tab, allow inbound 22/tcp from your management network and 80/tcp for the web interface.
  6. Review and create. When the VM is running, note its public IP address.

Step 2 - Deploy from the Azure CLI

az vm create \
  --resource-group my-portabase-rg \
  --name portabase \
  --image cloudimg:portabase:default:latest \
  --size Standard_B2ms \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open the port the web interface needs (SSH is opened by default):

az vm open-port --resource-group my-portabase-rg --name portabase --port 80 --priority 900

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the services are running

The stack comes up automatically on first boot. Check the systemd units and the dashboard health endpoint:

systemctl status docker portabase nginx --no-pager
curl -fsS http://localhost/api/health

/api/health returns {"success":true} once the dashboard is up. All three containers (dashboard, metadata database and agent) run on a private Docker network; only nginx on port 80 is exposed.

Step 5 - Secure by default: your administrator is pre seeded

A fresh Portabase instance normally lets the first visitor create the first account, which is a risk on a public server. This image closes that: on first boot, before the port is reachable, a unique owner administrator is created with a per VM password and public sign up is disabled, so the instance is already claimed. The per VM administrator credentials are written to a root only file:

sudo cat /root/portabase-credentials.txt

This shows the dashboard URL, the administrator email and password, and the enrolled agent ID. Keep this file secret. New team members join by invitation from the dashboard, never by open sign up.

Step 6 - Sign in to the dashboard

Open http://<vm-public-ip>/ in your browser and sign in with the administrator email and password from Step 5.

The Portabase dashboard home after signing in

Step 7 - The backup agent is already enrolled

Under Agents you will find cloudimg-agent, already enrolled to this dashboard on first boot and reporting as connected. The agent is what performs the actual dumps and restores; it runs on the same VM and needs no inbound port.

The Agents page showing the cloudimg-agent enrolled and connected

Step 8 - Register a database to back up

Portabase keeps each database's connection details in the agent's configuration file, not in the dashboard. To register one of your databases, add it to the agent config on the VM and restart the agent. Generate a unique ID first:

uuidgen

Then edit /etc/portabase/agent-config.json (as root) and add an entry to the databases array, for example a PostgreSQL server:

{
  "databases": [
    {
      "name": "my app database",
      "type": "postgresql",
      "generated_id": "<paste-the-uuidgen-value>",
      "host": "10.0.0.5",
      "port": 5432,
      "database": "appdb",
      "username": "appuser",
      "password": "your-db-password"
    }
  ]
}

Apply it by restarting the agent, which re registers with the dashboard:

sudo docker restart portabase-agent-1

Within a few seconds the database appears in the dashboard under its project. Supported type values include postgresql, mysql, mariadb, mongodb, sqlite (use path instead of host/credentials), redis, valkey, firebird, mssql and docker-volume. To reach a database running on the VM host itself, use localhost as the host: the agent maps it to the host gateway.

Step 9 - Create a storage destination

In the dashboard, open Storages and add a destination for your backups. For production, point it at your own object storage such as Azure Blob Storage or an S3 bucket, then attach it to the database you registered. The agent uploads each backup to that destination and can restore from it.

Step 10 - Run a backup and a restore

Open your database from its project, then use Backup to run a backup on demand or set a schedule. Completed backups are listed with their size, duration and status, and the success rate is shown at the top.

A completed backup listed with a success status

To restore, open the backup's actions menu, choose Restore, select the stored copy and confirm. The Restoration tab records each restore with its status.

The Restoration tab showing a successful restore

Step 11 - Check the stack health from the command line

sudo docker compose --env-file /etc/portabase/portabase.env -f /etc/portabase/compose.yaml ps
curl -fsS http://localhost/api/health

All three services should be running and the health endpoint should return {"success":true}.

Step 12 - Production: your own domain with TLS

Portabase is served over plain HTTP on port 80. For production, front it with TLS on your own domain and restrict the network security group to trusted networks. Point a DNS record at the VM, install a reverse proxy or a certificate for nginx (for example with Certbot), and open 443/tcp in the NSG. Because the dashboard base URL is derived per VM on first boot, use your own domain in front and keep the underlying VM reachable only through it.

Support

cloudimg provides 24/7 support for this image. Email support@cloudimg.co.uk with the offer name and your VM details. The image ships the upstream Portabase dashboard and agent unmodified under the Apache License 2.0; the bundled PostgreSQL metadata store is provided under The PostgreSQL Licence. This image is produced by cloudimg and is not affiliated with, endorsed by, or sponsored by Portabase.