Skip to content

Generic Architectures

The architectures below represent general architectures for Posit Package Manager, providing a mental model for different deployment options and the requirements to support each variation.

Specific reference architectures organized by target environment are also detailed within this chapter of the Administration Guide, discoverable using the left navigation pane.

Target environments#

Posit Package Manager can be deployed on-premises or within a cloud environment.

Package Manager on a single server#

In this configuration, Package Manager is installed on a single Linux server and enables:

  • Users to install Python and R packages from Package Manager.
  • Deployed content to install Python and R packages from Package Manager.

Generic architecture#

The diagram below shows both users and deployed content downloading packages from Package Manager. These are representative clients, as Package Manager is used to provide packages to any client requiring Python or R packages.


graph LR
u1(User)
u2(User)
b1(RStudio Session)
b2(Jupyter Session)
connect(Connect)
ppm(Package Manager)

u1---b1
u2---b2
b1---ppm
b2---ppm
connect---ppm

subgraph server[Linux Server]
ppm
end


classDef server fill:#FAEEE9,stroke:#ab4d26
classDef product fill:#447099,stroke:#213D4F,color:#F2F2F2
classDef session fill:#7494B1,color:#F2F2F2,stroke:#213D4F
classDef element fill:#C2C2C4,stroke:#213D4F

class server server
class connect,b1,b2,ppm product
class u1,u2 element

Package Manager in a load-balanced cluster#

Enhanced Advanced

In this configuration, Package Manager is installed on two or more Linux servers and enables:

  • Users to install Python and R packages from Package Manager.
  • Deployed content to install Python and R packages from Package Manager.
  • High availability to provide redundancy.

Requirements#

  • Files must be stored on external shared storage (typically an NFS server or S3).
  • The database provider must be an external PostgreSQL database server.

Generic architecture#

The diagram below shows both users and deployed content downloading packages from Package Manager. These are representative clients, as Package Manager is used to provide packages to any client requiring Python or R packages.

flowchart LR
u1(User)
u2(User)
b1(RStudio Session)
b2(Jupyter Session)
lb(Load Balancer)
connect(Connect)
ppm1(Package Manager)
ppm2(Package Manager)
lb(Load Balancer)
pg(Postgres)
nfs(Shared Storage)

u1---b1
u2---b2
b1---lb
b2---lb
connect---lb

subgraph server1 [Linux Server]
ppm1
end

subgraph server2 [Linux Server]
ppm2
end

lb---server1
lb---server2
server1-.-pg
server2-.-pg
server1-.-nfs
server2-.-nfs

classDef server fill:#FAEEE9,stroke:#ab4d26
classDef product fill:#447099,stroke:#213D4F,color:#F2F2F2
classDef session fill:#7494B1,color:#F2F2F2,stroke:#213D4F
classDef element fill:#C2C2C4,stroke:#213D4F
classDef req fill:#72994E,stroke:#1F4F4F,color:#F2F2F2

class server1,server2 server
class ppm1,ppm2,connect,b1,b2 product
class lb session
class u1,u2 element
class pg,nfs req

Package Manager in a Kubernetes cluster#

Advanced

In this configuration, Package Manager is installed in a Kubernetes cluster using a Posit-maintained Helm chart.

This enables:

  • Users in Python and R development sessions and deployed Python and R content to install packages from Package Manager.
  • Replica redundancy for multiple instances of the Package Manager service Pod.

Requirements#

  • Files must be stored on external shared storage (typically an NFS server or S3) (can be inside or outside Kubernetes).
  • The database provider must be an external PostgreSQL database server (can be inside or outside Kubernetes).

Generic architecture#

The diagram below shows both users and deployed content downloading packages from Package Manager. These are representative clients, as Package Manager is used to provide packages to any client requiring Python or R packages.

flowchart LR
u1(User)
u2(User)

b1(RStudio Session)
b2(Jupyter Session)
b3(Connect)
ingress(Ingress Controller)
package_manager(Package Manager <br/> ghcr.io/rstudio/rstudio-package-manager)
nfs(Shared Storage)
pg(Postgres)


u1---b1
u2---b2

b1---ingress
b2---ingress
b3---ingress

subgraph k8s [Kubernetes cluster]
    ingress---package_manager
end

k8s-..-pg
k8s-..-nfs

classDef server fill:#FAEEE9,stroke:#ab4d26
classDef product fill:#447099,stroke:#213D4F,color:#F2F2F2
classDef session fill:#7494B1,color:#F2F2F2,stroke:#213D4F
classDef element fill:#C2C2C4,stroke:#213D4F
classDef req fill:#72994E,stroke:#1F4F4F,color:#F2F2F2

class k8s server
class b1,b2,b3,package_manager product
class ingress session
class u1,u2,lb element
class pg,nfs req

Package Manager networking#

Package Manager requires outbound internet access to the Posit Package Service to receive package updates. The Posit Package Service is an online service located at https://rspm-sync.rstudio.com. For installations where such connectivity is not possible, even through an outbound proxy, (e.g., air-gapped or classified networks), Package Manager provides an offline downloader which performs bulk downloads of data from the Package Service.

With connectivity#

flowchart LR

ppm(Package Manager)
sync(Posit Package Service)

sync --- ppm

subgraph vpc[Private Network]
    ppm --- Connect
    ppm --- Workbench
end

PyPI --- sync  
CRAN --- sync  
Bioconductor --- sync

classDef server fill:#FAEEE9,stroke:#ab4d26
classDef product fill:#447099,stroke:#213D4F,color:#F2F2F2
classDef session fill:#7494B1,color:#F2F2F2,stroke:#213D4F
classDef element fill:#C2C2C4,stroke:#213D4F

class vpc server
class Connect,Workbench,ppm,sync,pypi,cran,bioc product

No connectivity#

Advanced

flowchart TD

ppm(Package Manager)
sync(Posit Package Service)
dl0(offline downloader)
dl1(downloaded files)


subgraph vpc[Private Network]
    direction LR
    dl1---ppm
    ppm --- Connect
    ppm --- Workbench
end

subgraph ext[ ]
    direction LR
    sync --- dl0
    CRAN --- sync  
    Bioconductor --- sync
    PyPI --- sync  
end

classDef server fill:#FAEEE9,stroke:#ab4d26
classDef product fill:#447099,stroke:#213D4F,color:#F2F2F2
classDef session fill:#7494B1,color:#F2F2F2,stroke:#213D4F
classDef element fill:#C2C2C4,stroke:#213D4F
classDef extnetwork fill:#FFFFFF,stroke:#FFFFFF

class vpc server
class ext extnetwork
class Connect,Workbench,ppm,sync,pypi,cran,bioc,dl0,dl1 product