| # ββ Base image ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FROM node:20-slim | |
| # ββ System dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN apt-get update && \ | |
| apt-get install -y --no-install-recommends \ | |
| python3 \ | |
| python3-pip \ | |
| python3-venv \ | |
| make \ | |
| g++ \ | |
| wget \ | |
| curl \ | |
| git \ | |
| neofetch \ | |
| mediainfo \ | |
| screen \ | |
| nano \ | |
| openssh-server \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ββ Install bore (TCP tunnel β exposes SSH publicly for Termius) ββββββββββββββ | |
| 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 | |
| # ββ Prepare SSH runtime dirs ββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN mkdir -p /run/sshd /root/.ssh | |
| # ββ Pin a stable machine-id βββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN echo "d8904b4d338adf83688caac869f64c0b" > /etc/machine-id && \ | |
| mkdir -p /var/lib/dbus && \ | |
| echo "d8904b4d338adf83688caac869f64c0b" > /var/lib/dbus/machine-id | |
| # ββ Set HOME for root βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ENV HOME=/root \ | |
| PATH="/root/.npm-global/bin:/root/venv/bin:${PATH}" \ | |
| VIRTUAL_ENV=/root/venv \ | |
| PIP_NO_CACHE_DIR=1 | |
| # ββ Create a persistent Python venv ββββββββββββββββββββββββββββββββββββββββββ | |
| RUN python3 -m venv /root/venv && \ | |
| /root/venv/bin/pip install --upgrade pip && \ | |
| /root/venv/bin/pip install huggingface_hub | |
| # ββ Install shellular globally ββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN npm config set prefix /root/.npm-global && \ | |
| npm install -g shellular | |
| # ββ App βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| WORKDIR /root/app | |
| COPY package*.json ./ | |
| RUN npm install --omit=dev | |
| COPY . . | |
| # ββ Runtime βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| EXPOSE 7860 | |
| ENV PORT=7860 | |
| CMD ["node", "app.js"] | |