Features

Why?

Deploying and managing ShinyProxy can get complex when many apps are used, especially when the configuration of ShinyProxy is often updated.

When restarting a running ShinyProxy instance (in order to update its configuration), users will face a disconnect from their running apps. The only solution to guarantee that users don’t lose their connection to running apps, is to keep the current instance alive when updating ShinyProxy’s configuration. However, manually keeping track of these instances would be too cumbersome and should therefore be automated.

The ShinyProxy Operator is able to manage multiple ShinyProxy instances and their configuration.

Example

Assume we’ve some ShinyProxy configuration config1 which contains one app called app1. When the operator starts working, it checks whether a ShinyProxy instance exists with that configuration. If not, it starts a ShinyProxy instance and all other required configuration. Users can now start using app1 on this instance.

Some time later, the need for a second app arises. Therefore, the administrator adapts the configuration of ShinyProxy to include a second app app2.

However, some users are still using app1 on the old instance. These apps may have some state, which shouldn’t be lost. Therefore, the operator starts a second ShinyProxy instance using configuration config2. The operator doesn’t modify the original ShinyProxy server, therefore the existing apps continue to work (even if they’re using WebSocket connections).

All new HTTP (and WebSocket) connections are forwarded to the new server, i.e. any new connection is handled by the new server. Therefore, if users go to the main ShinyProxy page, they will see that a new app is available. Every user (also those still using the old app) can start the new app. The operator stops and removes the old server as soon as it has finished handling any existing ( WebSocket) connections.

Flavours

The operator was originally developed for Kubernetes. Since version 2.2.0 support for pure Docker hosts is added, fully automating a production-grade ShinyProxy server, without the complexity of Kubernetes.

The operator is implemented as a single Docker image, supporting both Docker and Kubernetes. Most of the logic is shared between the two implementations. Nevertheless, the two implementations have slightly different feature set:

Feature Docker Kubernetes
Deployment of ShinyProxy Yes Yes
Seamless updates of ShinyProxy Yes Yes
Support for multiple ShinyProxy servers Yes Yes
Automatic deployment of Redis Yes No - examples available
Automatic deployment of monitoring stack Yes No - manually deploy needed
Automatic TLS Yes No - but possible with Kubernetes
Automatic deployment of Crane Yes No

Supported versions

This table lists which versions of ShinyProxy and the operator can be combined.

ShinyProxy Version Minimum operator version Maximum operator version (inclusive)
3.2.0 2.2.0 TBD
3.1.0 2.1.0 2.1.0
3.0.0 2.0.0 2.1.0
2.6.0 1.0.0 1.1.0
2.5.0 0.0.1-SNAPSHOT-20210302.095930 0.0.1-SNAPSHOT-20210607.070151
2.4.3 0.0.1-SNAPSHOT-20201215.112635 0.0.1-SNAPSHOT-20201215.112635