# Peikarband Base Image # Pre-built image with Python, Node.js, bun, and build tools # # Usage: # Build: docker build -f docker/Dockerfile.base -t hub.peikarband.ir/peikarband/base:latest . # Or use Woodpecker: trigger .woodpecker-base.yml pipeline # # This image is built once and reused by all Peikarband projects ARG PYTHON_VERSION=3.11 ARG NODE_VERSION=20 FROM python:${PYTHON_VERSION}-slim LABEL maintainer="Peikarband Team " LABEL org.opencontainers.image.title="Peikarband Base" LABEL org.opencontainers.image.description="Base image with Python, Node.js, bun, and build tools" WORKDIR /build # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ make \ curl \ gnupg \ ca-certificates \ unzip \ git \ && rm -rf /var/lib/apt/lists/* # Install Node.js ARG NODE_VERSION RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* \ && npm config set fetch-retry-mintimeout 20000 \ && npm config set fetch-retry-maxtimeout 120000 \ && npm config set fetch-retries 5 \ && npm config set fetch-timeout 300000 \ && npm config set registry https://registry.npmjs.org/ # Install bun (required by Reflex for frontend build) # Retry mechanism for network issues RUN set -ex && \ for i in 1 2 3 4 5; do \ curl -fsSL https://bun.sh/install | bash && break || \ (echo "Attempt $i failed, retrying in 5 seconds..." && sleep 5); \ done || (echo "Failed to install bun after 5 attempts" && exit 1) # Add bun to PATH ENV PATH="/root/.bun/bin:${PATH}" # Upgrade pip, setuptools, wheel RUN pip install --no-cache-dir --upgrade pip setuptools wheel # Verify installations RUN python --version && \ node --version && \ npm --version && \ bun --version && \ pip --version # Set working directory WORKDIR /build # Default command CMD ["/bin/bash"]