experimenter/app/Dockerfile

93 строки
2.7 KiB
Docker

# Dev image
FROM python:3.9 AS dev
WORKDIR /app
# Disable python pyc files
ENV PYTHONDONTWRITEBYTECODE 1
# Scripts for waiting for the db and setting up kinto
COPY bin/ /app/bin/
RUN chmod +x /app/bin/wait-for-it.sh
# Install nvm with node and npm
ENV NODE_VERSION=14.17.1
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
# System packages
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update
RUN apt-get --no-install-recommends install -y apt-utils ca-certificates postgresql-client yarn parallel
# Python packages
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
ENV PATH "/root/.poetry/bin:${PATH}"
RUN poetry config virtualenvs.create false
COPY poetry.lock pyproject.toml ./
RUN poetry install
# If any package is installed, that is incompatible by version, this command
# will exit non-zero and print what is usually just a warning in `poetry install`
RUN poetry check
# Node packages
COPY ./package.json /app/package.json
COPY ./yarn.lock /app/yarn.lock
COPY ./experimenter/legacy-ui/core/package.json /app/experimenter/legacy-ui/core/package.json
RUN yarn install --frozen-lockfile
COPY ./experimenter/nimbus-ui/package.json /app/experimenter/nimbus-ui/package.json
RUN yarn install --frozen-lockfile
FROM dev AS test
# Copy source
COPY . /app
# Build image
FROM dev AS build
# Build assets
COPY ./experimenter/legacy-ui/ /app/experimenter/legacy-ui/
COPY ./experimenter/nimbus-ui/ /app/experimenter/nimbus-ui/
RUN yarn workspace @experimenter/core build
RUN yarn workspace @experimenter/nimbus-ui build
# Deploy image
FROM python:3.9-slim AS deploy
WORKDIR /app
EXPOSE 7001
# Disable python pyc files
ENV PYTHONDONTWRITEBYTECODE 1
# Add poetry to path
ENV PATH "/root/.poetry/bin:${PATH}"
RUN apt-get update
RUN apt-get --no-install-recommends install -y apt-utils ca-certificates postgresql-client
COPY --from=dev /usr/local/bin/ /usr/local/bin/
COPY --from=dev /usr/local/lib/python3.9/site-packages/ /usr/local/lib/python3.9/site-packages/
COPY --from=dev /app/bin/ /app/bin/
COPY ./manage.py /app/manage.py
COPY ./experimenter/ /app/experimenter/
COPY --from=build /app/experimenter/legacy-ui/assets/ /app/experimenter/legacy-ui/assets/
COPY --from=build /app/experimenter/nimbus-ui/build/ /app/experimenter/nimbus-ui/build/