Software Components
LAUDATIO Docker containers
LAUDATIO is available as a set of Docker containers that are orchestrated via docker compose. The following table gives an overview of the containers:
| Container Name | Current Version | Functionality | Container Dependencies |
|---|---|---|---|
Elasticsearch (three shards: es01, es02, es03) | 8.19.4 | Indexes the corpus (meta)data and delivers search functionality | es02 depends on es01, es03 depends on es02 |
redis | redis:alpine (currently, 8.6.1) | The cache for corpus and file data + used as queue backend | None |
postgres | 9.6.24 | Single point of truth, containing data tables for the Laravel framework, as well as corpus metadata; needed for the corpus management interface | None |
app | (see Release Notes) | Our LAUDATIO app container (details, see below) | redis, postgres |
web | nginx:alpine (currently, 1.29.6) | The nginx reverse proxy server to expose our containers to the host | app |
Container app
The majority of the actual LAUDATIO code sits in the app Docker container. The Dockerfile for the container installs the following dependencies into the container as a preliminary step to the LAUDATIO dependencies described after that:
RUN apt-get update && apt-get install -y \
bash \
openssl \
libldap2-dev \
libnss-ldap libpam-ldap ldap-utils \
wget \
curl \
python3 \
python3-pip \
python3-venv \
git \
zip \
libzip-dev \
procps \
openjdk-21-jre-headless \
libpq-dev nano lsof \
postgresql-client \
&& docker-php-ext-configure ldap --with-libdir=lib/$(uname -m)-linux-gnu/ && \
docker-php-ext-install ldap zip \
&& apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
The web application that runs inside the container is further split into two components:
- A Laravel/VueJS-based
Frontend - A Python-based
Backend
We thus summarize the tech stack and dependencies of those two components further.
Frontend
Laravel serves as the overarching frontend framework and provides the bulk of routes and controllers. There are, however, some routes that require more sophisticated JavaScript-based interactivity and features. In these routes, we therefore use VueJS-based views as the main UI components. While Laravel and VueJS are tightly integrated, their installation procedures and ecosystems are separate (composer vs npm), so we describe their dependencies separately as well.
The frontend code can be found in the repository laudatio-repository-update.
Laravel
PHP 8.4.x is installed via Docker. The main app dependencies that are installed within the container via composer are:
| Package Name | Current Version | Functionality |
|---|---|---|
laravel/framework | "^12.0" | Base framework |
elasticsearch/elasticsearch | "^7.17.2" | PHP Elasticsearch client (used to mainly get data from ES; the only data ingestion made with this is on corpus duplication) |
bistrosk/elasticsearch-dsl | "^8.0" | PHP query builder for Elasticsearch |
graham-campbell/gitlab | "^8.0" | GitLab client for creating/managing corpus git repos |
mailerlite/laravel-elasticsearch | "*" (installed is 11.2.0) | Laravel wrapper for PHP Elasticsearch client |
ldaprecord-laravel | "^3.3" | LDAP client for user authentication |
predis/predis | "^2.2.2" (installed is 2.4.0) | PHP Redis client |
VueJS
The VueJS part of the frontend requires Node.js in at least version 22 and has the following npm dependencies (base package, utility packages, the rest are UI/UX-related libraries):
| Package Name | Current Version | Functionality |
|---|---|---|
vue | 2.7.16 | Base framework |
axios | "^1.12.2" | HTTP client |
dayjs | "^1.11.18" | General date utilities (e.g. making dates human-readable) |
jquery | "^3.7.1" | Enables general DOM manipulation, event listeners, HTTP calls for both VueJS part as well as Laravel part of app |
vite | "^6.0.0" (installed is 6.3.5) | Code bundler |
vuex | 3.6.2 | State management |
bootstrap | "^4.6.1" | Framework for responsive UI |
bootstrap-vue | "^2.23.1" | Vue wrapper for Bootstrap 4 |
d3 | "^7.9.0" | Interactive visualization library |
dropzone | "^5.9.3" | User interface and handler for file uploads |
@fortawesome/fontawesome-free | "^7.0.1" | Icon library |
unsliderjs | "^0.2.0" | Carousel/slider plugin (used on front page) |
vue-good-table | "^2.21.11" | Table component for easy data display and filtering |
vue-simple-suggest | "^1.11.2" | Enables search suggestions |
Backend
The backend component refers to our Python-based data validation and ingestion API. This API is separate from the Laravel-based API described above and can therefore be found in a distinct repository: laudatio-backend.
The new re-write of this component moved the architecture away from a workflow based on git pre-commit hooks and towards a standardized and modularized Flask API. The backend pipeline runs on Python 3, but also requires to run shell scripts with a Java installation; we use openjdk-21-jre-headless (see above).
Furthermore, for the extraction of plaintexts, there are two tools bundled that are used depending on the format from which the plaintext are to be extracted (corpora in the format tei are handled by the Flask API directly):
annattoin version 0.45.0 for corpora in the formatsannis,relannis, orgraphannisPepperin version 2023.05.15 for corpora in the formatsexmaralda/exb,paula,ptb, ortxt
| Package Name | Current Version | Functionality |
|---|---|---|
| flask | ~=3.1.0 | Base API framework |
| beautifulsoup4 | 4.14.3 | Used for parsing and extracting plaintext from corpus data provided in tei |
| datacite | 1.0.1 | API wrapper to create DOIs via DataCite |
| elasticsearch | 8.18.0 | Python client for Elasticsearch (used to put data into ES) |
| elastic-transport | 8.17.1 | Utilities for Python client for Elasticsearch |
| GitPython | 3.1.50 | Library to interact with git repos, used to manage corpus git repos |
| lxml | 6.0.4 | For parsing TEI header files |
| pandas | 2.3.3 | annatto produces output as .csv files, so we use pandas to read them for post-processing and extracting plaintext |
| redis | 7.4.0 | Python client for Redis |
| rq | 2.9 | Job queues with Redis, used for dispatching plaintext extraction jobs |
| (UNUSED) python-gitlab | 8.3.0 | |
| thefuzz | 0.22.1 | Used for fuzzy matching plaintext file names to uploaded document header .xml file names |