Spaces:
Running
Running
Update Dockerfile
Browse files- Dockerfile +17 -2
Dockerfile
CHANGED
|
@@ -1,7 +1,9 @@
|
|
| 1 |
# syntax=docker/dockerfile:1
|
| 2 |
FROM rocker/r2u:22.04
|
| 3 |
WORKDIR /code
|
|
|
|
| 4 |
ARG DEBIAN_FRONTEND=noninteractive
|
|
|
|
| 5 |
# ------------------------------------------------------------------------------
|
| 6 |
# System deps (also needed if we have to compile any R package from source)
|
| 7 |
# ------------------------------------------------------------------------------
|
|
@@ -12,7 +14,9 @@ RUN apt-get update -y && apt-get install -y --no-install-recommends \
|
|
| 12 |
libopenblas-dev liblapack-dev \
|
| 13 |
libjpeg-dev libpng-dev libtiff5-dev \
|
| 14 |
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
| 15 |
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8 HF_HUB_DISABLE_TELEMETRY=1 PIP_NO_CACHE_DIR=1
|
|
|
|
| 16 |
# ------------------------------------------------------------------------------
|
| 17 |
# Try to install as many R packages as possible via Debian (blazing fast)
|
| 18 |
# If any are missing from the repo, skip them and install later in R.
|
|
@@ -37,6 +41,7 @@ RUN set -eux; \
|
|
| 37 |
fi; \
|
| 38 |
done; \
|
| 39 |
rm -rf /var/lib/apt/lists/*
|
|
|
|
| 40 |
# ------------------------------------------------------------------------------
|
| 41 |
# R fallback: install anything still missing (pak first for speed, then base R)
|
| 42 |
# 'parallel' is part of base R; not needed here.
|
|
@@ -45,15 +50,19 @@ RUN set -eux; \
|
|
| 45 |
# R fallback: install anything still missing (pak first, then base R)
|
| 46 |
RUN Rscript - <<'RSCRIPT'
|
| 47 |
options(Ncpus = parallel::detectCores())
|
|
|
|
| 48 |
cran <- "https://cloud.r-project.org"
|
|
|
|
| 49 |
# Required and optional packages
|
| 50 |
req <- c(
|
| 51 |
"shiny","dplyr","ggplot2","readr","ggExtra","DT","shinydashboard",
|
| 52 |
"reticulate","remotes","data.table","stringdist","fastmatch",
|
| 53 |
"stringr","Rfast","foreach","doParallel","digest"
|
| 54 |
)
|
| 55 |
-
opt <- c("text")
|
|
|
|
| 56 |
installed <- rownames(installed.packages())
|
|
|
|
| 57 |
# Install required set: prefer pak (fast), fall back to install.packages
|
| 58 |
need <- setdiff(req, installed)
|
| 59 |
if (length(need)) {
|
|
@@ -64,19 +73,23 @@ if (length(need)) {
|
|
| 64 |
pak::pak(need)
|
| 65 |
TRUE
|
| 66 |
}, error = function(e) FALSE)
|
|
|
|
| 67 |
if (!ok) install.packages(need, repos = cran)
|
| 68 |
}
|
|
|
|
| 69 |
# Optional packages: best-effort only
|
| 70 |
opt_need <- setdiff(opt, rownames(installed.packages()))
|
| 71 |
if (length(opt_need)) {
|
| 72 |
try(install.packages(opt_need, repos = cran), silent = TRUE)
|
| 73 |
}
|
| 74 |
RSCRIPT
|
|
|
|
| 75 |
# ------------------------------------------------------------------------------
|
| 76 |
# Install LinkOrgs from GitHub (retry once on transient errors)
|
| 77 |
# ------------------------------------------------------------------------------
|
| 78 |
RUN R -q -e "remotes::install_github('cjerzak/LinkOrgs-software/LinkOrgs', upgrade='never')" \
|
| 79 |
|| R -q -e "remotes::install_github('cjerzak/LinkOrgs-software/LinkOrgs', upgrade='never', dependencies=TRUE)"
|
|
|
|
| 80 |
# ------------------------------------------------------------------------------
|
| 81 |
# Miniforge (includes mamba by default) for Python ML backend
|
| 82 |
# ------------------------------------------------------------------------------
|
|
@@ -103,12 +116,14 @@ RUN mamba create -y -n LinkOrgs_env python=3.11 pip && \
|
|
| 103 |
/opt/conda/envs/LinkOrgs_env/bin/pip install jmp==0.0.4 && \
|
| 104 |
/opt/conda/bin/conda clean -afy)
|
| 105 |
ENV RETICULATE_PYTHON=/opt/conda/envs/LinkOrgs_env/bin/python
|
|
|
|
| 106 |
# ------------------------------------------------------------------------------
|
| 107 |
# App code
|
| 108 |
# ------------------------------------------------------------------------------
|
| 109 |
COPY . .
|
|
|
|
| 110 |
# ------------------------------------------------------------------------------
|
| 111 |
# Shiny entrypoint (honor HF $PORT; default 7860)
|
| 112 |
# ------------------------------------------------------------------------------
|
| 113 |
EXPOSE 7860
|
| 114 |
-
CMD ["R", "--quiet", "-e", "port <- as.integer(Sys.getenv('PORT', '7860')); shiny::runApp('/code', host='0.0.0.0', port=port)"]
|
|
|
|
| 1 |
# syntax=docker/dockerfile:1
|
| 2 |
FROM rocker/r2u:22.04
|
| 3 |
WORKDIR /code
|
| 4 |
+
|
| 5 |
ARG DEBIAN_FRONTEND=noninteractive
|
| 6 |
+
|
| 7 |
# ------------------------------------------------------------------------------
|
| 8 |
# System deps (also needed if we have to compile any R package from source)
|
| 9 |
# ------------------------------------------------------------------------------
|
|
|
|
| 14 |
libopenblas-dev liblapack-dev \
|
| 15 |
libjpeg-dev libpng-dev libtiff5-dev \
|
| 16 |
&& rm -rf /var/lib/apt/lists/*
|
| 17 |
+
|
| 18 |
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8 HF_HUB_DISABLE_TELEMETRY=1 PIP_NO_CACHE_DIR=1
|
| 19 |
+
|
| 20 |
# ------------------------------------------------------------------------------
|
| 21 |
# Try to install as many R packages as possible via Debian (blazing fast)
|
| 22 |
# If any are missing from the repo, skip them and install later in R.
|
|
|
|
| 41 |
fi; \
|
| 42 |
done; \
|
| 43 |
rm -rf /var/lib/apt/lists/*
|
| 44 |
+
|
| 45 |
# ------------------------------------------------------------------------------
|
| 46 |
# R fallback: install anything still missing (pak first for speed, then base R)
|
| 47 |
# 'parallel' is part of base R; not needed here.
|
|
|
|
| 50 |
# R fallback: install anything still missing (pak first, then base R)
|
| 51 |
RUN Rscript - <<'RSCRIPT'
|
| 52 |
options(Ncpus = parallel::detectCores())
|
| 53 |
+
|
| 54 |
cran <- "https://cloud.r-project.org"
|
| 55 |
+
|
| 56 |
# Required and optional packages
|
| 57 |
req <- c(
|
| 58 |
"shiny","dplyr","ggplot2","readr","ggExtra","DT","shinydashboard",
|
| 59 |
"reticulate","remotes","data.table","stringdist","fastmatch",
|
| 60 |
"stringr","Rfast","foreach","doParallel","digest"
|
| 61 |
)
|
| 62 |
+
opt <- c("text") # non-fatal if unavailable
|
| 63 |
+
|
| 64 |
installed <- rownames(installed.packages())
|
| 65 |
+
|
| 66 |
# Install required set: prefer pak (fast), fall back to install.packages
|
| 67 |
need <- setdiff(req, installed)
|
| 68 |
if (length(need)) {
|
|
|
|
| 73 |
pak::pak(need)
|
| 74 |
TRUE
|
| 75 |
}, error = function(e) FALSE)
|
| 76 |
+
|
| 77 |
if (!ok) install.packages(need, repos = cran)
|
| 78 |
}
|
| 79 |
+
|
| 80 |
# Optional packages: best-effort only
|
| 81 |
opt_need <- setdiff(opt, rownames(installed.packages()))
|
| 82 |
if (length(opt_need)) {
|
| 83 |
try(install.packages(opt_need, repos = cran), silent = TRUE)
|
| 84 |
}
|
| 85 |
RSCRIPT
|
| 86 |
+
|
| 87 |
# ------------------------------------------------------------------------------
|
| 88 |
# Install LinkOrgs from GitHub (retry once on transient errors)
|
| 89 |
# ------------------------------------------------------------------------------
|
| 90 |
RUN R -q -e "remotes::install_github('cjerzak/LinkOrgs-software/LinkOrgs', upgrade='never')" \
|
| 91 |
|| R -q -e "remotes::install_github('cjerzak/LinkOrgs-software/LinkOrgs', upgrade='never', dependencies=TRUE)"
|
| 92 |
+
|
| 93 |
# ------------------------------------------------------------------------------
|
| 94 |
# Miniforge (includes mamba by default) for Python ML backend
|
| 95 |
# ------------------------------------------------------------------------------
|
|
|
|
| 116 |
/opt/conda/envs/LinkOrgs_env/bin/pip install jmp==0.0.4 && \
|
| 117 |
/opt/conda/bin/conda clean -afy)
|
| 118 |
ENV RETICULATE_PYTHON=/opt/conda/envs/LinkOrgs_env/bin/python
|
| 119 |
+
|
| 120 |
# ------------------------------------------------------------------------------
|
| 121 |
# App code
|
| 122 |
# ------------------------------------------------------------------------------
|
| 123 |
COPY . .
|
| 124 |
+
|
| 125 |
# ------------------------------------------------------------------------------
|
| 126 |
# Shiny entrypoint (honor HF $PORT; default 7860)
|
| 127 |
# ------------------------------------------------------------------------------
|
| 128 |
EXPOSE 7860
|
| 129 |
+
CMD ["R", "--quiet", "-e", "port <- as.integer(Sys.getenv('PORT', '7860')); shiny::runApp('/code', host='0.0.0.0', port=port)"]
|