File size: 6,709 Bytes
548f7d3
 
 
0b2c32f
 
 
 
 
 
 
a45cd99
0b2c32f
 
 
 
00384fe
0b2c32f
0cb24ab
 
 
 
 
 
 
 
 
 
 
 
 
0b2c32f
 
a45cd99
f17cc6c
a45cd99
e7177ab
00384fe
 
e7177ab
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a45cd99
 
 
 
 
e7177ab
a45cd99
49c1de8
0b2c32f
 
00384fe
a45cd99
0b2c32f
00384fe
 
0b2c32f
00384fe
41d83da
 
4f40367
8fc1cff
 
0b2c32f
 
 
 
95feba1
0b2c32f
 
 
95feba1
0b2c32f
 
 
f36ec29
0b2c32f
 
f17cc6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
00384fe
f17cc6c
 
 
 
 
00384fe
f17cc6c
 
 
 
 
 
 
 
 
 
 
 
982c3d5
f17cc6c
 
 
 
 
 
 
982c3d5
f17cc6c
6fd6bab
56bf83e
 
f17cc6c
 
 
 
 
6fd6bab
f17cc6c
 
 
 
 
 
 
 
0b2c32f
 
95feba1
39d3e97
f8d6c41
c12b4db
fe03d25
 
cf03fa9
 
00384fe
 
 
 
 
 
 
 
 
56bf83e
cf03fa9
56bf83e
cf03fa9
 
56bf83e
cf03fa9
56bf83e
cf03fa9
 
 
 
b2f970f
8b2e56e
4cca4a8
548f7d3
4cca4a8
8b2e56e
 
6fd6bab
cf03fa9
00384fe
4cca4a8
0cb24ab
f8d6c41
548f7d3
 
 
 
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
#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

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/* 


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 \
    USER_ID=1000 \
    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 #
###########




## Install R packages

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

RUN echo "--> Install R packages" \ 
    R -e "devtools::install_deps('/tmp/', dependencies = TRUE)"

## Reticulate configuration
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" >> $HOME/.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 )"

### Copy deepvats
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 "--> 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

# Install deepvats

RUN pip install -e  /home/${USER_NAME}/work
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"]