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