adizvscode / Dockerfile
etsadiz's picture
Update Dockerfile
8a937d7 verified
# ==============================================
# Full-Stack Dev Environment for Hugging Face Spaces
# Python 3.12 + Node.js + code-server + Auto Backup
# ==============================================
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# -----------------------------
# Core tools + essentials
# -----------------------------
RUN apt-get update && apt-get install -y software-properties-common \
&& add-apt-repository -y ppa:apt-fast/stable \
&& apt-get update && apt-get -y install apt-fast \
&& echo "DOWNLOADBEFORE=true" | tee -a /etc/apt-fast.conf \
&& echo "MAXNUM=10" | tee -a /etc/apt-fast.conf \
&& echo "USE_PIGZ=1" | tee -a /etc/apt-fast.conf \
&& echo "APTFAST_PARA_OPTS=(--max-connection-per-server=12 --split=5)" | tee -a /etc/apt-fast.conf
RUN apt-fast update && apt-fast install -y \
curl wget git git-lfs unzip sudo nano bash apt-fast \
ca-certificates gnupg build-essential jq sqlite3 rsync pigz \
net-tools iputils-ping htop tree && rm -rf /var/lib/apt/lists/*
RUN git lfs install
# -----------------------------
# Python 3.12
# -----------------------------
RUN add-apt-repository ppa:deadsnakes/ppa -y && apt-fast update \
&& apt-fast install -y python3.12 python3.12-venv python3.12-dev \
&& curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12 \
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1 \
&& update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.12 1 \
&& update-alternatives --set python3 /usr/bin/python3.12
# -----------------------------
# Node.js + Yarn + PNPM
# -----------------------------
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-fast install -y nodejs \
&& npm install -g yarn pnpm typescript ts-node nodemon \
&& npm cache clean --force && rm -rf /var/lib/apt/lists/*
# -----------------------------
# PHP + Composer (optional)
# -----------------------------
RUN apt-fast update && apt-fast install -y php-cli unzip \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /var/lib/apt/lists/*
# -----------------------------
# VS Code Server
# -----------------------------
RUN curl -fsSL https://code-server.dev/install.sh | sh
# -----------------------------
# Workspace setup
# -----------------------------
WORKDIR /home/vscode
RUN mkdir -p /home/vscode/workspace
COPY --chmod=755 app.py /app.py
COPY --chmod=755 backup.py /backup.py
COPY --chmod=755 restore.py /restore.py
RUN sudo chmod -R 777 /home/vscode
# -----------------------------
# Python packages
# -----------------------------
RUN pip install --upgrade pip setuptools wheel && \
pip install --ignore-installed blinker && \
pip install --no-cache-dir \
huggingface_hub hf_transfer flask fastapi django uvicorn requests
# -----------------------------
# Locale + database clients
# -----------------------------
RUN apt-fast update && apt-fast install -y locales mysql-client postgresql-client redis-tools \
&& locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8 && rm -rf /var/lib/apt/lists/*
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# MongoDB tools
RUN wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/mongodb.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" \
| tee /etc/apt/sources.list.d/mongodb-org-7.0.list \
&& apt-fast update && apt-fast install -y mongodb-database-tools && rm -rf /var/lib/apt/lists/*
# -----------------------------
# Productivity tools
# -----------------------------
RUN apt-fast update && apt-fast install -y tmux screen neovim httpie shellcheck man-db manpages-dev && rm -rf /var/lib/apt/lists/*
# -----------------------------
# User setup
# -----------------------------
RUN useradd -ms /bin/bash vscode && echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER vscode
ENV PATH=$PATH:/home/vscode/.local/bin
# -----------------------------
# Environment defaults
# -----------------------------
ENV PORT=7860 \
BACKUP_INTERVAL=5 \
CONFIG_BACKUP_INTERVAL=60 \
CONFIG_KEEP_LIMIT=5 \
HF_HUB_ENABLE_HF_TRANSFER=1 \
PASSWORD=${PASSWORD:-dev12345}
# -----------------------------
# Entrypoint
# -----------------------------
VOLUME /home/vscode/workspace
ENTRYPOINT ["python3", "/app.py"]