Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I really enjoyed Treb Allen‘s tutorial on deploying a Shiny server on an Amazon Cloud Instance. I used this approach for my shiny app that is a map highlighting the economic impact of the recent shale oil and gas boom on the places where the actual extraction happens. The easiest way to proceed is to use the AMI Image, which basically is like a virtual box image just running on Amazon Cloud. It has the basic Shiny-server up and running. Along the way, I came across a few troubleshoots for which there are simple solutions.
I cant seem to access the Shiny server through the Browser?
Right after the installation and setting up of the Amazon Instance, I tried to access the shiny server using the public DNS, in my case that was
Public DNS: ec2-54-84-227-28.compute-1.amazonaws.com
However, this did not work since the shiny-server is listening on port 3838 and you need to allow incoming traffic on that port. The way to manage that in the EC2 Dashboard is to go change the security group that is assigned to the instance that you are running. You need to add a rule to allow incoming traffic on port 3838.
Once this is done, you should be able to go to your public DNS, in my case the request URL in the browser now is:
ec2-54-72-74-90.eu-west-1.compute.amazonaws.com:3838/shale-economic-impact/ in your browser
Where are the shiny-apps located?
The standard shiny apps that are preinstalled are located in
“/var/shiny-server/www” If you ssh into your EC2 instance, you can go to that folder.
I installed packages, but my shiny application can not load them?
The problem is most likely that you are logged in as ec2-user, where you have your own dedicated library path. In order to install R packages system wide, you need to change to root by doing:
sudo -i ##install now your R packages, R CMD INSTALL ... exit
The exit part is important as then you turn off administrator rights.
When I run the app, I get Javascript Error ”The application unexpectedly exited. Diagnostic information has been dumped to the JavaScript error console.”?
It could be that your EC2 instance is not powerful enough. I had that problem because the dataset that was loaded was too big, which creates a time-out. One way to overcome this is to start a medium instance rather than a micro instance. Please be aware that this is not part of the free usage tier and you will be billed for usage. However, an alternative simple fix by editing the config file. It could be that you are hitting a time-out.
In the shiny-server configuration help, there are two timeouts that can be set in the free shiny server version.
app_init_timeout — Describes the amount of time (in seconds) to wait for an application to start. After this many seconds if the R process still has not become responsive, it will be deemed an unsuccessful startup and the connection will be closed.
app_idle_timeout — Defines the amount of time (in seconds) an R process with no active connections should remain open. After the last connection disconnects from an R process, this timer will start and, after the specified number of seconds, if no new connections have been created, the R process will be killed.
It could be that the javascript error is thrown, because the R process was killed. You can edit the configuration file to increase the time-out periods, adding:
# Instruct Shiny Server to run applications as the user "shiny" run_as shiny; # Define a server that listens on port 3838 server { listen 3838; # Define a location at the base URL location / { # Host the directory of Shiny Apps stored in this directory site_dir /var/shiny-server/www; # Log all Shiny output to files in this directory log_dir /var/log/shiny-server; # When a user visits the base URL rather than a particular application, # an index of the applications available in this directory will be shown. directory_index off; app_init_timeout 250; } }
This brings us right to the next question,…
Where do I find my shiny server configuration file?
There is a hard coded configuration file, but in the search path there is one located in:
/etc/shiny-server/shiny-server.conf
here you can do the above edits. After you have done the edits you want to reload the configuration…
How do I reload the Configuration File, how to start or stop the shiny server?
#reload without restarting sudo reload shiny-server #stop the shiny server sudo stop shiny-server #start it... sudo stop shiny-server
Copying files from your local machine to the AWS Instance?
You can use “scp” for secure copying, e.g.
To download files from your instance:
scp -i frackingshiny-eu-west-1.pem ec2-user@ec2-54-72-74-90.eu-west-1.compute.amazonaws.com:/var/shiny-server/www/shale-economic-impact.zip
To upload files to your instance:
scp -r -i frackingshiny-eu-west-1.pem “/Users/thiemo/shale-economic-impact.zip” ec2-user@ec2-54-72-74-90.eu-west-1.compute.amazonaws.com:/var/shiny-server/www/
I plan to add more troubleshoots – if you have come across some error for which you had to find a solution, feel free to comment and I ll amend the list.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.