diff --git a/.dockerignore b/.dockerignore index 20ebb32..9a627ba 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,18 @@ # Ignore everything * -# The stuff necessary to build the image +!Makefile + +# Backend stuff !app/ !setup.cfg !setup.py + +# Frontend stuff +!web/index.html +!web/src/ +!web/package.json +!web/yarn.lock +!web/tsconfig.json +!web/public/ +!web/vite.config.ts diff --git a/Dockerfile b/Dockerfile index 9b953d5..2d3542a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ +# Build backend wheels FROM python:3.9 AS builder WORKDIR /wheels @@ -7,6 +8,18 @@ COPY ./setup.cfg ./ RUN pip wheel -e . +# Build frontend +FROM node:16 AS fbuilder + +# Copy source code +WORKDIR /usr/src/app +COPY ./web ./web +COPY Makefile . + +# Build frontend +RUN make fbuild + + FROM python:3.9-slim # Switch to non-root user @@ -30,5 +43,11 @@ WORKDIR /usr/src/app COPY --chown=runner:runner ./app ./app COPY --chown=runner:runner setup.cfg setup.py ./ +# Copy frontend build +COPY \ + --from=fbuilder \ + --chown=runner:runner \ + /usr/src/app/web/dist ./dist + ENTRYPOINT ["python"] CMD ["app"] diff --git a/Makefile b/Makefile index 890d2d3..e8ccd25 100644 --- a/Makefile +++ b/Makefile @@ -87,3 +87,10 @@ ftest: node_modules fbuild: node_modules @ yarn --cwd '$(WEB_DIR)' build .PHONY: fbuild + + +# =====DOCKER===== +## Build image +dbuild: + @ DOCKER_BUILDKIT=1 docker build -t chewingbever/jos:dev . +.PHONY: image