|
|
|
|
|
FROM rocker/r2u:22.04 |
|
|
WORKDIR /code |
|
|
ARG DEBIAN_FRONTEND=noninteractive |
|
|
|
|
|
|
|
|
|
|
|
RUN apt-get update -y && apt-get install -y --no-install-recommends \ |
|
|
wget bzip2 git unzip ca-certificates locales tzdata \ |
|
|
build-essential gfortran \ |
|
|
libcurl4-openssl-dev libssl-dev libxml2-dev libgit2-dev \ |
|
|
libopenblas-dev liblapack-dev \ |
|
|
python3 python3-pip \ |
|
|
&& rm -rf /var/lib/apt/lists/* |
|
|
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8 HF_HUB_DISABLE_TELEMETRY=1 |
|
|
|
|
|
|
|
|
|
|
|
RUN pip3 install --no-cache-dir pandas earthengine-api |
|
|
|
|
|
|
|
|
|
|
|
ARG APT_R_PKGS="\ |
|
|
r-cran-shiny r-cran-dplyr r-cran-dt \ |
|
|
r-cran-data.table r-cran-foreach r-cran-doparallel" |
|
|
RUN set -eux; \ |
|
|
apt-get update -y; \ |
|
|
for pkg in $APT_R_PKGS; do \ |
|
|
if apt-cache show "$pkg" >/dev/null 2>&1; then \ |
|
|
echo "Installing $pkg via apt ..."; \ |
|
|
apt-get install -y --no-install-recommends "$pkg" || true; \ |
|
|
fi; \ |
|
|
done; \ |
|
|
rm -rf /var/lib/apt/lists/* |
|
|
|
|
|
|
|
|
|
|
|
RUN Rscript - <<'RSCRIPT' |
|
|
options(Ncpus = parallel::detectCores()) |
|
|
cran <- "https://cloud.r-project.org" |
|
|
req <- c( |
|
|
"shiny", "dplyr", "DT", "data.table", |
|
|
"bslib", "shinyWidgets", "xgboost", |
|
|
"reticulate", "future", "future.apply" |
|
|
) |
|
|
installed <- rownames(installed.packages()) |
|
|
need <- setdiff(req, installed) |
|
|
if (length(need)) { |
|
|
if (!requireNamespace("pak", quietly = TRUE)) { |
|
|
install.packages("pak", repos = "https://r-lib.github.io/p/pak/stable") |
|
|
} |
|
|
ok <- tryCatch({ |
|
|
pak::pak(need) |
|
|
TRUE |
|
|
}, error = function(e) FALSE) |
|
|
if (!ok) install.packages(need, repos = cran) |
|
|
} |
|
|
RSCRIPT |
|
|
|
|
|
|
|
|
|
|
|
COPY . /code/ |
|
|
|
|
|
|
|
|
|
|
|
EXPOSE 7860 |
|
|
CMD ["R", "--quiet", "-e", "port <- as.integer(Sys.getenv('PORT', '7860')); shiny::runApp('/code', host='0.0.0.0', port=port)"] |
|
|
|