Architecture

Overview

RDepot Architecture


RDepot (Manager) App

The RDepot Manager application is a Spring boot web application. It serves as a central control interface through which:

  • packages can be uploaded
  • packages can be published
  • repositories can be configured and (re-)published
  • user roles can be managed

The manager interacts with several components:

  1. an authentication backend to authenticate users. Several options are available. You can read more about them on the configuration page.
  2. a relational database to store package, user and repository metadata. Postgres is recommended (and is used in our integration tests).
  3. a persistent local filesystem to store uploaded packages, even if they are not (yet) published. It is recommended to deploy the manager as a singleton unless your storage layer supports read-write-many filesystem access (e.g. NFS) since the package storage needs to be shared among all manager instances.
  4. the Repo API.

RDepot (Manager) API

The RDepot API provides an web endpoint through which automated agents can interact. The primary usecase is to allow integration with automated build platforms.

The API runs in the same context as the manager app.

RDepot Repo API

The Repo API is intended as a publication endpoint for the manager. It’s responsibility is to accept packages and store them in a local filesystem in a directory structure which matches that of CRAN.

The publication flow is presented in more detail on the Publication Flow page

Web Server

A webserver is expected to run next to the Repo API and share its filesystem. End users can point their R installation to the endpoint exposed by the webserver using the repos argument of install.packages or equivalent.

The choice of webserver is left entirely up to the user. NGINX is recommended and used in our integration tests.