V1
Applications Azure

VIVO 1.15 on Ubuntu 24.04 on Azure User Guide

| Product: VIVO 1.15 on Ubuntu 24.04 LTS on Azure

Overview

VIVO is an open source research networking and scholarship profiling platform, built on the Vitro semantic web application framework. It represents researchers, their publications, grants, courses, affiliations and areas of expertise as linked open data, so profiles connect to one another through shared works, departments and topics. Institutions use it to publish a public directory of scholarly activity, surface expertise for collaboration, and expose that information as standards based linked data.

The cloudimg image builds VIVO 1.15.1 and Vitro 1.15.1 from source with Maven and deploys the webapp on Apache Tomcat 9. Data is held in an embedded Apache Jena TDB triplestore (single node, no external database) and searched through a local Apache Solr instance. nginx reverse proxies the portal on port 80.

What is included:

  • VIVO 1.15.1 built from source on OpenJDK 11, deployed on Apache Tomcat 9 at /usr/local/tomcat
  • VIVO home directory at /usr/local/vivo/home (runtime configuration, triplestore, uploads)
  • Embedded Apache Jena TDB triplestore — no external database to run
  • Apache Solr 8.11 search index (vivocore), bound to loopback
  • nginx on port 80 reverse proxying Tomcat on port 8080; / redirects to /vivo/
  • vivo-firstboot.service generating a per-VM administrator password before Tomcat starts
  • Fully patched Ubuntu 24.04 LTS with unattended security updates enabled
  • 24/7 cloudimg support

Prerequisites

An active Azure subscription, an SSH key pair, and a VNet with a subnet. Standard_B2s (2 vCPU, 4 GB RAM) is the recommended size and comfortably runs the empty appliance (measured peak memory is roughly 1.9 GB with Tomcat, the triplestore and Solr all running). For larger institutional datasets, move to a D4s or D8s size and give the JVM and Solr more heap.

Open port 80 (and 22 for SSH) to your address range in the VM's network security group.

Step 1: Deploy and connect

Launch the image from the Azure Marketplace at Standard_B2s, then connect over SSH as azureuser:

ssh azureuser@<vm-ip>

The first boot generates the per-VM administrator password and starts VIVO; the very first startup takes a couple of minutes while the triplestore and ontologies initialise.

Step 2: Check the services and versions

sudo systemctl is-active solr tomcat nginx
java -version
/usr/local/tomcat/bin/version.sh | grep 'Server version'

All three services report active, on OpenJDK 11 and Apache Tomcat 9.

VIVO stack services active — solr, tomcat and nginx running on OpenJDK 11, Apache Tomcat 9.0 and Apache Solr 8.11

Step 3: Read the per-VM administrator password

VIVO's default administrator password (rootPassword) is never baked into the image. The image ships with an empty triplestore and no account; on first boot a unique password is generated and written to a root only file, and VIVO creates the administrator account with it. Read it:

sudo cat /stage/scripts/vivo-credentials.log

VIVO_ROOT_EMAIL is admin@vivo.local and VIVO_ROOT_PASSWORD is your unique password. The file is 0600 root:root, the password is present, first boot rotation is recorded, and the upstream default login is rejected:

sudo ls -l /stage/scripts/vivo-credentials.log
test -f /var/lib/cloudimg/vivo-firstboot.done && echo 'first boot rotation completed'
CJ=$(mktemp); curl -s -c "$CJ" http://127.0.0.1:8080/vivo/ >/dev/null
curl -s -c "$CJ" -b "$CJ" -o /dev/null -w 'default login -> %{redirect_url}\n' \
  --data-urlencode "loginName=admin@vivo.local" --data-urlencode "loginPassword=rootPassword" \
  --data-urlencode "loginForm=Log in" http://127.0.0.1:8080/vivo/authenticate

The default rootPassword is redirected back to /vivo/login — it does not work on your instance.

VIVO per-VM credentials file is 0600 root:root, the password is present, first boot rotation completed, and the default rootPassword login is rejected back to the login page

Step 4: Confirm the portal and search are healthy

curl -s -o /dev/null -w 'VIVO portal (Tomcat 8080): HTTP %{http_code}\n' http://127.0.0.1:8080/vivo/
curl -s -o /dev/null -w 'VIVO via nginx (80):       HTTP %{http_code}\n' http://127.0.0.1/vivo/
curl -s http://127.0.0.1:8983/solr/vivocore/admin/ping | grep -o '"status":"[A-Z]*"'

The portal answers on both Tomcat directly and through nginx, and the Solr vivocore search core reports OK.

VIVO portal returns HTTP 200 on Tomcat 8080 and through nginx on port 80, and the Solr vivocore search core ping reports OK

Step 5: Open the portal and log in

Browse to http://<vm-ip>/ — you are redirected to the VIVO portal. Use the Log in panel with admin@vivo.local and the VIVO_ROOT_PASSWORD from Step 3.

VIVO portal home page — Welcome to VIVO, a research focused discovery tool, with search and a login panel

VIVO login page with email and password fields

Step 6: Site Administration

Once signed in as the root administrator, the Site Admin menu opens the Site Administration dashboard — data input, site configuration, the ontology editor and advanced data tools (SPARQL query, RDF import and export).

VIVO Site Administration dashboard — data input, site configuration, ontology editor and advanced data tools including SPARQL query

Step 7: Create and read a researcher profile

VIVO exposes an authenticated SPARQL API. The block below reads your per-VM password from the credentials file (it is never echoed), creates a researcher record, then reads it back:

PASS=$(sudo grep '^VIVO_ROOT_PASSWORD=' /stage/scripts/vivo-credentials.log | cut -d= -f2-)
G='http://vitro.mannlib.cornell.edu/default/vitro-kb-2'
U='http://vivo.local/individual/n-guide-researcher'
curl -s -o /dev/null -w 'create profile -> HTTP %{http_code}\n' -X POST http://127.0.0.1:8080/vivo/api/sparqlUpdate \
  --data-urlencode "email=admin@vivo.local" --data-urlencode "password=$PASS" \
  --data-urlencode "update=INSERT DATA { GRAPH <$G> { <$U> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://vivoweb.org/ontology/core#FacultyMember> . <$U> <http://www.w3.org/2000/01/rdf-schema#label> \"Dr Grace Hopper\" . <$U> <http://vivoweb.org/ontology/core#preferredTitle> \"Professor of Computer Science\" . } }"
curl -s -X POST http://127.0.0.1:8080/vivo/api/sparqlQuery \
  --data-urlencode "email=admin@vivo.local" --data-urlencode "password=$PASS" \
  --data-urlencode "query=SELECT ?name ?title WHERE { <$U> <http://www.w3.org/2000/01/rdf-schema#label> ?name ; <http://vivoweb.org/ontology/core#preferredTitle> ?title }"

The create returns HTTP 200 and the read back returns the name and title you set.

VIVO authenticated SPARQL API — INSERT creates a researcher record returning HTTP 200, and SELECT reads back the name and title

The record renders as a full VIVO profile page (name, preferred title, contact, positions, research areas and the affiliation, publications, research and teaching tabs):

VIVO researcher profile page rendered for a faculty member with name, preferred title and profile sections

Step 8: Make it yours

  • Set your namespace before adding real data. VIVO mints URIs from Vitro.defaultNamespace in /usr/local/vivo/home/config/runtime.properties (shipped as http://vivo.local/individual/). Change it to a domain you control before ingesting data, then restart Tomcat: sudo systemctl restart tomcat.
  • Change the administrator email by editing rootUser.emailAddress in the same file, or add further accounts from Site Admin → User accounts.
  • Ingest data through Site Admin → Add/Remove RDF data or the Ingest tools, or programmatically through the SPARQL API shown above.
  • Back up the triplestore under /usr/local/vivo/home/ and the Solr index under /var/solr/data/vivocore/.

Support

Every cloudimg image includes 24/7 support and is tested against the exact build you launch. The operating system is fully patched with unattended security updates enabled.