File size: 3,880 Bytes
5c97d4f 734da18 5c97d4f 734da18 5c97d4f 306f064 8b41fb2 62c365c 734da18 da5299c 62c365c 734da18 306f064 601f264 4e301fe 0287121 4e301fe da5299c d9dbba5 8b41fb2 566fd61 601f264 da5299c 306f064 0287121 da5299c 566fd61 0287121 dfbb180 2d1600f 4e301fe 734da18 5c97d4f 601f264 2d1600f 8b6715b 4e301fe 8b41fb2 4e301fe 8b41fb2 5a0b87c 4e301fe 8b41fb2 4e301fe 5c97d4f 5a0b87c 5c97d4f 2e54937 dd7d8f0 5a0b87c 4e301fe 306f064 4e301fe 734da18 8b41fb2 d348d04 | 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 | # CodeVerse: Cloud IDE & Emulator Platform
# Production Baseline: April 2026
# Optimized for Hugging Face Spaces (Debian Bookworm)
FROM docker.io/library/node:20-bookworm-slim@sha256:1e85773c98c31d4fe5b545e4cb17379e617b348832fb3738b22a08f68dec30f3
# 1. System Baseline & Environment Hygiene
ENV DEBIAN_FRONTEND=noninteractive
ENV PIP_ROOT_USER_ACTION=ignore
ENV PIP_BREAK_SYSTEM_PACKAGES=true
ENV NODE_OPTIONS="--max-old-space-size=4096"
# HF Spaces use UID 1000 (standard 'node' user)
ENV HOME=/home/node
ENV WORKSPACE_ROOT=/home/node/app/workspaces
ENV NEXT_TELEMETRY_DISABLED=1
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 python3-pip make g++ git git-lfs curl ca-certificates tar unzip bzip2 xz-utils procps net-tools iptables \
xvfb fluxbox novnc websockify libnss3 libatk-bridge2.0-0 libcups2 libgtk-3-0 \
&& rm -rf /var/lib/apt/lists/*
# Install Hugging Face CLI & code-server in a single hardening pass
# Install code-server globally (as root)
RUN curl -fsSL https://code-server.dev/install.sh | sh
# 2. Nix Installation (Hardened for Hugging Face 2026)
RUN mkdir -p /nix && chown node:node /nix && \
mkdir -p /etc/nix && echo "experimental-features = nix-command flakes" > /etc/nix/nix.conf && \
mkdir -p /home/node/.cache && \
chown -R node:node /home/node /nix /etc/nix
USER node
WORKDIR /home/node
SHELL ["/bin/bash", "-c"]
# Note: ulimit is set to the builder's maximum during install.
# If you see 'Stack size hard limit is 10485760...', this is an expected, benign warning
# on Hugging Face Spaces (10MB limit). Nix prefers 60MB but 10MB is sufficient for CodeVerse.
RUN export XDG_CACHE_HOME=/home/node/.cache && \
ulimit -s $(ulimit -Hs) 2>/dev/null || true && \
rm -rf /home/node/.nix-defexpr /home/node/.nix-profile /home/node/.nix-channels && \
curl -L https://nixos.org/nix/install | sh -s -- --no-daemon && \
. /home/node/.nix-profile/etc/profile.d/nix.sh && \
/home/node/.nix-profile/bin/nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs && \
/home/node/.nix-profile/bin/nix-channel --update
ENV PATH="/home/node/.local/bin:/home/node/.nix-profile/bin:/home/node/.nix-profile/sbin:/usr/local/bin:/usr/bin:${PATH}"
ENV NIX_PATH="nixpkgs=/home/node/.nix-defexpr/channels/nixpkgs"
# 3. Application Provisioning
USER root
RUN pip3 install --no-cache-dir --upgrade "huggingface_hub[cli]"
# Use Nix to install Cachix & HuggingFace Hub globally (for the container baseline)
RUN /home/node/.nix-profile/bin/nix profile add nixpkgs#cachix nixpkgs#python3Packages.huggingface-hub
RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
WORKDIR /home/node/app
# Copy package manifest first for better caching
COPY --chown=node:node package*.json ./
USER node
RUN npm install --no-audit --no-fund --quiet --legacy-peer-deps
# Copy rest of the application
USER root
COPY --chown=node:node . .
USER node
RUN npm run build
# 4. Runtime Hardening
# Pre-bake Nix Template Manifest for "Instant-On" (April 2026 Baseline)
RUN mkdir -p /home/node/.idx && \
echo '{"packages":["pkgs.nodejs","pkgs.go","pkgs.python3","pkgs.docker","pkgs.python3Packages.huggingface-hub"],"timestamp":"baked"}' > /home/node/.idx/baked-packages.json && \
chown -R node:node /home/node/.idx
ENV PORT=7860 \
NODE_ENV=production \
AUTH_SECRET="" \
TURSO_URL="" \
TURSO_AUTH_TOKEN="" \
HF_TOKEN="" \
HF_DATASET_ID="" \
OPENAI_API_KEY="" \
ANTHROPIC_API_KEY="" \
GOOGLE_GENERATIVE_AI_API_KEY="" \
MISTRAL_API_KEY=""
# Final Permissions Sync for persistence
USER root
RUN mkdir -p /home/node/app/workspaces /home/node/app/dist && \
chown -R node:node /home/node/app /home/node
USER node
# Authoritative Entrypoint for HF Spaces April 2026
CMD ["sh", "-c", "ulimit -s $(ulimit -Hs) 2>/dev/null || true && node dist/server.js"]
|