File size: 4,291 Bytes
f89621d
 
 
36785ad
f89621d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8eb4d2d
 
 
 
 
073618e
d0b3017
d6eead8
d0b3017
073618e
5b8842a
f89621d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4933968
f89621d
6b4347f
 
 
5b8842a
f89621d
 
 
 
1507e5a
f89621d
c4d9f38
5b8842a
 
 
 
 
59c7002
5b8842a
1544c06
550cc7e
a1dfc36
e4f12f7
5b8842a
 
 
f89621d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b8842a
6a1f9f2
5b8842a
65f5314
5b8842a
f89621d
 
 
 
 
daa4e2b
f89621d
 
 
 
 
 
 
 
5b8842a
f89621d
 
 
 
 
b1b46cd
f89621d
 
 
3d6d924
6b4347f
cc0535d
f89621d
602e012
 
 
d2b64fa
602e012
804ba7d
a008038
5b8842a
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
FROM nvidia/cuda:12.5.1-cudnn-devel-ubuntu20.04

ENV DEBIAN_FRONTEND=noninteractive \
	TZ=Europe/Belgrade

# 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 \
    zip \
    unzip \
    htop \
    vim \
    nano \
    bzip2 \
    libx11-6 \
    build-essential \
    libsndfile-dev \
    software-properties-common \
    supercollider \
    supercollider-server \
    jackd2 \
    libjack-jackd2-dev \
    ffmpeg \
    xvfb \
    x11-xserver-utils \
    telnet \
    iputils-ping \
    icecast2 \
    nginx \
 && rm -rf /var/lib/apt/lists/*

RUN add-apt-repository ppa:flexiondotorg/nvtop && \
    apt-get upgrade -y && \
    apt-get install -y --no-install-recommends nvtop

RUN curl -sL https://deb.nodesource.com/setup_21.x  | bash - && \
    apt-get install -y nodejs && \
    npm install -g configurable-http-proxy

# 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:audio /app && usermod -aG audio user
RUN echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-user
RUN echo "@audio - rtprio 95" > /etc/security/limits.d/90-user
RUN echo "@audio - memlock unlimited" >> /etc/security/limits.d/90-user
RUN mkdir /data && chown user:audio /data

USER user

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

# Copy configuration files
COPY icecast.xml .
COPY nginx.conf .
COPY setup.sc .
COPY setup2.sc .
COPY start.sh .
COPY Consumer.py .
COPY test.html /data/
COPY Untitled1.ipynb /data/
COPY Player.ipynb /data/

# Standardize SC directories for the user (optional but good for debugging)
RUN mkdir -p /home/user/.local/share/SuperCollider/Extensions

# Set up the Conda environment
ENV CONDA_AUTO_UPDATE_CONDA=false \
    PATH=$HOME/miniconda/bin:$PATH
RUN curl -sLo ~/miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.sh \
 && chmod +x ~/miniconda.sh \
 && ~/miniconda.sh -b -p ~/miniconda \
 && rm ~/miniconda.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

# Fix permissions
RUN chown -R user:user /app && chmod +x /app/start.sh && mkdir -p /app/logs && chown -R user:user /app/logs && \
    mkdir -p /var/log/nginx && chown -R user:user /var/log/nginx && \
    mkdir -p /var/lib/nginx && chown -R user:user /var/lib/nginx && chmod -R 777 /tmp && rm -fr /tmp/*

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

USER user

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

# Copy the current directory contents into the container at $HOME/app setting the owner to the user
COPY --chown=user . $HOME/app

RUN chmod +x start_server.sh
RUN chmod +x start.sh

COPY --chown=user login.html /home/user/miniconda/lib/python3.9/site-packages/jupyter_server/templates/login.html

ENV PYTHONUNBUFFERED=1 \
	GRADIO_ALLOW_FLAGGING=never \
	GRADIO_NUM_PORTS=2 \
	GRADIO_SERVER_NAME=0.0.0.0 \
	GRADIO_THEME=huggingface \
	SYSTEM=spaces \
	SHELL=/bin/bash \
    DISPLAY=127.0.0.1:99 \
    XDG_RUNTIME_DIR=/data

# Install FoxDot Quark (needs to be done as the user)
# We run Xvfb momentarily just in case sclang needs a display (usually doesn't for CLI, but safe)
# 'xvfb-run' is a handy wrapper if we had it, but we can just run sclang directly for CLI text.
# RUN sclang setup.sc

EXPOSE 7860

CMD ["./start.sh"]