File size: 3,597 Bytes
d05f81e
3431712
 
 
 
 
 
 
 
d05f81e
3431712
 
 
 
d05f81e
 
3431712
d05f81e
 
 
399f98e
d05f81e
 
 
399f98e
d05f81e
3431712
 
 
 
 
 
 
 
 
 
 
 
d05f81e
3431712
 
 
 
d05f81e
 
 
 
 
3431712
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d05f81e
 
 
 
 
 
 
 
 
 
 
3431712
 
 
 
d05f81e
3431712
68e8798
3431712
d05f81e
 
3431712
 
 
 
 
d05f81e
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
FROM nvidia/cuda:12.9.1-base-ubuntu20.04

ENV DEBIAN_FRONTEND=noninteractive \
	TZ=Europe/Paris

# Remove any third-party apt sources to avoid issues with expiring keys.
# Install some basic utilities
RUN rm -f /etc/apt/sources.list.d/*.list && \
    apt-get update && apt-get install -y --no-install-recommends \
    curl ca-certificates sudo git wget procps git-lfs htop vim nano bzip2 libx11-6 build-essential libsndfile-dev software-properties-common \
    zip \
    unzip \
 && rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://get.pnpm.io/install.sh | bash && \
    curl -sL https://deb.nodesource.com/setup_24.x  | bash && \
    apt-get install -y nodejs && \
    npm install -g configurable-http-proxy && \
    dpkg --add-architecture i386 && \
    apt update && \
    apt install -y nsis lld clang && \
    apt install -y default-jdk openjdk-11-jdk openjdk-17-jdk openjdk-21-jdk default-jre openjdk-11-jre openjdk-17-jre openjdk-21-jre && \
    apt install -y wimtools  p7zip-full p7zip-rar mkisofs && \
    apt install -y aptitude && \
    aptitude install -y llvm wine64 wine32 && \
    aptitude install -y aria2

# Create a working directory
WORKDIR /app

# Create a non-root user and switch to it
RUN adduser --disabled-password --gecos '' --shell /bin/bash user \
 && chown -R user:user /app
RUN echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-user
USER user

# All users can use /home/user as their home directory
ENV HOME=/home/user
RUN mkdir $HOME/.cache $HOME/.config $HOME/.cargo $HOME/.xwin \
 && chmod -R 777 $HOME

# Set up the Conda environment
ENV CONDA_AUTO_UPDATE_CONDA=false \
    PATH=$HOME/anaconda/bin:$PATH
RUN curl -sLo ~/anaconda.sh https://repo.anaconda.com/archive/Anaconda3-2025.12-2-Linux-x86_64.sh \
 && chmod +x ~/anaconda.sh \
 && ~/anaconda.sh -b -p ~/anaconda \
 && rm ~/anaconda.sh \
 && conda clean -ya

WORKDIR $HOME/app

#######################################
# Start root user section
#######################################

USER root

# User Debian packages
## Security warning : Potential user code executed as root (build time)
RUN --mount=target=/root/packages.txt,source=packages.txt \
    apt-get update && \
    xargs -r -a /root/packages.txt apt-get install -y --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

RUN --mount=target=/root/on_startup.sh,source=on_startup.sh,readwrite \
	bash /root/on_startup.sh

RUN mkdir /data && chown user:user /data

#######################################
# End root user section
#######################################

USER user

ENV PATH="$HOME/.cargo/bin:$PATH"
RUN curl -LsSf https://astral.org.cn/uv/install.sh | bash && \
    curl -fsSL https://bun.com/install | bash && \
    curl -fsSL https://deno.land/install.sh | sh -s - -y && \
    curl -fsSL https://pixi.sh/install.sh | bash && \
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s - --default-toolchain beta --profile complete -y && \
    rustup target add x86_64-pc-windows-msvc && \
    cargo install --locked cargo-xwin && \
    cargo xwin cache xwin && \
    cargo xwin cache windows-msvc-sysroot

# Python packages
RUN --mount=target=requirements.txt,source=requirements.txt \
    pip install --no-cache-dir --upgrade -r requirements.txt

COPY --chown=user start_server.sh $HOME/start_server.sh

RUN chmod +x ../start_server.sh

COPY --chown=user login.html /home/user/anaconda/lib/python3.13/site-packages/jupyter_server/templates/login.html
COPY --chown=user config.toml /home/user/.cargo/config.toml

ENV PYTHONUNBUFFERED=1 \
	SYSTEM=spaces \
	SHELL=/bin/bash

CMD ["../start_server.sh"]