Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,23 @@ I [convert them to containers](https://github.com/grst/containerize-conda) as th

Unfortunately, there seems to be [no straightforward way](https://community.rstudio.com/t/start-rstudio-server-session-in-conda-environment/12516/15) to use conda envs in Rstudio server. This repository provides two approaches to make rstudio server work with conda envs.

* [Running Rstudio Server in a Container](#running-rstudio-server-in-a-container)
* [Running Rstudio Server in a Singularity Container](#running-rstudio-server-in-singularity)
* [Running Rstudio Server in a Docker/Podman Container](#running-rstudio-server-in-a-container)
* [Running Rstudio Server locally](#running-locally)

## Running Rstudio Server in Singularity

### Prerequisites

* [Singularity]
* [conda]

### Usage

1. Activate the target conda env or set the environment variable `CONDA_PREFIX`
to point to the location of the conda env.
2.

## Running Rstudio Server in a Container

With this approach Rstudio Server runs in a Docker container (based on [rocker/rstudio](https://hub.docker.com/r/rocker/rstudio)).
Expand Down
5 changes: 5 additions & 0 deletions singularity/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.sif
var-lib-rstudio-server
run
tmp

15 changes: 15 additions & 0 deletions singularity/Singularity
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Bootstrap: docker

From: rocker/rstudio

%files
init.sh /init.sh

%post
echo "lock-type=linkbased" > /etc/rstudio/file-locks
chmod +x /init.sh
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh
bash ~/miniconda.sh -b -p /opt/conda



2 changes: 2 additions & 0 deletions singularity/database.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
provider=sqlite
directory=/var/lib/rstudio-server
14 changes: 14 additions & 0 deletions singularity/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash

source /opt/conda/etc/profile.d/conda.sh && \
conda activate $CONDA_PREFIX && \
rserver \
--www-address=127.0.0.1 \
--www-port=$PORT \
--rsession-which-r=$RSTUDIO_WHICH_R \
--rsession-ld-library-path=$CONDA_PREFIX/lib \
`# optional: old behaviour of R sessions` \
--auth-timeout-minutes=0 --auth-stay-signed-in-days=30 \
`# activate password authentication` \
--auth-none=0 --auth-pam-helper-path=pam-helper

1 change: 1 addition & 0 deletions singularity/rsession.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# add your configuration here
47 changes: 47 additions & 0 deletions singularity/run_singularity.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash

# See also https://www.rocker-project.org/use/singularity/

# Main parameters for the script with default values
PORT=${PORT:-8787}
PASSWORD=${PASSWORD:-notsafe}
TMPDIR=${TMPDIR:-tmp}
CONTAINER="rstudio_latest.sif" # path to singularity container (will be automatically downloaded)

# Set-up temporary paths
RSTUDIO_TMP="${TMPDIR}/$(echo -n $CONDA_PREFIX | md5sum | awk '{print $1}')"
mkdir -p $RSTUDIO_TMP/{run,var-lib-rstudio-server,local-share-rstudio}

R_BIN=$CONDA_PREFIX/bin/R
PY_BIN=$CONDA_PREFIX/bin/python

if [ ! -f $CONTAINER ]; then
singularity build --fakeroot $CONTAINER Singularity
fi

if [ -z "$CONDA_PREFIX" ]; then
echo "Activate a conda env or specify \$CONDA_PREFIX"
exit 1
fi

echo "Starting rstudio service on port $PORT ..."
singularity exec \
--bind $RSTUDIO_TMP/run:/run \
--bind $RSTUDIO_TMP/var-lib-rstudio-server:/var/lib/rstudio-server \
--bind /sys/fs/cgroup/:/sys/fs/cgroup/:ro \
--bind database.conf:/etc/rstudio/database.conf \
--bind rsession.conf:/etc/rstudio/rsession.conf \
--bind $RSTUDIO_TMP/local-share-rstudio:/home/rstudio/.local/share/rstudio \
--bind ${CONDA_PREFIX}:${CONDA_PREFIX} \
--bind $HOME/.config/rstudio:/home/rstudio/.config/rstudio \
`# add additional bind mount required for your use-case` \
--bind /data:/data \
--env CONDA_PREFIX=$CONDA_PREFIX \
--env RSTUDIO_WHICH_R=$R_BIN \
--env RETICULATE_PYTHON=$PY_BIN \
--env PASSWORD=$PASSWORD \
--env PORT=$PORT \
rstudio_latest.sif \
/init.sh