diff --git a/backend/Dockerfile b/backend/Dockerfile.api similarity index 55% rename from backend/Dockerfile rename to backend/Dockerfile.api index a613c11c2..98827650f 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile.api @@ -1,23 +1,16 @@ -FROM node:14.11.0 AS development - +FROM node:14.11.0 AS api-development RUN mkdir /srv/backend && chown node:node /srv/backend - WORKDIR /srv/backend - USER node - COPY --chown=node:node package.json yarn.lock ./ - RUN yarn install --silent - RUN mkdir -p node_modules -FROM node:14.11.0-slim AS production - +FROM node:14.11.0-slim AS api-production +EXPOSE 4000 USER node - WORKDIR /srv/backend - -COPY --from=development --chown=root:root /srv/backend/node_modules ./node_modules - +COPY --from=api-development /srv/backend/node_modules ./node_modules COPY . . +CMD ["npm", "run", "dev"] + diff --git a/client/Dockerfile b/client/Dockerfile deleted file mode 100644 index 4f1d6ddd1..000000000 --- a/client/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM node:14.11.0 AS development - -RUN mkdir /srv/client && chown node:node /srv/client - -WORKDIR /srv/client - -USER node - -COPY --chown=node:node package.json yarn.lock ./ - -RUN yarn install --silent - -RUN mkdir -p node_modules - -# # TODO: Fix production application. We are currently serving static frontend assets from the backend. -# FROM node:14.11.0-slim AS production - -# USER node - -# WORKDIR /srv/client - -# COPY --from=development --chown=root:root /srv/backend/.env /srv/backend -# COPY --from=development --chown=root:root /srv/client/.env /srv/backend - -# COPY . . - -# CMD ["node", "index.js"] diff --git a/client/Dockerfile.client b/client/Dockerfile.client new file mode 100644 index 000000000..5efa15117 --- /dev/null +++ b/client/Dockerfile.client @@ -0,0 +1,21 @@ +FROM node:14.11.0 AS client-development +RUN mkdir /srv/client && chown node:node /srv/client +WORKDIR /srv/client +USER node +RUN mkdir -p node_modules +COPY --chown=node:node package.json yarn.lock ./ +RUN yarn install --silent + +FROM node:14.11.0-slim AS client-builder +USER node +WORKDIR /srv/client +COPY --from=client-development /srv/client/node_modules node_modules +COPY . . +USER root +RUN npm run build + +FROM nginx as client-production +EXPOSE 3000 +COPY /nginx/default.conf /etc/nginx/conf.d/default.conf +COPY --from=client-builder /srv/client/build /usr/share/nginx/html/ +CMD ["nginx", "-g", "daemon off;"] diff --git a/client/nginx/default.conf b/client/nginx/default.conf new file mode 100644 index 000000000..7f78094f6 --- /dev/null +++ b/client/nginx/default.conf @@ -0,0 +1,9 @@ +server { + + listen 3000; + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } +} diff --git a/docker-compose.yml b/docker-compose.yml index b12581169..5d7eb1077 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,8 @@ services: backend: build: context: ./backend - target: development + dockerfile: Dockerfile.api + target: api-development command: yarn run dev volumes: - ./backend:/srv/backend @@ -22,7 +23,8 @@ services: client: build: context: ./client - target: development + dockerfile: Dockerfile.client + target: client-development command: yarn run start volumes: - ./client:/srv/client