SkillAgentSearch skills...

Vireo

Vireo is a turnkey Electronic Thesis and Dissertation (ETD) Management System.

Install / Use

/learn @TexasDigitalLibrary/Vireo
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<a name="readme-top"></a> Build Status Coverage Status

Vireo 4

Vireo is a turnkey Electronic Thesis and Dissertation (ETD) Management System. Starting with the 4.x release, Vireo offers fully customizable workflows and controlled vocabularies.

If you would like to help with testing or development, GitHub issues and pull requests are encouraged!

Building

Vireo build is done with Maven. The most current maven compatible with vireo4 is 3.9.2. Maven 3.9.3 is not compatible with the AngularJS used by vireo4. The build is configured with pom.xml and package.json. There are several command line arguments that can be used when packaging Vireo 4.

  • -Dproduction will package production ready. Required for Tomcat deployment or running as a jar
  • -DskipTests will skip tests.
  • -Dassets.uri=file:/opt/vireo/ will configure where to store assets.
  • -Dconfig.uri=file:/var/vireo/config/ will configure the external configuration directory for the WAR packaged application.
  • -Dspring.config.location=file:/var/vireo/config/ will configure the external configuration directory for development using spring-boot:run.

Ending trailing slash is required for spring.config.location

The external configuration directory is where an application.yml file can be added to override default properties. When packaging the application define config.uri, which will template context.xml file with the spring.config.location system variable for container deployment.

When running for development define spring.config.location to externalize the configuration. If running for development and using an external configuration, do not define assets.uri. It will have to be configured manually in the external application.yml.

External configuration is recommended for production deployment

Development

$ mvn clean package

or run for development

$ mvn clean spring-boot:run

or run for development with external configuration

$ mvn clean spring-boot:run -Dspring.config.location=file:/var/vireo/config/

or run for development with external assets

$ mvn clean spring-boot:run -Dassets.uri=file:/var/vireo/

or run as production

$ mvn clean spring-boot:run -Dproduction
<div align="right">(<a href="#readme-top">back to top</a>)</div>

Building or running with -Dproduction will change the index.html template at src/main/resources/templates/index.html

Production

$ mvn clean package -DskipTests -Dproduction -Dassets.uri=file:/opt/vireo/ -Dconfig.uri=file:/opt/vireo/config/

If build succeeds, you should have both a vireo-4.3.2.war and a vireo-4.3.2-install.zip in the target/ directory. When building for production required static assets are copied into the packaged war file and the index.html template is optimized for production. For development a symlink is used to allow the application to access required static assets.

Apache Reverse Proxy Config

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

<VirtualHost *:80>
  ServerName localhost

  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
  ProxyRequests Off
  RewriteEngine on
  RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
  RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
  RewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]

</VirtualHost>

Testing

Server

$ mvn clean test

Client

$ npm run test

Server and Client

$ mvn clean test -Dclient

Deploying from Zip Package

Unzip package into preferred directory (or any directory you choose):

$ cd /opt/vireo
$ unzip vireo-4.3.2-install.zip

Directory Structure of installed package

drwxrwxrwx  6 root  root  204 Sep  3 11:20 config
drwxr-xr-x  2 root  root   68 Sep  3 11:19 logs
drwxrwxrwx  7 root  root  238 Sep  3 11:20 webapp
  • config - where the external config files reside
  • logs - where vireo log files are stored
  • webapp - the extracted WAR file
<div align="right">(<a href="#readme-top">back to top</a>)</div>

Recommended Hardware Configuration

  • 2 CPUs
  • 2 GB RAM

Configure application

Currently, in order to have Tomcat know where the external configuration directory is, webapp/META-INF/context.xml will have to be updated. Skip step 1 if package built defining config.uri.

  1. Update context.xml to set external configuration directory
<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Parameter name="spring.config.location" value="file:/opt/vireo/config" />
</Context>
  1. Update application.yml
<div align="right">(<a href="#readme-top">back to top</a>)</div>

Deploy with Docker

A quick and easy deployment method using docker-compose is described in the Deployment Guide.

For advanced use cases, or when docker-compose is unavailable, the use of docker or npm/mvn is also described in the Deployment Guide.

Deployment, in general, may look something like this:

cp example.env .env

# Make any changes to the .env files before here.
docker-compose up

Deploy to Tomcat

Easiest way to deploy from extracted zip file is to create a symlink in Tomcat webapps directory to the Vireo webapp directory.

ln -s /opt/vireo/webapp /opt/tomcat/webapps/vireo

or as root

ln -s /opt/vireo/webapp /opt/tomcat/webapps/ROOT

Deploying WAR Package in Tomcat

Copy war file into Tomcat webapps directory (your location may vary -- this is an example):

$ cp ~/vireo-4.3.2.war /usr/local/tomcat/webapps/vireo.war

or as root:

$ cp ~/vireo-4.3.2.war /usr/local/tomcat/webapps/ROOT.war

if not specifying assets.uri during build the assets will be stored under the vireo webapp's classpath, /opt/tomcat/webapps/vireo/WEB-INF/classes

if not specifying config.uri during build the application.yml will be under the Vireo webapp's classpath, /opt/tomcat/webapps/vireo/WEB-INF/classes/application.yml

if deployed from default WAR package and would like to externalize the config, you will have to edit /opt/tomcat/webapps/vireo/META-INF/context.xml*

Running WAR as a stand-alone Spring Boot application

java -jar target/vireo-4.3.2.war
<div align="right">(<a href="#readme-top">back to top</a>)</div>

Configuring

You should configure the following properties for production. spring.jpa.hibernate.ddl-auto: create-drop will clear database on restart

| Property | Type | Description | Example | | :----------- | :------- | :-------------- | :---------- | | spring.datasource.platform | string | database platform, support h2, mysql, postgresql | postgresql | | spring.datasource.url | string | URL to database | jdbc:postgresql://localhost:5432/vireo | | spring.datasource.driverClassName | string | database driver class | org.postgresql.Driver | | spring.jpa.database-platform | string | database platform dialect | org.hibernate.dialect.PostgreSQLDialect | | spring.datasource.username | string | database username | vireo | | spring.datasource.password | string | database password | vireo | | spring.jpa.hibernate.ddl-auto | string | database schema initialization | update | | app.url | string | URL to Vireo 4 | https://vireo.tdl.org | | app.authority.admins | string | list of email addresses for initial administrators | admin@tdl.org | | auth.security.jwt.secret | string | used to encrypt JWT | verysecretsecret | | auth.security.jwt.issuer | string | issuer of JWT | vireo.tdl.org | | auth.security.jwt.duration | string | JWT duration in minutes | 15 | | app.security.secret | string | used to encrypt confidential database entries and registration tokens | verysecretsecret | | app.security.allow-access | string | CORS origins allowed | https://vireo.tdl.org | | app.email.host | string | smtp relay host | relay.tdl.org | | app.email.from | string | email address from | noreply@tdl.org | | app.email.replyTo | string | email address replyTo | admin@tdl.org | | app.reporting.address | string | email address to report issues | issues@tdl.org |

Do not forget to provide your own custom values for the security related properties, such as auth.security.jwt.secret, auth.security.jwt.issuer, auth.security.jwt.duration, app.security.secret, and app.security.allow-access.

Customization of default values

Information on customizing default values can be found in the advanced customization documentation.

<div align="right">(<a href="#readme-top">back to top</a>)</div>
View on GitHub
GitHub Stars50
CategoryDevelopment
Updated1mo ago
Forks38

Languages

Java

Security Score

95/100

Audited on Mar 3, 2026

No findings