Skip to content
Open
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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ GH_TOKEN=your_github_pat
RSTUDIO_PORT=
# Password to access the Rstudio server
RSTUDIO_PASSWD=
# Port in which you want shiny server to be deployed (for running the app)
SHINY_PORT=
```

Finally, in a terminal located in the folder `docker` of this repository, run:
Expand Down
93 changes: 93 additions & 0 deletions docker/Dockerfile.shiny
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#############################
# SHINY-SERVER #
# VOLUME DOCKERFILE #
#############################
# Set up the shiny server #
# for using deepVATS App #
#############################
FROM misantamaria/dvats-rstudio:rocker-ml4.2
SHELL [ "/bin/bash", "--login", "-c" ]

# Add r-studio server user
ARG USER=user \
UID=1000 \
GID=1000

ENV USER=$USER \
UID=$UID \
GID=$GID

# Paths
ENV HOME=/home/$USER \
ENV_PREFIX=$HOME/env \
APP=$HOME/app

# Ensure files and packages
COPY --chown=app:app docker/entrypoint-rstudio.sh /usr/local/bin
COPY --chown=app:app r_shiny_app $APP

# Create groups and users
RUN addgroup --gid $GID $USER \
&& addgroup --system app \
&& addgroup --system shared \
&& adduser --disabled-password \
--gecos "Non-root user" \
--uid $UID \
--gid $GID \
--home $HOME \
$USER \
&& adduser --system --ingroup app app \
&& usermod -aG shared $USER \
&& usermod -aG shared app

# Agregar usuarios al grupo sudo después de crearlos
RUN adduser $USER sudo \
&& usermod -aG sudo app \
&& echo $USER "ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USER \
&& echo "app ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/app \
&& chmod 0440 /etc/sudoers.d/$USER \
&& chmod 0440 /etc/sudoers.d/app

ARG LOG_DIR=/var/log/shiny-server
ENV LOG_DIR=${LOG_DIR} \
LOG_FILE=${LOG_DIR}/app.logs
COPY --chown=app:app srv/shinylog $LOG_DIR

# Fix ownership and permissions for the home directory
RUN chown -R $USER:$USER $HOME \
&& chmod -R 775 $HOME \
&& chown -R app:app $HOME \
&& chmod -R 775 $HOME

# Ensure the log directory and file exist with correct permissions
RUN mkdir -p $LOG_DIR \
&& touch $LOG_FILE \
&& chown -R app:app $LOG_DIR \
&& chmod -R 775 $LOG_DIR

RUN R -e "install.packages('semantic.dashboard', repos='http://cran.r-project.org')"\
&& R -e "install.packages('randomcoloR', repos='http://cran.r-project.org')"

### Run server
ARG SHINY_PORT
ENV SHINY_PORT=${SHINY_PORT}

RUN chown -R app:app $APP
RUN chown -R app:app $LOG_DIR
RUN touch $LOG_FILE
RUN chown -R app:app $LOG_DIR

RUN [ -f ${LOG_DIR} ] && echo "${LOG_DIR} is a file" || echo "${LOG_DIR} is a directory"

#RUN ls -la $LOG_DIR && sleep 3
ARG SHINY_PORT
ENV SHINY_PORT=$SHINY_PORT
EXPOSE ${SHINY_PORT}
EXPOSE 3838

COPY --chown=app:app docker/entrypoint-shiny.sh /usr/local/bin/entrypoint-shiny.sh
RUN chmod u+x /usr/local/bin/entrypoint-shiny.sh
USER app
RUN touch $LOG_FILE
RUN ls -la $LOG_DIR && sleep 3
CMD ["/usr/local/bin/entrypoint-shiny.sh"]
60 changes: 53 additions & 7 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ services:
- ${LOCAL_DATA_PATH}:/home/${USER_NAME}/data/
- conda-env:/usr/local/share/miniconda3/envs/env
- miniconda:/usr/local/share/miniconda3
- lib:/usr/local/share/lib
init: true
stdin_open: true
tty: true
Expand All @@ -44,8 +45,10 @@ services:
dockerfile: docker/Dockerfile.rstudio
args:
- WANDB_API_KEY=${WANDB_API_KEY} #
- RETICULATE_PYTHON_ENV=/home/env
- RETICULATE_MINICONDA_PATH=/home/miniconda3
#- RETICULATE_PYTHON_ENV=/home/env
#- RETICULATE_MINICONDA_PATH=/home/miniconda3
- RETICULATE_PYTHON_ENV=/usr/local/share/miniconda3/envs/env
- RETICULATE_MINICONDA_PATH=/usr/local/share/miniconda3
- USER=${USER_NAME} #*
- UID=${USER_ID} #*
- GID=${GROUP_ID} #*
Expand All @@ -61,9 +64,7 @@ services:
- GROUPID=${GROUP_ID} #*
- PASSWORD=${RSTUDIO_PASSWD} #*
- ROOT=FALSE
- CUDA_VISIBLE_DEVICES=0,1,2
#- CUDA_VISIBLE_DEVICES=1
# - CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}
- CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}
- GH_TOKEN=${GH_TOKEN} #*
# TODO (28/03/2023): I don't know why it is not working without this
- ENV_VARS=WANDB_ENTITY,WANDB_API_KEY,WANDB_PROJECT,USER,USERID,GROUPID,PASSWORD,ROOT,CUDA_VISIBLE_DEVICES
Expand All @@ -72,7 +73,8 @@ services:
- ${LOCAL_DATA_PATH}:/home/${USER_NAME}/data/
- ../dvats:/home/${USER_NAME}/dvats
- conda-env:/usr/local/share/miniconda3/envs/env
- miniconda:/home/user/local/share/miniconda3
- miniconda:/usr/local/share/miniconda3
- lib:/usr/local/share/lib
deploy:
resources:
#limits:
Expand All @@ -82,7 +84,51 @@ services:
- driver: nvidia
count: all
capabilities: [gpu]

shiny-server:
build:
context: ../
dockerfile: docker/Dockerfile.shiny
args:
- WANDB_API_KEY=${WANDB_API_KEY}
- RETICULATE_PYTHON_ENV=/usr/local/share/miniconda3/envs/env
- RETICULATE_MINICONDA_PATH=/usr/local/share/miniconda3
- USER=${USER_NAME} #*
- UID=${USER_ID} #*
- GID=${GROUP_ID} #*
- SHINY_PORT=${SHINY_PORT}
image: dvats-shiny:${USER_NAME}
ports:
- "${SHINY_PORT}:3838" #*
expose:
- "8888"
environment:
- WANDB_ENTITY=${WANDB_ENTITY}
- WANDB_API_KEY=${WANDB_API_KEY}
- WANDB_PROJECT=${WANDB_PROJECT}
- USER=${USER_NAME} #*
- USERID=${USER_ID} #*
- GROUPID=${GROUP_ID} #*
- PASSWORD=${SHINY_PASSWD} #*
- ROOT=FALSE
- CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}
- GH_TOKEN=${GH_TOKEN} #*
# TODO (28/03/2023): I don't know why it is not working without this
- ENV_VARS=WANDB_ENTITY,WANDB_API_KEY,WANDB_PROJECT,USER,USERID,GROUPID,PASSWORD,ROOT,CUDA_VISIBLE_DEVICES
volumes:
- ../r_shiny_app:/home/${USER_NAME}/app
- ${LOCAL_DATA_PATH}:/home/${USER_NAME}/data/
- ../dvats:/home/${USER_NAME}/dvats
- conda-env:/usr/local/share/miniconda3/envs/env
- miniconda:/usr/local/share/miniconda3
- lib:/usr/local/share/lib
- ../srv/shinylog:/var/log/shiny-server
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
conda-env:
miniconda:
Expand Down
38 changes: 38 additions & 0 deletions docker/entrypoint-shiny.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash --login
set -e

[ -f ${LOG_DIR} ] && echo "${LOG_DIR} is a file" || echo "${LOG_DIR} is a directory"
[ -f ${LOG_FILE} ] && echo "${LOG_FILE} is a file" || echo "${LOG_FILE} is a directory"

echo ". ${HOME}/miniconda3/etc/profile.d/conda.sh" >> ${HOME}/.bashrc
# Make bash automatically activate the conda environment
echo "conda activate ${ENV_PREFIX}" >> ${HOME}/.bashrc

#... added for fixing fails when rebuilding docker ...#
### Ensuring to activate the correct conda
source /usr/local/share/miniconda3/etc/profile.d/conda.sh
conda activate /usr/local/share/miniconda3/envs/env

# Define an array of environment variable names from the ENV_VARS Compose variable
IFS=',' read -ra ENV_VAR_NAMES <<< "$ENV_VARS"

echo "ENV_VAR_NAMES=${ENV_VAR_NAMES[@]}"

# Loop through the array of environment variable names and set the variables
for ENV_VAR_NAME in "${ENV_VAR_NAMES[@]}"; do
ENV_VAR_VALUE="${!ENV_VAR_NAME:-default}"
echo "$ENV_VAR_NAME=$ENV_VAR_VALUE" >> ${HOME}/.Renviron
done

ulimit -s 16384
echo $LOG_FILE
#sudo chown app:app "$LOG_FILE"
sudo chown -R $UID:shared "$LOG_DIR"
sudo chmod -R 775 /var/log/shiny-server

ls -la $LOG_DIR

echo "DEBUG: Writing to ${LOG_FILE}" >> ${LOG_FILE}
exec >> $LOG_FILE 2>&1

R --quiet -e "shiny::runApp('${APP}', host='0.0.0.0', port=3838)"
Loading