Ctrl K
ComunidadGuías…

Dockerfile

Rama develop · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
ARG PYTHON_VERSION=3.14-bookworm

#=========== BASE STAGES =====================================================#

##---------- Python and essential packages -----------------------------------#

FROM python:$PYTHON_VERSION AS base

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    sudo \
    ca-certificates \
    curl \
    gnupg \
    gettext \
    locales \
    rsync \
    && rm -rf /var/lib/apt/lists/*

ENV MATHESAR_DOCKER_IMAGE='true'
ENV PYTHONUNBUFFERED=1

### Define Locale
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG=en_US.utf8

WORKDIR /code/


##---------- Base with code and build time deps ------------------------------#

FROM base AS build_deps

COPY . .

ENV NODE_MAJOR=18

### Install dev requirements
RUN pip install --no-cache-dir -r requirements-dev.txt

### Compile translation files
### We set a temporary secret key to avoid mounting a volume during buildtime.
RUN SECRET_KEY=temporary python manage.py compilemessages

### Add NodeJS signing key and source
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
    chmod 644 /etc/apt/keyrings/nodesource.gpg && \
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \
    | tee /etc/apt/sources.list.d/nodesource.list

### Install node
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    nodejs \
    && rm -rf /var/lib/apt/lists/*


#=========== DEV RELATED STAGES ==============================================#

##---------- Testing stage ---------------------------------------------------#

FROM base AS testing

COPY . .

RUN pip install --no-cache-dir -r requirements-dev.txt

EXPOSE 8000

CMD ["bash", "./bin/mathesar_dev"]


##---------- Development stage -----------------------------------------------#

FROM build_deps AS development

RUN cd mathesar_ui && npm ci && cd ..

EXPOSE 8000 3000 6006

CMD ["bash", "./bin/mathesar_dev"]


#=========== PRODUCTION STAGES ===============================================#

##---------- Pre-production packaging ----------------------------------------#

FROM build_deps AS pre_production

## Packages source files
RUN python3 ./build-scripts/package/package.py


##---------- Production base -------------------------------------------------#

FROM base AS production_base

### Copy packaged source files
COPY --from=pre_production /code/dist/mathesar.tar.gz ./

RUN tar -xzf mathesar.tar.gz && rm mathesar.tar.gz

RUN mkdir -p .media

RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 8000


##---------- Minimal prod setup ----------------------------------------------#

FROM production_base AS minimal

ENV DJANGO_SETTINGS_MODULE=config.settings.production
# Collect admin static assets so opt-in runtime admin has complete styling.
RUN SECRET_KEY=temporary MATHESAR_DJANGO_ADMIN_ENABLED=true python manage.py collectstatic --noinput
ENV SKIP_STATIC_COLLECTION=true

RUN groupadd --system --gid 1000 mathesar \
    && useradd  --system --uid 1000 --gid 1000 --shell /usr/sbin/nologin mathesar \
    && chown -R 1000:1000 /code
USER 1000:1000

### Do not include flags for Django setup and inbuilt db fallback
CMD ["bash", "./bin/mathesar", "run", "-ne"]


##---------- Prod setup ------------------------------------------------------#

FROM production_base AS production

ARG BUILD_PG_MAJOR=17
ENV PG_MAJOR=$BUILD_PG_MAJOR

RUN mkdir -p /etc/apt/keyrings;

### Add PostgreSQL signing key and source
RUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/keyrings/postgres.gpg && \
    chmod 644 /etc/apt/keyrings/postgres.gpg && \
    echo "deb [signed-by=/etc/apt/keyrings/postgres.gpg] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \
    > /etc/apt/sources.list.d/pgdg.list

### Install Postgres
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    postgresql-$PG_MAJOR postgresql-client-$PG_MAJOR postgresql-contrib-$PG_MAJOR \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENV PATH=$PATH:/usr/lib/postgresql/$PG_MAJOR/bin
ENV PGDATA=/var/lib/postgresql/mathesar

VOLUME /etc/postgresql/
VOLUME /var/lib/postgresql/

EXPOSE 5432

CMD ["bash", "./bin/mathesar", "run", "-fnse"]