cjerzak commited on
Commit
b44c654
·
verified ·
1 Parent(s): 54732ab

Update Dockerfile

Browse files
Files changed (1) hide show
  1. 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") # non-fatal if unavailable
 
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)"]