VIVO 1.15 on Ubuntu 24.04 on Azure User Guide
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.servicegenerating 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.

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.

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.

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.


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).

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.

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

Step 8: Make it yours
- Set your namespace before adding real data. VIVO mints URIs from
Vitro.defaultNamespacein/usr/local/vivo/home/config/runtime.properties(shipped ashttp://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.emailAddressin 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.