The technology

K-Link connects various information sources, such as websites, online applications and intranets of organizations and companies, to a common digital library. Its flexible interfaces allow accelerated search, retrieval and exchange of information from different platforms.

K-Link can be integrated with any website or Document Management System. For instance, the freely available Open Source Software K-Box - or Knowledge-Box - provides a comfortable way to manage documents and videos and it integrates seamlessly with K-Link.


The K-Box product is composed of three components:

  1. The K-Box Application
  2. The Database Management System (DBMS)
  3. The K-Search Application Program Interface (K-Search in the following), which requires an additional component called K-Search Engine

Of course, under all the components, there is a storage layer.

Picture of the K-Box architecture

The K-Box Application is responsible of the user management, the document management and all the operations that are strictly connected to make the user able to see the documents, manage the documents and share the documents.

The Database Management System is external to the K-Box Application and stores, in a structured way, all the data required by the K-Box Application to offer the various features, e.g. users and their profiles, pointer to uploaded documents, collections hierarchy, shares,...

The K-Search is responsible for the full text retrieval of the documents added into the K-Box Application. The K-Search defines the required information to make a document/presentation/video searchable. This data structure is called Data and defines the required metadata and how the original content should be passed to the K-Search.

The K-Search is the interface between an application and the customized Search Engine, called K-Search Engine.

Docker orchestrates the three components. Docker defines what the components expose to public and the way to start them. In addition, Docker enables building and packaging of the software into containers that can be distributed on multiple Operating Systems in a standard way, without the resource requirements of Virtual Machines. Among other Docker benefits, there is also the isolation between the application and the underlying system


Each component requires access to a storage location. The K-Box Application stores the uploaded files, the DBMS persistently store the tables and the K-Search Engine stores the search index.

K-Box Application internals

The K-Box Application, even if exposed using a web interface, hides plenty of running parts:

  • Reverse proxy (NGINX), serves as the entry point for all the communications via HTTP
  • Supervisor, manages the start of NGINX, PHP-FPM and Tus
  • Tus server for Resumable Upload
  • The application code, written in PHP on top of the Laravel framework
  • The document language recognizer, identifies the language of a document
  • The video processing application that converts videos to different formats for playback purposes
  • The queue system, based on the Laravel queue runner, offloads long running processes from the main application lifecycle

K-Box Application main internal components

Every component has its own set of dependencies. The diagram only depicts the important components for running the K-Box Application.

Running multiple K-Boxes on the same server

In order to run multiple K-Boxes on the same server, multiple installations needs to be performed.

As presented in the next diagram, three K-Boxes are physically executed on the same server.

Diagram of a multiple K-Box deployment on the same server

Each K-Box is accessible using a different registered domain name and the data is located in three separate folders (on the same hard-drive or multiple hard-drives).

Please take into consideration that each K-Box in the diagram is an isolated K-Box as, presented at the beginning of the K-Box section. Hence 3 K-Boxes require 3 times the computational resources, e.g. 2 GB of RAM × 3 = 6 GB of RAM as the minimum requirement.

Although the entry point of the K-Box Application already is a reverse proxy, it is not capable of serving multiple K-Boxes under different domain names, e.g., two.second.tld. To comply with this scenario a reverse proxy must be deployed on the server to intercept all HTTP traffic and correctly route it to the deployed K-Box.

K-Link is a logical aggregation of three components:

  1. The K-Registry, that controls the authentication of the application requesting connection to the K-Link
  2. The Database Management System (DBMS) that serves the K-Registry by storing applications
  3. The K-Search, composed of the K-Search Application Programming Interface (API) and the K-Search Engine

K-Link architecture diagram

The promotional website is optional and can be any static or dynamic website with (or without) a K-Link Adapter. By default, K-Link deployment does not provide any public facing page that describes the community or enables browsing of resources published by the community.

K-Link is a logical grouping of services, because there is no central Web Application that serves as an entry point. All services accept direct connections from browsers, or HTTP libraries.

The various services are reached by specific path aliases:

  • / (root), the website, if configured
  • /api and /docs are related to the K-Search API
  • /registry drives the traffic to the K-Registry

A word about users

Applications that can search or manage the published resources are considered by K-Link to be users. Single physical persons cannot have a profile, unless they are developers of a website or Content Management System and want to let the application they developed to be able to publish/search resources.

From K-Link perspective a K-Box is an application.

K-Link installation requires approximately the same computation resources as a single K-Box installation. The storage might differ as it depends on the deployment configuration. If the full file content is selected to be stored, the used disk space will be governed by the size of the published files.

K-Link can be installed on a dedicated server. By default, K-Link installation does not have a single entry point and all services independently manage the connections. Therefore, a reverse proxy must be added to intercept HTTP requests.

K-Link on a server

K-Link can also be installed on a machine that hosts K-Boxes. In this case, the reverse proxy needs to be configured to route requests to the K-Boxes and the K-Link.

K-Link deployed alongside other K-Boxes

If both K-Box and K-Link need to be reachable on the same domain name, it is highly recommended to expose the K-Link on the second level and use a third level for the K-Box, e.g. points to the K-Link and point to the K-Box.

The K-Link exposes an Application Programming Interface (API) for extension and integration purposes.

A third party system can integrate with the K-Link in two ways:

  1. via a client
  2. via an adapter

K-Link Client and Adapters

A K-Link Client is a component that integrates into a third party system and enable that system to interact with the K-Link API. Usually an integration of this type might be called plugin, module or extension. K-Link Clients are always deployed where the third party system runs. Under this category there is the integration with Wordpress, Drupal, or other Content Management System.

A K-Link Adapter is a software that translates the K-Link API to the structure understood by a third party service (and viceversa). Adapters usually run outside the third party system, as it might be closed source without plugin capability or might expose only an API. An adapter can run on the K-Link hosting infrastructure. Under this category can be found the integration with a different Document Management System, a Cloud service provider or other services that are not under direct control of the integrator.

In order to connect a client or an adapter to K-Link, developers need to create an account on the K-Link Registry related to the specific K-Link instance. Once the account is created and active (it might require the community approval), an application can be registered and an authentication token will be obtained. To this end, an application should be available on an internet domain name to be successfully registered.

Based on the authentication token, the application might be able to search, publish, delete alone or in permutation.