File size: 1,710 Bytes
60882c9
5ce08d6
 
 
60882c9
539c8b9
 
 
60882c9
 
6cff671
 
 
 
60882c9
 
 
 
3b9402e
6cff671
 
60882c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5ce08d6
 
60882c9
 
 
 
6cff671
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
FROM rocker/shiny:latest

WORKDIR /code

# Install system dependencies in a single layer
RUN apt-get update && apt-get install -y \
    libmagick++-dev \
    imagemagick \
    libcurl4-openssl-dev \
    libssl-dev \
    libfontconfig1-dev \
    libfreetype6-dev \
    libharfbuzz-dev \
    libfribidi-dev \
    libxml2-dev \
    libcairo2-dev \
    libxt-dev \
    fonts-roboto \
    cmake \
    && rm -rf /var/lib/apt/lists/*

# Set CRAN mirror once
RUN echo 'options(repos = c(CRAN = "https://cloud.r-project.org"))' > ~/.Rprofile

# Install core R packages first (split into smaller groups)
RUN R -e 'install.packages(c("remotes", "curl", "httr", "jsonlite", "bslib"))'
RUN R -e 'install.packages(c("ggplot2", "dplyr", "grid", "gridExtra", "gtable"))'
RUN R -e 'install.packages(c("patchwork", "readr"))'

# Install magick separately
RUN R -e 'install.packages("magick")'

# Install showtext
RUN R -e 'install.packages("showtext")'

# Install arrow last with optimized settings
ENV ARROW_R_DEV=TRUE
ENV NOT_CRAN=TRUE
# Try binary first, fall back to minimal build
RUN R -e 'tryCatch(install.packages("arrow", INSTALL_opts = "--no-test-load"), \
    error = function(e) { \
        Sys.setenv(LIBARROW_MINIMAL="true"); \
        Sys.setenv(ARROW_WITH_ZLIB="OFF"); \
        Sys.setenv(ARROW_WITH_ZSTD="OFF"); \
        Sys.setenv(ARROW_WITH_LZ4="OFF"); \
        Sys.setenv(ARROW_WITH_SNAPPY="OFF"); \
        Sys.setenv(ARROW_WITH_BROTLI="OFF"); \
        Sys.setenv(ARROW_WITH_PARQUET="ON"); \
        install.packages("arrow", INSTALL_opts = "--no-test-load") \
    })'

# Copy app files
COPY . .

# Expose port
EXPOSE 7860

# Run app
CMD ["R", "--quiet", "-e", "shiny::runApp(host='0.0.0.0', port=7860)"]