Spaces:
Running
Running
File size: 6,314 Bytes
04d40ec e24259d 04d40ec e24259d 04d40ec e24259d 04d40ec e24259d 04d40ec | 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 | # ββ 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/*
# ββ Generate a unique 64-char Machine ID βββββββββββββββββββββββββββββββββββββ
# This creates a valid, random 64-character hex string (SHA-256 format)
RUN mkdir -p /var/lib/dbus && \
head -c 512 /dev/urandom | sha256sum | cut -d' ' -f1 > /etc/machine-id && \
cp /etc/machine-id /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 ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
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 installed packages to /data/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
# ββ Create entrypoint script ββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN printf '%s\n' \
'#!/bin/sh' \
'set -e' \
'exec "$@"' \
> /usr/local/bin/docker-entrypoint.sh && \
chmod +x /usr/local/bin/docker-entrypoint.sh
# ββ Ensure /data exists βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN mkdir -p /data
# ββ Git safe directory fix ββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN git config --system --add safe.directory '*'
# ββ App βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Note: Ensure package.json exists in your build context
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 ["bash", "-c", "\
{ \
chown -R root:root /data 2>/dev/null; \
chmod -R 755 /data 2>/dev/null; \
git config --global --add safe.directory '*' 2>/dev/null; \
if [ -f /data/apt.txt ]; then \
apt-get update -qq 2>/dev/null; \
while IFS= read -r pkg || [ -n \"$pkg\" ]; do \
[ -z \"$pkg\" ] && continue; \
apt-get install -y -qq \"$pkg\" 2>/dev/null || true; \
done < /data/apt.txt; \
fi \
} & \
exec node /root/app/app.js"]
|