Spaces:
Running
Running
| FROM python:3.11-slim-bookworm | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| ENV TZ=Etc/UTC | |
| ENV PORT=7860 | |
| ENV HOME=/home/coder | |
| ENV PIP_DISABLE_PIP_VERSION_CHECK=1 | |
| ENV PYTHONDONTWRITEBYTECODE=1 | |
| ENV PYTHONUNBUFFERED=1 | |
| ARG CODE_SERVER_VERSION=4.109.2 | |
| ARG KOTLIN_VERSION=1.9.25 | |
| ARG ANDROID_CMDLINE_TOOLS_VERSION=11076708 | |
| ARG ANDROID_PLATFORM=34 | |
| ARG ANDROID_BUILD_TOOLS=34.0.0 | |
| ENV KOTLIN_HOME=/opt/kotlin | |
| ENV ANDROID_SDK_ROOT=/opt/android-sdk | |
| ENV ANDROID_HOME=/opt/android-sdk | |
| ENV PATH="${PATH}:${KOTLIN_HOME}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools" | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| ca-certificates curl git bash sudo tini jq procps unzip \ | |
| # C/C++ toolchain + headers | |
| build-essential gcc g++ make cmake ninja-build gdb clang clangd \ | |
| libc6-dev linux-libc-dev pkg-config \ | |
| # Java + Node | |
| openjdk-17-jdk-headless maven \ | |
| nodejs npm \ | |
| # Databases | |
| default-mysql-server default-mysql-client \ | |
| postgresql postgresql-client \ | |
| redis-server redis-tools \ | |
| # Rust + Go | |
| rustc cargo rustfmt \ | |
| golang-go \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Install code-server (pinned version) | |
| RUN curl -fsSL "https://github.com/coder/code-server/releases/download/v${CODE_SERVER_VERSION}/code-server_${CODE_SERVER_VERSION}_amd64.deb" -o /tmp/code-server.deb \ | |
| && dpkg -i /tmp/code-server.deb \ | |
| && rm -f /tmp/code-server.deb | |
| # Kotlin compiler | |
| RUN curl -fsSL "https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_VERSION}/kotlin-compiler-${KOTLIN_VERSION}.zip" -o /tmp/kotlin.zip \ | |
| && unzip -q /tmp/kotlin.zip -d /opt \ | |
| && mv /opt/kotlinc "${KOTLIN_HOME}" \ | |
| && ln -s "${KOTLIN_HOME}/bin/kotlin" /usr/local/bin/kotlin \ | |
| && ln -s "${KOTLIN_HOME}/bin/kotlinc" /usr/local/bin/kotlinc \ | |
| && rm -f /tmp/kotlin.zip | |
| # Android SDK command-line tools + common packages | |
| RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \ | |
| && curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS_VERSION}_latest.zip" -o /tmp/android-tools.zip \ | |
| && unzip -q /tmp/android-tools.zip -d "${ANDROID_SDK_ROOT}/cmdline-tools" \ | |
| && mv "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" "${ANDROID_SDK_ROOT}/cmdline-tools/latest" \ | |
| && rm -f /tmp/android-tools.zip \ | |
| && yes | "${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager" --sdk_root="${ANDROID_SDK_ROOT}" --licenses \ | |
| && "${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager" --sdk_root="${ANDROID_SDK_ROOT}" \ | |
| "platform-tools" "platforms;android-${ANDROID_PLATFORM}" "build-tools;${ANDROID_BUILD_TOOLS}" | |
| # Python core deps | |
| RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \ | |
| pip install --no-cache-dir \ | |
| numpy pandas scipy scikit-learn matplotlib \ | |
| jupyterlab ipykernel notebook \ | |
| requests httpx aiohttp pyyaml python-dotenv tqdm rich \ | |
| fastapi uvicorn[standard] pydantic flask \ | |
| sqlalchemy alembic psycopg2-binary redis \ | |
| pytest black isort ruff mypy | |
| # Codex CLI | |
| RUN npm install -g @openai/codex && npm cache clean --force | |
| # Create user | |
| RUN useradd -m -u 1000 -s /bin/bash coder \ | |
| && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \ | |
| && mkdir -p /home/coder/.config/code-server /home/coder/.codex \ | |
| && chown -R coder:coder /home/coder /opt/kotlin /opt/android-sdk | |
| # Quick C build check (build-time) | |
| RUN printf '#include <stdio.h>\nint main(){puts("ok");return 0;}\n' > /tmp/t.c \ | |
| && gcc /tmp/t.c -o /tmp/t \ | |
| && /tmp/t | grep -q ok \ | |
| && rm -f /tmp/t.c /tmp/t | |
| COPY --chown=coder:coder start.sh /usr/local/bin/start.sh | |
| RUN chmod +x /usr/local/bin/start.sh | |
| USER coder | |
| WORKDIR /home/coder | |
| EXPOSE 7860 | |
| ENTRYPOINT ["/usr/bin/tini", "--"] | |
| CMD ["/usr/local/bin/start.sh"] | |