<p><div><div><div><div data-show-faces="false" data-height="21" data-width="100" data-layout="button_count" data-send="true" data-href="https://www.r-bloggers.com/shinyproxy-christmas-release/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="https://www.openanalytics.eu/blog/2018/12/23/shinyproxy-2.1.0/"> Open Analytics</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>ShinyProxy is a novel, open source platform to deploy Shiny apps for the enterprise<br>
or larger organizations. Since our <a rel="nofollow" href="https://www.openanalytics.eu/blog/2018/08/07/shinyproxy-2.0.1/" target="_blank">previous blog post</a> five releases took place, so it is time to provide the<br>
‘state of affairs’ before venturing into the New Year.</p>
<h3>Kerberos and Co</h3>
<p>To some Kerberos is a multi-headed dog that guards the gates of the Underworld. To others<br>
it is enterprise technology that protects corporate networks and offers single sign-on for network services. ShinyProxy already supports a broad range of authentication and authorization technologies (OpenId Connect, Keycloak, LDAP, social login etc.), but with Kerberos we can support even more organizations to manage access to their Shiny apps, both using the Active Directory variant and the Kerberos implementation one finds on GNU/Linux and other unix variants. Similarly to OpenId Connect where the OIDC access token for a user is made available to the Shiny app, the Kerberos credentials cache of a user is automatically mounted inside the app container so the app can use service tickets for accessing other services (<code>backend-principals</code>).</p>
<p><img border="0" alt="Cerberum domat Hercules" width="auto" src="https://www.r-bloggers.com/blog-img/cerberus.jpg"></p>
<p>Another (new) authentication method <code>webservice</code> was added to allow usage of ShinyProxy with custom web services that handle authentication with a HTTP POST call returning a session id and user information. For the existing methods a few refinements were made e.g. allowing specific attributes to be used as the user’s name for both Keycloak (<code>proxy.keycloak.name-attribute</code>) and OpenId based authentication (<code>proxy.openid.username-attribute</code>).</p>
<h3>Docker Back-Ends</h3>
<p>As you may know ShinyProxy can be scaled from a single machine (plain Docker host) to data center scale with <a rel="nofollow" href="https://docs.docker.com/engine/swarm/" target="_blank">Docker Swarm</a> and <a rel="nofollow" href="https://kubernetes.io/" target="_blank">Kubernetes</a> clusters. For Docker Swarm a fully worked out example has been added on our <a rel="nofollow" href="https://github.com/openanalytics/shinyproxy-config-examples/tree/master/06-containerized-docker-swarm" target="_blank">ShinyProxy Config Examples</a> repository on Github.<br>
In the last release the Kubernetes back-end also gained support to select specific nodes<br>
for the Shiny apps using the <code>proxy.kubernetes.node-selector</code> field.</p>
<p>It is now also possible to mount user-specific docker volumes in your apps (and many other goodies) thanks to the support of <a rel="nofollow" href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions" target="_blank">Spring expression language</a> (or SpEL) in the <code>application.yml</code> configuration file:</p>
<pre><code>proxy:
     ...
  specs:
  - id: santaclaus
    display-name: The most Mighty and Loyal Friend of Children
    container-cmd: [&quot;R&quot;, &quot;-e&quot;, &quot;sleigh::run_rudolph()&quot;]
    container-image: openanalytics/christmas
    access-groups: [statisticians, reindeers]
    container-volumes: [ &quot;/home/#{proxy.userId}/gifts:/var/gifts&quot; ]
</code></pre>
<h3>Miscellaneous improvements</h3>
<p>In terms of <strong>integration</strong>, we added an example on how to embed Shiny apps into arbitrary web sites or portal sites as part of the <a rel="nofollow" href="https://github.com/openanalytics/shinyproxy-config-examples/tree/master/07-api-embedded-app" target="_blank">configuration examples</a>. In terms of <strong>security</strong> a new option <code>proxy.bind-address</code> now allows to control the bind address for ShinyProxy. Styling and <strong>customizing</strong> ShinyProxy was possible for a long time (see a.o. <a rel="nofollow" href="https://www.openanalytics.eu/blog/2018/05/28/shinyproxy-1.1.1/" target="_blank">this</a> blog post), but we now added a simple way to set the favicon so you can give your ShinyProxy instances a personal touch.</p>
<p>Full release notes can be found on the <a rel="nofollow" href="https://www.shinyproxy.io/downloads/" target="_blank">downloads</a> page and updated documentation can be found on <a rel="nofollow" href="https://shinyproxy.io/" target="_blank">https://shinyproxy.io</a>. As always community support on this new release is available at</p>
<p><a rel="nofollow" href="https://support.openanalytics.eu/" target="_blank">https://support.openanalytics.eu</a></p>
<p>Merry Christmas and have fun with ShinyProxy!</p>
	<p>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="https://www.openanalytics.eu/blog/2018/12/23/shinyproxy-2.1.0/"> Open Analytics</a></strong>.</div>
<hr>
<a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="https://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a rel="nofollow" href="https://www.r-project.org/" title="The R Project for Statistical Computing">R</a> news and <a rel="nofollow" href="https://www.r-bloggers.com/search/tutorial" title="R tutorials">tutorials</a> on topics such as: <a rel="nofollow" href="https://www.r-bloggers.com/search/data%20science" title="Data science">Data science</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Big%20Data" title="Big Data">Big Data, <a rel="nofollow" href="https://www.r-users.com/" title="R jobs">R jobs</a>, visualization (<a rel="nofollow" href="https://www.r-bloggers.com/search/ggplot2" title="ggplot and ggplot2 tutorials">ggplot2</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/boxplot" title="Boxplots using lattice and ggplot2 tutorials">Boxplots</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/map" title="Maps and gis">maps</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/animation" title="Animation in R">animation</a>), programming (<a rel="nofollow" href="https://www.r-bloggers.com/search/RStudio" title="RStudio IDE for R">RStudio</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/sweave" title="Sweave and literate programming">Sweave</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/LaTeX" title="LaTeX in R">LaTeX</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/SQL" title="SQL and databases">SQL</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/eclipse" title="Eclipse IDE for R">Eclipse</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/git" title="git and github, Version Control System">git</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/hadoop" title="Large data in R using Hadoop">hadoop</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Web+Scraping" title="Web Scraping of google, facebook, yahoo, twitter and more using R">Web Scraping</a>) statistics (<a rel="nofollow" href="https://www.r-bloggers.com/search/regression" title="Regressions and ANOVA analysis tutorials">regression</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/PCA" title="principal component analysis tutorial">PCA</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/time+series" title="Time series">time series</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/trading" title="finance trading">trading</a>) and more...
<img width="1" alt="" src="http://feeds.feedburner.com/~r/RBloggers/~4/YE0UxXgWd_4" height="1"></a></div>