VIVO
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 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.
This SecureAnyCloud 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, searched through a local Apache Solr instance, and served on port 80 behind nginx.
What you get:
- VIVO 1.15.1 built from source on OpenJDK 11, deployed on Apache Tomcat 9 at
/usr/local/tomcat - The VIVO home directory at
/usr/local/vivo/home, holding the runtime configuration, triplestore and uploads - An embedded Apache Jena TDB triplestore (single node), so there is no external database to run
- An Apache Solr 8.11 search index (
vivocore), bound to loopback - nginx on port 80 as a reverse proxy for Tomcat on port 8080, with
/redirecting to/vivo/ vivo-firstboot.service, which generates a per-VM administrator password before Tomcat starts- Ubuntu 24.04 LTS, patched at build time, with unattended security updates enabled
- 24/7 SecureAnyCloud support
Prerequisites
You need 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. It 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.
In the VM's network security group, open port 80 and port 22 (SSH) to your address range.
Deploy and connect
Launch the image from the Azure Marketplace at Standard_B2s, then connect over SSH as azureuser.
ssh azureuser@<vm-ip>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 initialize.
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.
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 the file:
sudo cat /stage/scripts/vivo-credentials.logVIVO_ROOT_EMAIL is admin@vivo.local and VIVO_ROOT_PASSWORD is your unique password. Verify 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/sac/data/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/authenticateThe default rootPassword is redirected back to /vivo/login. It does not work on your instance.
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 both directly on Tomcat and through nginx, and the Solr vivocore search core reports OK.
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.
Site Administration
Signed in as the root administrator, open the Site Admin menu to reach the Site Administration dashboard. It covers data input, site configuration, the ontology editor and advanced data tools (SPARQL query, RDF import and export).
Create and read a researcher profile
VIVO exposes an authenticated SPARQL API. The block below reads your per-VM password from the credentials file without echoing it, creates a researcher record, then reads the record 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 call returns HTTP 200, and the read-back returns the name and title you set.
The record renders as a full VIVO profile page. It shows the name, preferred title, contact details, positions and research areas, with tabs for affiliation, publications, research and teaching.
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 you ingest data, then restart Tomcat withsudo systemctl restart tomcat. - Change the administrator email by editing
rootUser.emailAddressin the same file. To add further accounts, use Site Admin, then User accounts. - Ingest data through Site Admin, then Add/Remove RDF data or the Ingest tools. You can also ingest 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 SecureAnyCloud image includes 24/7 support and is tested against the exact build you launch. The operating system is patched at build time, with unattended security updates enabled.
Deploy on Azure
Launch VIVO 1.15 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