We’re happy to share that ShinyProxy 3.2.0 is now available. This release focuses on a range of small but meaningful improvements aimed at making ShinyProxy easier to use. Debugging issues is now easier than ever, thanks to clearer error messages and improved error handling. The documentation has been extended with more background information (allowing you to better understand how ShinyProxy works) and additional troubleshooting information. During the last months, we’ve noticed that the adoption of ShinyProxy has been rapidly growing. In many cases it’s now the first choice to deploy data science apps (and IDEs) at both enterprise and research organizations. This motivates us to even further improve ShinyProxy and its ecosystem. If you want to be part of this journey, feel free to get in touch, share your thoughts on the community forum or contribute on GitHub. This blog posts covers the major improvements. As always all changes in this version can be found in the release notes.
ShinyProxy Operator for Docker
ShinyProxy has always supported several container backends. Where ShinyProxy on Docker is easy to setup, it lacks some of the benefits of running ShinyProxy on Kubernetes. By adding support for pure Docker hosts to the ShinyProxy Operator, we’re closing this gap today. The support for Docker has been added to the existing Kubernetes operator (without any breaking change), therefore a big part of the logic of the operator is shared between the Docker and Kubernetes version. Just like using the operator on Kubernetes, this allows for zero-downtime updates of the ShinyProxy configuration and upgrades to ShinyProxy itself. It also integrates with Redis to provide session and app persistence. In short, you can update the ShinyProxy configuration without needing to restart it manually, and users won’t experience any interruptions during the process. Although Redis is required for this to work, you don’t need to install or configure it yourself, the operator handles everything automatically. The operator even deploys the full monitoring stack. As a final bonus, the operator automatically configures TLS (using the Caddy webserver). In conclusion, using the operator on Docker gives you many of the benefits of using Kubernetes, but in a much more cost-effective way. Of course, ShinyProxy keeps supporting Kubernetes, since it’s essential in setups that needs the effortless scaling provided by Kubernetes. In the future, we even want to support some of the features of the Docker operator on Kubernetes as well.
Monitoring
With a few apps deployed, you can manually look at logs with tools like the Docker and Kubernetes CLI. However, as the number of apps typically grows quickly, the need for better monitoring capabilities also grows. Since a long time, a monitoring stack is available for ShinyProxy. This release further enhances the stack, making it much more user friendly. Many small changes have been made in the dashboards. To start, all dashboards have a (collapsible) description, these include tips on using the dashboard. Every panel now also has a help text. The filtering capabilities of the dashboards have been extended, allowing you to more easily find the logs or resources you are looking for. The dashboards containing information about specific apps now also show the metadata about the app ( including the app state). Besides improvements to the dashboards, many technical improvements were made. All components are updated to their latest version, while configuration of some components has been simplified. Finally, a technical limitation has been overcome, ensuring that the logs of apps that fail (almost) immediately after startup, do actually appear in Grafana. This makes the whole setup more reliable. In the past, the monitoring stack was only supported on Kubernetes. With this release, support for pure Docker hosts is added. The stack is integrated in the operator, which can now automatically deploy it on Docker hosts.
Error handling
As part of making ShinyProxy more enjoyable to use, the error handling has been improved. ShinyProxy now better describes the reason why an app fails to startup, and it can also retrieve error messages directly from the container backend. The goal is for you to see all relevant information in one place. While an app is starting, ShinyProxy now (continuously) monitors the container’s health. If the container crashes, the user is notified immediately, rather than waiting for a timeout, as in previous versions. Similar improvements have been made for cases where a running app crashes.
Nobody really likes reading the stack traces generated by Java. That’s why ShinyProxy now displays the most relevant error message in a concise, human-readable format at the end of the output when a crash occurs. The complete stack trace is still available when the error message by itself isn’t sufficient for troubleshooting.
In addition to improving error messages, we also aim to reduce the number of errors ShinyProxy generates in the first place. For example, the configuration of memory and CPU resources has become smarter. ShinyProxy can now parse common notations for these values, even if they aren’t recognized by the container backend. See the updated documentation.
Finally, we’ve made significant improvements to memory usage, particularly for servers running many apps. In line with this, the official Docker image now includes optimized Java memory settings by default.
Documentation
Everything you need to know about ShinyProxy is documented on https://shinyproxy.io. Together with this release, we’ve extended and updated the documentation. The new concepts category contains pages with background information about the app lifecycle and authentication and authorization. The troubleshooting page has been extended with common errors and how to solve them. Finally, the documentation of the operator has been moved from GitHub to the website.
Full release notes can be found on the downloads page and updated documentation can be found on https://shinyproxy.io. As always community support on this new release is available at https://support.openanalytics.eu.
Don’t hesitate to send in questions or suggestions and have fun with ShinyProxy!