Hosting ‘FossilSimShiny’ on a Web Server

This vignette provides information on how to host the FossilShinyApp on a web server.

Specifically, while we’ll only look at serving the app on Debian 11, this guide can easily be adapted for any Linux based web server and for any app for that matter.

Preface

This guide will assume you know basic bash commands and have already setup a ssh connection to your web server.

Dependencies

Let’s start by installing all the dependencies we’ll need to compile and run our shiny web server. Connect via ssh to your web server and install the following packages.

R

Some dependencies used by FossilSim require a rather recent version of R. At the time of making this, on debian bullseye, you need a newer version of R rather than the one supplied by the advanced packaging tool apt.

This means we’ll need to add a PPA in order to get a more recent version of R as to fully support the FossilSim package, which we obviously need.

First open the file at /etc/apt/sources.list to add the R PPA to your sources list:

nano /etc/apt/sources.list

Add the line deb http://cloud.r-project.org/bin/linux/debian bullseye-cran40/ as shown below to add the PPA.

If you are using a different distro, you can use https://CRAN.R-project.org/bin/linux/ to find the right PPA.

Your source file should look like this:

# deb http://mirrors.online.net/debian bullseye main

deb http://mirrors.online.net/debian bullseye main non-free contrib
deb-src http://mirrors.online.net/debian bullseye main non-free contrib

deb http://security.debian.org/debian-security bullseye-security main contrib n>
deb-src http://security.debian.org/debian-security bullseye-security main contr>

# R 4.2.0
deb http://cloud.r-project.org/bin/linux/debian bullseye-cran40/

Then press CTRL+X to quit and Y to save.

Finally, you can install R.

apt-get update
apt-get install r-base r-base-dev

You can verify your R version by using the R command.

$ R

R version 4.2.0 (2022-04-22) -- "Vigorous Calisthenics"

Dependencies for building a Shiny server from source

These are the dependencies you’ll need to build shiny server. Depending on your distribution they may already be pre-installed.

  • Python 3.6+, pre-installed on Debian 11.

Use which python3 to verify it is installed. You should get something like /usr/bin/python3 if it’s correctly installed.

  • cmake

Use sudo apt-get install cmake.

  • gcc

Should be pre-installed.
Author’s note: we need gcc 4.8or newer which means you cannot use this guide with aDebian 9<server.

  • g++

Should be pre-installed.

  • git

Use sudo apt-get install git.

R packages we need

Any R packages used by the app needs to be installed for all users. This means we need to install both the shiny package and the FossilSim package for all users.

sudo su - -c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\""
sudo su - -c "R -e \"install.packages('FossilSim')\""

Installing Shiny Server

Note: most of this part is referenced from here.

Once all of the prerequisites have been satisfied, you can use the following commands to download and install Shiny Server.

# Clone the repository from GitHub
git clone https://github.com/rstudio/shiny-server.git

# Get into a temporary directory in which we'll build the project
cd shiny-server
mkdir tmp
cd tmp

# Install our private copy of Node.js
../external/node/install-node.sh

# Add the bin directory to the path so we can reference node
DIR=`pwd`
PATH=$DIR/../bin:$PATH

# Use cmake to prepare the make step. Modify the "--DCMAKE_INSTALL_PREFIX"
# if you wish the install the software at a different location.
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ../
# Get an error here? Check the "How do I set the cmake Python version?" question below

# Compile native code and install npm dependencies
make
mkdir ../build
(cd .. && ./bin/npm install)

# Install the software at the predefined location
sudo make install

# Install default config file
sudo mkdir -p /etc/shiny-server
sudo cp ../config/default.config /etc/shiny-server/shiny-server.conf

# Place a shortcut to the shiny-server executable in /usr/bin
sudo ln -s /usr/local/shiny-server/bin/shiny-server /usr/bin/shiny-server

# Create shiny user. On some systems, you may need to specify the full path to 'useradd'
sudo useradd -r -m shiny

# Create log, config, and application directories
sudo mkdir -p /var/log/shiny-server
sudo mkdir -p /srv/shiny-server
sudo mkdir -p /var/lib/shiny-server
sudo chown shiny /var/log/shiny-server
sudo mkdir -p /etc/shiny-server

# I added this command
sudo chown shiny:shiny /var/lib/shiny-server/

Putting the app on the server

The /srv/shiny-server directory is where we house our apps.
I recommend creating a new directory: /srv/shiny-server/FossilSimShinyApp/.

Then, you can grab the app.R file, the /www/ folder and the /R/ folder from here and copy them to /srv/shiny-server/FossilSimShinyApp/.

Firewall tweaks

By default, Shiny Server is set to use port 3838.
Author’s note: I have no idea why they chose this port.

You’ll need to open the port.

If you are using uncomplicated firewall, you can run the command: sudo ufw allow 3838

Furthermore you can change the port used in /etc/shiny-server/shiny-server.conf.

Starting Shiny Server

As you probably noticed, during the installation, we created a new user called shiny. We’ll use this user to start and stop our shiny operations.

Let’s start our shiny server. First, log in as shiny.

su shiny

If you’ve followed everything correctly, you should be able to start the shiny server by typing:

shiny-server
[2022-05-10T13:56:44.320] [INFO] shiny-server - Shiny Server v1.5.19.0 (Node.js v16.14.0)
[2022-05-10T13:56:44.324] [INFO] shiny-server - Using config file "/etc/shiny-server/shiny-server.conf"
[2022-05-10T13:56:44.435] [INFO] shiny-server - Starting listener on http://[::]:3838

You should then be able to access your app using any web browser and going to the following web address:

http:// your ip address :3838/FossilSimShiny/