File size: 7,156 Bytes
00384fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#R-Shiny template https://huggingface.co/spaces/posit/shiny-for-r-template/tree/main
#Py-shiny template https://huggingface.co/spaces/posit/gptneox-chat

#############################
# RSTUDIO-SERVER            #
# VOLUME DOCKERFILE         #
#***************************#
# Set up a jupyter-lab for  #
# developing using deepvats #
#############################

##############
# Base image #
##############
# Adds rstudio server, tiyverse, devtools to rocker/cuda
FROM dvats-rstudio-base:latest

SHELL [ "/bin/bash", "--login", "-c" ]

###############
# Ensure vars # (Only for local test - DON'T USE IT IN HUGGINGFACE. ENSURE .env IS NOT ACCESIBLE IN THE WEB, USE THEIR SECRET MANAGEMENT)
###############
RUN echo "--> ARGS"
ARG USER_NAME \
    USER_ID \
    GROUP_ID \
    WANDB_API_KEY \ 
    WANDB_ENTITY \
    WANDB_PROJECT \
    GH_TOKEN 

RUN echo "--> ARGS -> ENV"
ENV USER_NAME=$USER_NAME \
    USER_ID=$USER_ID \
    GROUP_ID=$GROUP_ID \
    WANDB_ENTITY=$WANDB_ENTITY \
    WANDB_API_KEY=$WANDB_API_KEY \
    GH_TOKEN=$ghtoken \
    WANDB_PROJECT=$WANDB_PROJECT

RUN echo "--> Setup ENV variables"
ENV RETICULATE_PYTHON_ENV=/home/${USER_NAME}/env \
    ROOT=TRUE \
    RETICULATE_MINICONDA_PATH=/home/${USER_NAME}/miniconda \
    CUDA_VISIBLE_DEVICES=0,1,2 \
    ENV_VARS=WANDB_ENTITY,WANDB_PROJECT,USER_NAME,USER_ID,GROUP_ID,PASSWORD,ROOT,CUDA_VISIBLE_DEVICES\
    HOME="/home/${USER_NAME}"

###########
# Volumes #
###########

RUN echo "---> Setup volumes" \
    echo ${HOME} \
    echo ${USER_NAME}"|"${USER_ID}"|"${GROUP_ID} 

COPY --chown=${USER_ID}:${GROUP_ID} ../r_shiny_app $HOME/app
COPY --chown=${USER_ID}:${GROUP_ID} ${LOCAL_DATA_PATH} $HOME/data/
COPY --chown=${USER_ID}:${GROUP_ID} ../dvats ${HOME}/dvats

RUN echo "--> Prior installations" \ 
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC \
    set -e; \
    apt-get update --fix-missing \
    && apt-get install -y \
    python3-pip wget bzip2 curl \
    git sudo libarchive-dev libtiff5-dev zsh\
    #python3 -m pip install --upgrade pip \
    python3-venv libxt-dev \
    && apt-get clean  \
    && rm -rf /var/lib/apt/lists/* 

## Install R packages

#COPY docker/DESCRIPTION /tmp/
COPY --chown=${USER_ID}:${GROUP_ID} docker/DESCRIPTION /tmp/

RUN ls -la /tmp/ && sleep 5

RUN echo "--> Install R packages"

#RUN R -e "install.packages(deps_path = '/tmp/DESCRIPTION', remotes::dev_package_deps(dependencies = TRUE), repos = NULL)"

RUN R -e "devtools::install_deps('/tmp/', dependencies = TRUE)"

#RUN R -e "install.packages(c('shiny', 'pals', 'shinyWidgets', 'dygraphs', 'shinycssloaders', 'shinyjs', 'Rcpp', 'reactlog', 'pals',  'feather', 'fasttime', 'zoo', 'shinyWidgets'))"
#RUN R -e "remotes::install_github('r-lib/later')"
#RUN R -e "remotes::install_github('apache/arrow/r')"

## Install reticulate and create virtual environment using default Ubuntu installed Python
#RUN R -e "install.packages('reticulate')"



ENV ENV_PREFIX $HOME/env

RUN echo "---> Make sudo & setup sudoers"
RUN echo "$(id)"

ARG RETICULATE_MINICONDA_PATH=/usr/local/share/r-miniconda
ARG RETICULATE_PYTHON_ENV=/usr/virtualenvs/venv_shiny_app
ENV RETICULATE_PYTHON=${RETICULATE_PYTHON_ENV}/bin/python/

RUN echo "---> RETICULATE PYTHONS"
RUN echo "RETICULATE_PYTHON_ENV=${RETICULATE_PYTHON_ENV}" >> ${HOME}/.Renviron
RUN echo "RETICULATE_PYTHON=${RETICULATE_PYTHON}" >> ${HOME}/.Renviron

RUN echo "---> Export W&B"
## Export W&B environment variable to Rstudio

ARG WANDB_API_KEY
RUN echo "WANDB_API_KEY=${WANDB_API_KEY}" >> ${HOME}/.Renviron


ENV MINICONDA_VERSION=4.10.3 \ 
#ENV MINICONDA_VERSION=23.9.0 \ 
    CONDA_DIR=$HOME/miniconda3 \
    # Make non-activate conda commands available
    PATH=$CONDA_DIR/bin:$PATH \
    PROJECT_DIR=$HOME 

RUN echo "HOME: ${HOME} | CONDA_DIR = ${CONDA_DIR}" \
    #-- Install MINICONDA
    && wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-py38_$MINICONDA_VERSION-Linux-x86_64.sh -O ~/miniconda.sh  \
    && chmod +x ~/miniconda.sh  \
    && ~/miniconda.sh -b -p $CONDA_DIR  \
    && rm ~/miniconda.sh 

    # Make conda activate command available from /bin/bash --login shells
RUN echo ". $CONDA_DIR/etc/profile.d/conda.sh" >> ~/.profile 
    # make conda activate command available from /bin/bash --interative shells
RUN  conda init bash \
    # create a project directory inside user home
    && mkdir -p $PROJECT_DIR

WORKDIR $PROJECT_DIR
##########################
# Install & update MAMBA #
########################## 
ENV ENV_PREFIX $PROJECT_DIR/env
RUN conda install --name base --channel conda-forge mamba \
    && mamba update --name base --channel defaults conda 
#-- Build the mamba environment
RUN mamba install conda-lock -c conda-forge
COPY --chown=$UID:$GID docker/environment.yml docker/requirements.txt /tmp/
#RUN mamba lock -f /tmp/environment.yml --lockfile /tmp/environment.lock
#RUN mamba create --prefix ${ENV_PREFIX} --file /tmp/environment.lock
RUN mamba env create -vv --prefix ${ENV_PREFIX} --file /tmp/environment.yml
RUN conda clean --all --yes

# run the postBuild script to install the JupyterLab extensions
COPY --chown=$UID:$GID docker/postBuild /usr/local/bin
RUN chmod u+x /usr/local/bin/postBuild \
    && conda activate $ENV_PREFIX  \
    && /usr/local/bin/postBuild  \
    && conda deactivate \
    # Make bash automatically activate the conda environment
    && echo "conda activate $ENV_PREFIX" >> ~/.bashrc


RUN chmod u+x /usr/local/bin/postBuild \
    && conda activate $ENV_PREFIX  \
    && /usr/local/bin/postBuild  \
    && conda deactivate \
    # Make bash automatically activate the conda environment
    && echo "conda activate $ENV_PREFIX" >> ~/.bashrc

RUN conda list --prefix ${ENV_PREFIX}





RUN echo "--> rewrrite miniconda path"
# Rewrite the miniconda path environment in case it has been redefined in the compose file
RUN echo "RETICULATE_MINICONDA_PATH=${RETICULATE_MINICONDA_PATH}" >> ${HOME}/.Renviron

RUN echo "---> Make non-activate conda commands available"
RUN # make non-activate conda commands available
ENV PATH=${RETICULATE_MINICONDA_PATH}/bin:${PATH}
RUN echo "--> Permissions"

RUN echo "$(id )"

#RUN echo "--> Setup miniconda & Mamba"

#RUN echo ". ${HOME}miniconda3/etc/profile.d/conda.sh" >> ${HOME}/rstudio/.bashrc


#RUN echo "--> Conda activate"
# Make bash automatically activate the conda environment
#RUN echo "conda activate ${ENV_PREFIX}" >> ${HOME}/rstudio/.bashrc
#echo "export WANDB_ENTITY=${WANDB_ENTITY:-default}" >> ${HOME}/.bashrc
# echo "WANDB_ENTITY=${WANDB_ENTITY:-default}" >> ${HOME}/.Renviron

# Define an array of environment variable names from the ENV_VARS Compose variable
ARG ENV_VARS=ENV_VARS
RUN echo "---> Setup variables" && \
    IFS=',' read -ra NAMES <<< "ENV_VARS" && \
    for ENV_VAR_NAsME in "${NAMES[@]}"; do \ 
    #echo "$ENV_VARS" | tr ',' '\n' | while read ENV_VAR_NAME; do \
    ENV_VAR_VALUE="${!ENV_VAR_NAME:-default}"; \
    echo "$ENV_VAR_NAME=$ENV_VAR_VALUE"; \
    done > ${HOME}/.Renviron


RUN echo "--> Go!"

CMD ["R", "--quiet", "-e", "shiny::runApp(host='0.0.0.0', port=${RSTUDIO_PORT:-3838}, launch.browser = FALSE, appDir = '/home/${USER_NAME}/app')"]

# CMD ["/init"]