File size: 5,677 Bytes
262dad2 e0fac35 262dad2 2167684 e0fac35 262dad2 | 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 | # ββ Base image ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
FROM node:20-slim
# ββ System dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-venv \
make \
g++ \
wget \
curl \
git \
neofetch \
mediainfo \
screen \
nano \
rsync \
&& rm -rf /var/lib/apt/lists/*
# ββ Install bore ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN wget -q "https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-unknown-linux-musl.tar.gz" \
-O /tmp/bore.tar.gz && \
tar -xzf /tmp/bore.tar.gz -C /usr/local/bin bore && \
chmod +x /usr/local/bin/bore && \
rm /tmp/bore.tar.gz
# ββ Pin a stable machine-id βββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN echo "d8904b4d338adf83688caac869f64c0b" > /etc/machine-id && \
mkdir -p /var/lib/dbus && \
echo "d8904b4d338adf83688caac869f64c0b" > /var/lib/dbus/machine-id
USER root
# ββ Set HOME and PATH βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ENV HOME=/root \
PATH="/root/venv/bin:/usr/local/bin:${PATH}" \
VIRTUAL_ENV=/root/venv \
PIP_NO_CACHE_DIR=1 \
HOSTNAME=kanha
# ββ Install shellular globally ββββββββββββββββββββββββββββββββββββββββββββββββ
RUN npm install -g --prefix /usr/local shellular
# ββ Create Python venv-seed (baked into image) ββββββββββββββββββββββββββββββββ
RUN python3 -m venv /root/venv&& \
/root/venv/bin/pip install --upgrade pip && \
/root/venv/bin/pip install huggingface_hub && \
rm -f /root/venv/lib/python*/EXTERNALLY-MANAGED
# ββ Shell config ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN echo 'export PS1="\u@kanha:\w\$ "' >> /root/.bashrc && \
echo 'cd /data' >> /root/.bashrc && \
echo 'cd /data' >> /root/.bash_profile
# ββ Force pip/python β always use /root/venv βββββββββββββββββββββββββββββββββ
RUN printf '%s\n' \
'#!/bin/sh' \
'exec /root/venv/bin/pip "$@"' \
> /usr/local/bin/pip && chmod +x /usr/local/bin/pip && \
\
printf '%s\n' \
'#!/bin/sh' \
'exec /root/venv/bin/pip3 "$@"' \
> /usr/local/bin/pip3 && chmod +x /usr/local/bin/pip3 && \
\
printf '%s\n' \
'#!/bin/sh' \
'exec /root/venv/bin/python "$@"' \
> /usr/local/bin/python && chmod +x /usr/local/bin/python && \
\
printf '%s\n' \
'#!/bin/sh' \
'exec /root/venv/bin/python3 "$@"' \
> /usr/local/bin/python3 && chmod +x /usr/local/bin/python3
# ββ apt/apt-get wrapper β saves to apt.txt βββββββββββββββββββββββββββββββββββ
RUN printf '%s\n' \
'#!/bin/sh' \
'APT_FILE="/data/apt.txt"' \
'REAL_BIN="$1"' \
'shift' \
'if [ "$1" = "install" ]; then' \
' shift' \
' "$REAL_BIN" install "$@"' \
' STATUS=$?' \
' if [ $STATUS -eq 0 ]; then' \
' touch "$APT_FILE"' \
' for arg in "$@"; do' \
' case "$arg" in -*) continue ;; esac' \
' if ! grep -qx "$arg" "$APT_FILE"; then' \
' echo "$arg" >> "$APT_FILE"' \
' fi' \
' done' \
' fi' \
' exit $STATUS' \
'fi' \
'"$REAL_BIN" "$@"' \
> /usr/local/bin/_apt_wrapper && chmod +x /usr/local/bin/_apt_wrapper
RUN printf '%s\n' \
'#!/bin/sh' \
'exec /usr/local/bin/_apt_wrapper /usr/bin/apt "$@"' \
> /usr/local/bin/apt && chmod +x /usr/local/bin/apt
RUN printf '%s\n' \
'#!/bin/sh' \
'exec /usr/local/bin/_apt_wrapper /usr/bin/apt-get "$@"' \
> /usr/local/bin/apt-get && chmod +x /usr/local/bin/apt-get
# ββ Ensure /data exists βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN mkdir -p /data
# ββ App βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
COPY package*.json /root/app/
RUN cd /root/app && npm install --omit=dev
COPY . /root/app/
# ββ Runtime βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
WORKDIR /data
EXPOSE 7860
ENV PORT=7860
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["node", "/root/app/app.js"] |