diff --git a/.dockerignore b/.dockerignore index 51d1670b..fe9c3334 100644 --- a/.dockerignore +++ b/.dockerignore @@ -31,3 +31,6 @@ db.sqlite3 .mypy_cache .pylint.d .pytest_cache + +# Frontend +node_modules diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index a6e7dd2e..f7576899 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -75,6 +75,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . + file: ./src/frontend/Dockerfile target: frontend-production build-args: DOCKER_USER=${{ env.DOCKER_USER }}:-1000 push: ${{ github.event_name != 'pull_request' }} @@ -107,7 +108,8 @@ jobs: name: Build and push uses: docker/build-push-action@v5 with: - context: ./src/frontend/ + context: . + file: ./src/frontend/Dockerfile target: y-webrtc-signaling build-args: DOCKER_USER=${{ env.DOCKER_USER }}:-1000 push: ${{ github.event_name != 'pull_request' }} diff --git a/Dockerfile b/Dockerfile index d1beb17e..fce18ac7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,55 +11,6 @@ RUN apt-get update && \ apt-get -y upgrade && \ rm -rf /var/lib/apt/lists/* -### ---- Front-end dependencies image ---- -FROM node:20 as frontend-deps - -WORKDIR /deps - -COPY ./src/frontend/package.json ./package.json -COPY ./src/frontend/yarn.lock ./yarn.lock -COPY ./src/frontend/apps/impress/package.json ./apps/impress/package.json -COPY ./src/frontend/packages/i18n/package.json ./packages/i18n/package.json -COPY ./src/frontend/packages/eslint-config-impress/package.json ./packages/eslint-config-impress/package.json - -RUN yarn --frozen-lockfile - -### ---- Front-end builder image ---- -FROM node:20 as frontend-builder-1 - -WORKDIR /builder - -COPY --from=frontend-deps /deps/node_modules ./node_modules -COPY ./src/frontend . - -WORKDIR /builder/apps/impress - -FROM frontend-builder-1 as frontend-builder-2 - -RUN yarn build - - -# ---- Front-end image ---- -FROM nginxinc/nginx-unprivileged:1.25 as frontend-production - -# Un-privileged user running the application -ARG DOCKER_USER -USER ${DOCKER_USER} - -COPY --from=frontend-builder-2 \ - /builder/apps/impress/out \ - /usr/share/nginx/html - -COPY ./src/frontend/apps/impress/conf/default.conf /etc/nginx/conf.d - -# Copy entrypoint -COPY ./docker/files/usr/local/bin/entrypoint /usr/local/bin/entrypoint - -ENTRYPOINT [ "/usr/local/bin/entrypoint" ] - -CMD ["nginx", "-g", "daemon off;"] - - # ---- Back-end builder image ---- FROM base as back-builder diff --git a/bin/Tiltfile b/bin/Tiltfile index b89aab0a..39a6b4fb 100644 --- a/bin/Tiltfile +++ b/bin/Tiltfile @@ -20,12 +20,11 @@ docker_build( docker_build( 'localhost:5001/impress-frontend:latest', context='..', - dockerfile='../Dockerfile', - build_args={'ENV': 'dev'}, - only=['./src/frontend', './src/mail', './docker'], - target = 'frontend-builder-1', + dockerfile='../src/frontend/Dockerfile', + only=['./src/frontend', './docker', './dockerignore'], + target = 'impress', live_update=[ - sync('../src/frontend', '/builder'), + sync('../src/frontend', '/home/frontend'), ] ) diff --git a/docker-compose.yml b/docker-compose.yml index bc93105a..7d5d7f0d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -120,7 +120,9 @@ services: y-webrtc-signaling: build: - context: ./src/frontend/ + context: . + dockerfile: ./src/frontend/Dockerfile + target: y-webrtc-signaling restart: unless-stopped ports: - "4444:4444" diff --git a/src/frontend/Dockerfile b/src/frontend/Dockerfile index f497af9b..b86243c8 100644 --- a/src/frontend/Dockerfile +++ b/src/frontend/Dockerfile @@ -1,17 +1,62 @@ -FROM node:20-alpine as y-webrtc-signaling +FROM node:20 as frontend-deps WORKDIR /home/frontend/ -COPY ./package.json . -COPY ./apps/y-webrtc-signaling/package.json ./apps/y-webrtc-signaling/ -COPY ./packages/eslint-config-impress/package.json ./packages/eslint-config-impress/ +COPY ./src/frontend/package.json ./package.json +COPY ./src/frontend/yarn.lock ./yarn.lock +COPY ./src/frontend/apps/impress/package.json ./apps/impress/package.json +COPY ./src/frontend/apps/y-webrtc-signaling/package.json ./apps/y-webrtc-signaling/package.json +COPY ./src/frontend/packages/i18n/package.json ./packages/i18n/package.json +COPY ./src/frontend/packages/eslint-config-impress/package.json ./packages/eslint-config-impress/package.json -RUN yarn install +RUN yarn install --frozen-lockfile -COPY . . +COPY ./src/frontend/ . + +# Copy entrypoint +COPY ./docker/files/usr/local/bin/entrypoint /usr/local/bin/entrypoint + +# ---- y-webrtc-signaling ---- +FROM frontend-deps as y-webrtc-signaling WORKDIR /home/frontend/apps/y-webrtc-signaling +RUN yarn build + +# Un-privileged user running the application +ARG DOCKER_USER +USER ${DOCKER_USER} + +ENTRYPOINT [ "/usr/local/bin/entrypoint" ] + +CMD ["yarn", "start"] + +### ---- Front-end builder image ---- +FROM frontend-deps as impress + +WORKDIR /home/frontend/apps/impress + +# Tilt will rebuild impress target so, we dissociate impress and impress-builder +# to avoid rebuilding the app at every changes. +FROM impress as impress-builder + +WORKDIR /home/frontend/apps/impress RUN yarn build -CMD ["yarn", "start"] \ No newline at end of file +# ---- Front-end image ---- +FROM nginxinc/nginx-unprivileged:1.25 as frontend-production + +# Un-privileged user running the application +ARG DOCKER_USER +USER ${DOCKER_USER} + +COPY --from=impress-builder \ + /home/frontend/apps/impress/out \ + /usr/share/nginx/html + +COPY ./src/frontend/apps/impress/conf/default.conf /etc/nginx/conf.d +COPY ./docker/files/usr/local/bin/entrypoint /usr/local/bin/entrypoint + +ENTRYPOINT [ "/usr/local/bin/entrypoint" ] + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file