# protobuf build FROM node:14-buster-slim as messages WORKDIR /usr/src COPY messages . RUN yarn install && yarn ts-proto # webpack build FROM node:14-buster-slim as builder WORKDIR /usr/src COPY front/yarn.lock front/package.json ./ RUN yarn install --ignore-engines COPY front . COPY --from=messages /usr/src/ts-proto-generated/protos src/Messages/ts-proto-generated RUN sed -i 's/import { Observable } from "rxjs";/import type { Observable } from "rxjs";/g' src/Messages/ts-proto-generated/messages.ts COPY --from=messages /usr/src/JsonMessages src/Messages/JsonMessages # passing arguments as environment ARG DEBUG_MODE ARG JITSI_URL ARG JITSI_PRIVATE_MODE ARG PUSHER_URL ARG ICON_URL ARG ADMIN_URL ARG STUN_SERVER ARG TURN_SERVER ARG TURN_USER ARG TURN_PASSWORD ARG MAX_PER_GROUP ARG MAX_USERNAME_LENGTH ARG PROFILE_URL ARG START_ROOM_URL ARG DISABLE_NOTIFICATIONS ARG SKIP_RENDER_OPTIMIZATIONS ARG OPID_LOGIN_SCREEN_PROVIDER # Removing the iframe.html file from the final image as this adds a XSS attack. # iframe.html is only in dev mode to circumvent a limitation RUN rm dist/iframe.html ENV NODE_ENV=production RUN ./templater.sh RUN \ DEBUG_MODE=$DEBUG_MODE \ JITSI_URL=$JITSI_URL \ JITSI_PRIVATE_MODE=$JITSI_PRIVATE_MODE \ PUSHER_URL=$PUSHER_URL \ ICON_URL=$ICON_URL \ ADMIN_URL=$ADMIN_URL \ STUN_SERVER=$STUN_SERVER \ TURN_SERVER=$TURN_SERVER \ TURN_USER=$TURN_USER \ TURN_PASSWORD=$TURN_PASSWORD \ MAX_PER_GROUP=$MAX_PER_GROUP \ MAX_USERNAME_LENGTH=$MAX_USERNAME_LENGTH \ PROFILE_URL=$PROFILE_URL \ START_ROOM_URL=$START_ROOM_URL \ DISABLE_NOTIFICATIONS=$DISABLE_NOTIFICATIONS \ SKIP_RENDER_OPTIMIZATIONS=$SKIP_RENDER_OPTIMIZATIONS \ OPID_LOGIN_SCREEN_PROVIDER=$OPID_LOGIN_SCREEN_PROVIDER \ yarn run build # final production image FROM nginx:mainline-alpine COPY front/nginx-vhost.conf /etc/nginx/conf.d/default.conf COPY --from=builder /usr/src/dist /usr/share/nginx/html