Applications Azure

Genealogy on Ubuntu 24.04 on Azure User Guide

| Product: Genealogy on Ubuntu 24.04 LTS on Azure

Overview

Genealogy is a free, open source web application for building and managing a family tree. Record people with their names, genders, dates and places of birth and death, photos and documents; link parents, partners and children; and explore the family through ancestor and descendant charts, timelines and printable datasheets. Data is organised into multi-user teams, so a family, a group of researchers or a local-history archive can collaborate on shared trees, with GEDCOM import and export to move data in and out.

The cloudimg image delivers Genealogy fully installed and configured on Ubuntu 24.04 — a Laravel 13 application (Jetstream teams, Livewire, TallStackUI) on PHP 8.4 with OPcache, served by nginx over HTTPS, backed by MariaDB. Database migrations are already applied and sample family trees are pre-loaded, so you land on a working install and can start exploring straight away. Backed by 24/7 cloudimg support.

What is included:

  • Genealogy 6.1.0 (MIT licensed), served from /var/www/genealogy/public
  • nginx (HTTPS on :443 with a per-VM self-signed certificate; :80 redirects to :443) + PHP 8.4 (php8.4-fpm with OPcache) + MariaDB, from Ubuntu 24.04 with PHP from the ondrej/php PPA
  • Front-end assets compiled at build time with Vite — no Node or composer toolchain ships in the image
  • Per-VM administrator password, MariaDB password and Laravel APP_KEY, all generated at first boot and written to a root-only file — no default login ships in the image
  • Pre-loaded sample family trees (the British Royals and the Kennedy family) so the interface is populated on first sign-in
  • nginx.service, php8.4-fpm.service and mariadb.service as systemd units, enabled and active
  • Plain-HTTP liveness endpoint at http://<vm>/up returning ok
  • 24/7 cloudimg support

Genealogy sign-in page

Prerequisites

An active Azure subscription, an SSH key pair, and a VNet + subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a good starting point; scale up for very large trees or many concurrent editors. NSG inbound: allow 22/tcp from your management network, and 443/tcp (plus 80/tcp for the HTTP→HTTPS redirect) from your users.

Step 1 — Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Genealogy 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), HTTP (80) and HTTPS (443). Then Review + createCreate.

Step 2 — Deploy from the Azure CLI

az vm create \
  --resource-group <your-rg> \
  --name genealogy \
  --image <marketplace-image-urn> \
  --size Standard_B2s \
  --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 genealogy --port 443 --priority 1010
az vm open-port --resource-group <your-rg> --name genealogy --port 80  --priority 1011

Step 3 — Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 — Confirm the services are running

The three services that back Genealogy should all report active. A plain-HTTP liveness endpoint answers on /up (it never touches the app or database), and the site itself is served over HTTPS:

systemctl is-active nginx php8.4-fpm mariadb
curl -s http://127.0.0.1/up
curl -ks -o /dev/null -w 'https / -> HTTP %{http_code}\n' https://127.0.0.1/

Expected: three lines of active, then ok, then HTTP 200.

Service status and health endpoint

Step 5 — Retrieve your administrator credentials

On the first boot of every VM, a one-shot service (genealogy-firstboot.service) generates credentials that are unique to that VM: a fresh Laravel application key, a fresh MariaDB password, and a fresh administrator password. The VM's own address is set as the application URL and a per-VM self-signed TLS certificate is generated. No shared or default credentials ship in the image — every seeded account's password is scrambled at build time, and the administrator's password is set only on first boot.

sudo cat /root/genealogy-credentials.txt

The file (mode 0600, root only) contains the administrator email (genealogy.admin.user, which is administrator@genealogy.test), the administrator password (genealogy.admin.pass), the site URL and the database credentials. Genealogy signs in by email.

Per-VM credentials file (secrets redacted)

Step 6 — Sign in

Browse to https://<vm-public-ip>/ and sign in with the administrator email and password from the credentials file. Because the VM ships a per-VM self-signed certificate, your browser shows a one-time security warning the first time — accept it to continue (Step 9 shows how to install a trusted domain certificate). After signing in you land on the people list of the administrator's current team, already populated with the pre-loaded British Royals sample family.

The people list showing the pre-loaded British Royals family

You can also prove the login round-trip from the VM's own shell — this reads the per-VM credentials, fetches a CSRF token and posts a real sign-in over HTTPS (a successful Genealogy login answers HTTP 302):

ADMIN_USER=$(sudo grep '^genealogy.admin.user=' /root/genealogy-credentials.txt | cut -d= -f2-)
ADMIN_PASS=$(sudo grep '^genealogy.admin.pass=' /root/genealogy-credentials.txt | cut -d= -f2-)
CJ=$(mktemp)
TOK=$(curl -ks -c "$CJ" https://127.0.0.1/login | grep -oE 'name="_token" value="[^"]+"' | head -1 | sed 's/.*value="//;s/"//')
curl -ks -o /dev/null -w 'login HTTP %{http_code}\n' -b "$CJ" -c "$CJ" \
  -d "_token=$TOK" --data-urlencode "email=$ADMIN_USER" --data-urlencode "password=$ADMIN_PASS" \
  https://127.0.0.1/login
rm -f "$CJ"

Step 7 — Explore and build your family tree

The Search page lists everyone in the currently-selected team; use the team switcher in the top-right to move between teams (the image ships with the British Royals and Kennedy samples). Select a person to open their datasheet — names, biological sex and gender identity, dates and places of birth and death, and their immediate family — with quick links to add a father, mother, partner or child, edit contact details, photos and files.

A person datasheet with dates, places and family links

Choose Family chart (or Ancestors / Descendants) on any person to see the tree laid out across generations. This is the heart of Genealogy — grandparents, parents, the person, their partners, children and grandchildren, all navigable in one view.

The family-tree chart of a sample person across several generations

To start your own tree, use the team switcher to create a new team, then Add person and link relationships as you go. GEDCOM import and export are available from the team menu so you can bring in data from other genealogy software or take it with you.

Step 8 — Confirm the application stack

Laravel's about command summarises the running application — version, PHP, environment and the configured drivers:

sudo -u www-data php /var/www/genealogy/artisan about

You should see Genealogy on Laravel 13 / PHP 8.4, environment production, debug OFF, the mysql database driver and the file cache driver.

php artisan about output

Step 9 — Install a trusted HTTPS certificate (recommended for production)

The image ships a per-VM self-signed certificate so the site is encrypted from first boot. For production, point a DNS name at the VM and replace it with a free Let's Encrypt certificate:

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

Certbot installs the certificate into the nginx site and sets up automatic renewal. Update APP_URL in /var/www/genealogy/.env to your https://your-domain.example.com address afterwards.

Administration from the CLI

Admin tasks use Laravel's artisan as the www-data user, for example to list the available commands or clear caches:

sudo -u www-data php /var/www/genealogy/artisan list

The MariaDB database is named genealogy; its per-VM password is in /root/genealogy-credentials.txt. The Laravel scheduler runs every minute from /etc/cron.d/genealogy-scheduler to drive backups (spatie/laravel-backup) and activity-log maintenance.

Maintenance

  • OS updates: unattended-upgrades is enabled, so security patches apply automatically. Apply the full set with sudo apt-get update && sudo apt-get -y dist-upgrade.
  • Upgrading Genealogy: back up the database and /var/www/genealogy, then follow the project's update notes.
  • Backups: back up the genealogy MariaDB database and the /var/www/genealogy/storage tree (uploaded photos and files).

Support

Every cloudimg deployment includes 24/7 support. cloudimg is not affiliated with, endorsed by, or sponsored by the Genealogy project or its author; all product names are the property of their respective owners.