I'm trying to make shiny apps available to my coworkers without them having to run or even have R installed.
So I read this webpage and found this sentence:
If you are familiar with web hosting or have access to an IT department, you can host your Shiny apps yourself.
under the 'Share as a web page'-section.
How can I do this?
The problem is that my company is bound to certain restrictions regarding web hosting and security and so on, and will not (for now) pay for a shiny-server-pro.
But the sentence above gives me hope to set up something ourselves to convince them.
If you host the app at its own URL, users can visit the app (and not need to worry about the code that generates it). If you are familiar with web hosting or have access to an IT department, you can host your Shiny apps yourself.
At the time of writing, there are three platforms (PaaS) that offer free hosting: Shinyapps.io. Heroku. Fly.io.
You can create a standalone shiny app, that runs on computers WITHOUT needing to install R nor any library.
If your PC and your coworkers PCs belong to the same LAN, this is pretty easy to achieve. Just run your app through:
runApp(host = "0.0.0.0", port = 5050)
The value set through the host
argument says to accept any connection (not just from localhost). The port
argument can assume any value that you want (just assure to avoid to select ports used by other services like ssh
or http
). Then, take note of your local IP (if you are under linux, you can see it through ifconfig
). Say your IP is 192.168.1.70
. Your colleagues can use your app by inserting in the address bar of their browser 192.168.1.70:5050
, i.e. your IP followed by :
and the port number you selected.
If you want access from outside your LAN, you can direct your router to your PC when someone connect to your public IP through the 5050 port.
Sharing apps over the LAN like this is pretty cool, but it is kind of a hack. I tried it with some co-workers, and it works, but it is more of an office trick than a sustainable solution.
I just finished developing the RInno package for this exact problem, i.e. when a company will not pay for Shiny Server or there are security concerns with cloud services.
To get started:
install.packages("RInno") require(RInno) RInno::install_inno()
Then you just need to call two functions to create an installation framework:
create_app(app_name = "myapp", app_dir = "path/to/myapp") compile_iss()
If you would like to include R for your co-workers who don't have it installed, add include_R = TRUE
to create_app
:
create_app(app_name = "myapp", app_dir = "path/to/myapp", include_R = TRUE)
It defaults to include shiny, magrittr and jsonlite, so if you are using other packages like ggplot2 or plotly, just add them to the pkgs
argument. You can also include GitHub packages to the remotes
argument:
create_app( app_name = "myapp", app_dir = "path/to/myapp" pkgs = c("shiny", "jsonlite", "magrittr", "plotly", "ggplot2"), remotes = c("talgalili/installr", "daattali/shinyjs"))
If you are interested in other features, check out FI Labs - RInno
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With