FROM --platform=$BUILDPLATFORM tonistiigi/binfmt AS binfmt FROM python:3.12-slim # Set environment variables to non-interactive for apt ENV DEBIAN_FRONTEND=noninteractive ENV BUILD_TYPE=full SHELL [ "/bin/bash", "-c" ] 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 # 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 \ sudo lsof net-tools libpq-dev procps gettext # 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 COPY postgresql.conf /etc/postgresql/postgresql.conf RUN sudo -u postgres /usr/lib/postgresql/$POSTGRES_VERSION/bin/initdb -D /var/lib/postgresql/data # 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 && \ python -m pip install --upgrade pip && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Create Supervisor configuration file COPY supervisord-full-base /app/supervisord.conf COPY nginx.conf /etc/nginx/nginx.conf.template COPY env.sh /app/nginx-start.sh RUN chmod +x /app/nginx-start.sh # Expose ports for Redis, PostgreSQL, and MinIO EXPOSE 6379 5432 9000 80 443 # Start Supervisor CMD ["/usr/bin/supervisord", "-c", "/app/supervisord.conf"]