Architecture

Overview

RDepot Architecture


RDepot Web UI

The RDepot Web UI application is a VueJS 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 web UI mainly interacts with the RDepot (Manager App) API to query and manage users, packages and repositories.

RDepot (Manager App) API

The RDepot API provides an web endpoint through which automated agents can interact. The primary usecase is to handle requests from the web UI. It also allows integration with automated build platforms.

The RDepot manager app 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 Repo API

The Repo API is intended as a publication endpoint for the manager. Its responsibility is to accept packages and store them in a local filesystem in a directory structure which matches that of CRAN (R) or PyPI (Python).

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 or Python installation to the endpoint exposed by the webserver using the repos argument of install.packages (R), the index URL of pip install (Python) or equivalent.

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