FROM --platform=$BUILDPLATFORM tonistiigi/binfmt as binfmt FROM debian:12-slim # Set environment variables to non-interactive for apt ENV DEBIAN_FRONTEND=noninteractive SHELL [ "/bin/bash", "-c" ] # Update the package list and install prerequisites RUN apt-get update && \ apt-get install -y \ gnupg2 curl ca-certificates lsb-release software-properties-common \ build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \ libsqlite3-dev wget llvm libncurses5-dev libncursesw5-dev xz-utils \ tk-dev libffi-dev liblzma-dev supervisor nginx nano vim ncdu # Install Redis 7.2 RUN echo "deb http://deb.debian.org/debian $(lsb_release -cs)-backports main" > /etc/apt/sources.list.d/backports.list && \ curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg && \ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" > /etc/apt/sources.list.d/redis.list && \ apt-get update && \ apt-get install -y redis-server # Install PostgreSQL 15 ENV POSTGRES_VERSION 15 RUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/pgdg-archive-keyring.gpg && \ echo "deb [signed-by=/usr/share/keyrings/pgdg-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \ apt-get update && \ apt-get install -y postgresql-$POSTGRES_VERSION postgresql-client-$POSTGRES_VERSION && \ mkdir -p /var/lib/postgresql/data && \ chown -R postgres:postgres /var/lib/postgresql # Install MinIO ARG TARGETARCH RUN if [ "$TARGETARCH" = "amd64" ]; then \ curl -fSl https://dl.min.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio; \ elif [ "$TARGETARCH" = "arm64" ]; then \ curl -fSl https://dl.min.io/server/minio/release/linux-arm64/minio -o /usr/local/bin/minio; \ else \ echo "Unsupported architecture: $TARGETARCH"; exit 1; \ fi && \ chmod +x /usr/local/bin/minio # Install Node.js 18 RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y nodejs # Install Python 3.12 from source RUN cd /usr/src && \ wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz && \ tar xzf Python-3.12.0.tgz && \ cd Python-3.12.0 && \ ./configure --enable-optimizations && \ make altinstall && \ rm -f /usr/src/Python-3.12.0.tgz RUN python3.12 -m pip install --upgrade pip RUN echo "alias python=/usr/local/bin/python3.12" >> ~/.bashrc && \ echo "alias pip=/usr/local/bin/pip3.12" >> ~/.bashrc # Clean up RUN apt-get clean && \ rm -rf /var/lib/apt/lists/* /usr/src/Python-3.12.0 WORKDIR /app RUN mkdir -p /app/{data,logs} && \ mkdir -p /app/data/{redis,pg,minio,nginx} && \ mkdir -p /app/logs/{access,error} && \ mkdir -p /etc/supervisor/conf.d # Create Supervisor configuration file COPY supervisord.base /app/supervisord.conf RUN apt-get update && \ apt-get install -y sudo lsof net-tools libpq-dev procps gettext && \ apt-get clean RUN sudo -u postgres /usr/lib/postgresql/$POSTGRES_VERSION/bin/initdb -D /var/lib/postgresql/data COPY postgresql.conf /etc/postgresql/postgresql.conf RUN echo "alias python=/usr/local/bin/python3.12" >> ~/.bashrc && \ echo "alias pip=/usr/local/bin/pip3.12" >> ~/.bashrc # Expose ports for Redis, PostgreSQL, and MinIO EXPOSE 6379 5432 9000 80 # Start Supervisor CMD ["/usr/bin/supervisord", "-c", "/app/supervisord.conf"]