From fcff8e45aa077f046c4318496e84df1617ea6d1d Mon Sep 17 00:00:00 2001 From: eiximenis Date: Tue, 12 Jun 2018 19:05:51 +0200 Subject: [PATCH] Fixes #630 --- cli-windows/start-windows-containers.ps1 | 4 +- docker-compose-windows.yml | 138 ------------------ docker-compose.override.windows.yml | 9 +- docker-compose.override.yml | 9 +- docker-compose.windows.yml | 39 +++++ docker-compose.yml | 8 +- docker-scripts/linux/install-node.sh | 8 + docker-scripts/win/install-node.cmd | 4 + src/Services/Identity/Identity.API/Dockerfile | 24 ++- .../Identity/Identity.API/Identity.API.csproj | 1 - src/Web/WebMVC/Dockerfile | 24 ++- src/Web/WebMVC/WebMVC.csproj | 1 - src/Web/WebSPA/Dockerfile | 28 ++-- src/Web/WebSPA/WebSPA.csproj | 10 -- 14 files changed, 97 insertions(+), 210 deletions(-) delete mode 100644 docker-compose-windows.yml create mode 100644 docker-compose.windows.yml create mode 100644 docker-scripts/linux/install-node.sh create mode 100644 docker-scripts/win/install-node.cmd diff --git a/cli-windows/start-windows-containers.ps1 b/cli-windows/start-windows-containers.ps1 index 85a182603..e89a89066 100644 --- a/cli-windows/start-windows-containers.ps1 +++ b/cli-windows/start-windows-containers.ps1 @@ -25,8 +25,8 @@ $env:ESHOP_AZURE_STORAGE_CATALOG_URL ="http://10.0.75.1:5101/api/v1/catalog/item $env:ESHOP_AZURE_STORAGE_MARKETING_URL ="http://10.0.75.1:5110/api/v1/campaigns/[0]/pic/" if (-Not $customEventBusLoginPassword) { - docker-compose -f "$rootPath\docker-compose-windows.yml" -f "$rootPath\docker-compose.override.yml" -f "$rootPath\docker-compose.override.windows.yml" up + docker-compose -f "$rootPath\docker-compose.yml" -f "$rootPath\docker-compose.override.yml" -f "$rootPath\docker-compose.windows.yml" -f "$rootPath\docker-compose.override.windows.yml" up } else { - docker-compose -f "$rootPath\docker-compose-windows.yml" -f "$rootPath\docker-compose.override.yml" up + docker-compose -f "$rootPath\docker-compose.yml" -f "$rootPath\docker-compose.override.yml" -f "$rootPath\docker-compose.windows.yml" up } diff --git a/docker-compose-windows.yml b/docker-compose-windows.yml deleted file mode 100644 index cdcd6f56b..000000000 --- a/docker-compose-windows.yml +++ /dev/null @@ -1,138 +0,0 @@ -version: '3.4' - -services: - basket.api: - image: eshop/basket.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Basket/Basket.API/Dockerfile - depends_on: - - basket.data - - identity.api - - rabbitmq - - catalog.api: - image: eshop/catalog.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Catalog/Catalog.API/Dockerfile - depends_on: - - sql.data - - rabbitmq - - identity.api: - image: eshop/identity.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Identity/Identity.API/Dockerfile - depends_on: - - sql.data - - ordering.api: - image: eshop/ordering.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Ordering/Ordering.API/Dockerfile - depends_on: - - sql.data - - rabbitmq - - ordering.backgroundtasks: - image: eshop/ordering.backgroundtasks-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile - depends_on: - - sql.data - - rabbitmq - - ordering.signalrhub: - image: eshop/ordering.signalrhub:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Ordering/Ordering.SignalrHub/Dockerfile - depends_on: - - sql.data - - identity.api - - rabbitmq - - marketing.api: - image: eshop/marketing.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Marketing/Marketing.API/Dockerfile - depends_on: - - sql.data - - nosql.data - - identity.api - - rabbitmq - - webspa: - image: eshop/webspa-win:${TAG:-latest} - build: - context: . - dockerfile: src/Web/WebSPA/Dockerfile - depends_on: - - catalog.api - - ordering.api - - identity.api - - basket.api - - marketing.api - - webmvc: - image: eshop/webmvc-win:${TAG:-latest} - build: - context: . - dockerfile: src/Web/WebMVC/Dockerfile - depends_on: - - catalog.api - - ordering.api - - identity.api - - basket.api - - marketing.api - - webstatus: - image: eshop/webstatus-win:${TAG:-latest} - build: - context: . - dockerfile: src/Web/WebStatus/Dockerfile - - payment.api: - image: eshop/payment.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Payment/Payment.API/Dockerfile - depends_on: - - rabbitmq - - locations.api: - image: eshop/locations.api-win:${TAG:-latest} - build: - context: . - dockerfile: src/Services/Location/Locations.API/Dockerfile - depends_on: - - nosql.data - - rabbitmq - - sql.data: - image: microsoft/mssql-server-windows-developer - - nosql.data: - image: mongo:windowsservercore - - basket.data: - image: redis:nanoserver - ports: - - "6379:6379" - - rabbitmq: - image: spring2/rabbitmq - ports: - - "15672:15672" - - "5672:5672" - -networks: - default: - external: - name: nat - diff --git a/docker-compose.override.windows.yml b/docker-compose.override.windows.yml index 0d31493e6..dcaac7c45 100644 --- a/docker-compose.override.windows.yml +++ b/docker-compose.override.windows.yml @@ -37,11 +37,6 @@ services: - EventBusUserName=admin - EventBusPassword=password - ordering.api: - environment: - - EventBusUserName=admin - - EventBusPassword=password - ordering.backgroundtasks: environment: - EventBusUserName=admin @@ -58,6 +53,6 @@ services: - EventBusPassword=password ordering.signalrhub: - environment: + environment: - EventBusUserName=admin - - EventBusPassword=password \ No newline at end of file + - EventBusPassword=password diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 98ad11c62..dcdaff236 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -252,8 +252,7 @@ services: ports: - "5200:80" volumes: - - ./src/ApiGateways/Mobile.Bff.Shopping/apigw:/app/configuration - + - ./src/ApiGateways/Mobile.Bff.Shopping/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration} mobilemarketingapigw: environment: - ASPNETCORE_ENVIRONMENT=Development @@ -261,7 +260,7 @@ services: ports: - "5201:80" volumes: - - ./src/ApiGateways/Mobile.Bff.Marketing/apigw:/app/configuration + - ./src/ApiGateways/Mobile.Bff.Marketing/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration} webshoppingapigw: environment: @@ -270,7 +269,7 @@ services: ports: - "5202:80" volumes: - - ./src/ApiGateways/Web.Bff.Shopping/apigw:/app/configuration + - ./src/ApiGateways/Web.Bff.Shopping/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration} webmarketingapigw: environment: @@ -279,7 +278,7 @@ services: ports: - "5203:80" volumes: - - ./src/ApiGateways/Web.Bff.Marketing/apigw:/app/configuration + - ./src/ApiGateways/Web.Bff.Marketing/apigw:${ESHOP_OCELOT_VOLUME_SPEC:-/app/configuration} mobileshoppingagg: environment: diff --git a/docker-compose.windows.yml b/docker-compose.windows.yml new file mode 100644 index 000000000..4b2eb1a9b --- /dev/null +++ b/docker-compose.windows.yml @@ -0,0 +1,39 @@ +# This file contains specific services build and images for Windows Containers. +# +# MUST be used alongside "docker-compose.yml" in all windows container commands + +version: '3.4' + +services: + identity.api: + build: + args: + NODE_IMAGE: stefanscherer/node-windows:8.11 + + webmvc: + build: + args: + NODE_IMAGE: stefanscherer/node-windows:8.11 + + webspa: + build: + args: + NODE_IMAGE: stefanscherer/node-windows:8.11 + + sql.data: + image: microsoft/mssql-server-windows-developer + + nosql.data: + image: mongo:windowsservercore + + basket.data: + image: redis:nanoserver + + rabbitmq: + image: spring2/rabbitmq + + +networks: + default: + external: + name: nat \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 67879bcd7..097643a3c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -202,10 +202,10 @@ services: build: context: . dockerfile: src/Web/WebSPA/Dockerfile - depends_on: - - webshoppingagg - - webshoppingapigw - - webmarketingapigw +# depends_on: +# - webshoppingagg +# - webshoppingapigw +# - webmarketingapigw webmvc: diff --git a/docker-scripts/linux/install-node.sh b/docker-scripts/linux/install-node.sh new file mode 100644 index 000000000..73407aae9 --- /dev/null +++ b/docker-scripts/linux/install-node.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +export NODE_DOWNLOAD_SHA 0e20787e2eda4cc31336d8327556ebc7417e8ee0a6ba0de96a09b0ec2b841f60 +curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz \ + && echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c - \ + && tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \ + && rm nodejs.tar.gz \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs diff --git a/docker-scripts/win/install-node.cmd b/docker-scripts/win/install-node.cmd new file mode 100644 index 000000000..eaa4e356c --- /dev/null +++ b/docker-scripts/win/install-node.cmd @@ -0,0 +1,4 @@ +set NODE_VERSION=8.11.1 +curl -SL "https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-win-x64.zip" --output nodejs.zip +tar -xf nodejs.zip -C c:\ +setx PATH "%PATH%;c:\node-v%NODE_VERSION%-win-x64" \ No newline at end of file diff --git a/src/Services/Identity/Identity.API/Dockerfile b/src/Services/Identity/Identity.API/Dockerfile index 167b2bb25..3931a135b 100644 --- a/src/Services/Identity/Identity.API/Dockerfile +++ b/src/Services/Identity/Identity.API/Dockerfile @@ -1,22 +1,20 @@ +ARG NODE_IMAGE=node:8.11 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 -FROM microsoft/dotnet:2.1-sdk AS sdk-with-node -ENV NODE_VERSION 8.11.1 -ENV NODE_DOWNLOAD_SHA 0e20787e2eda4cc31336d8327556ebc7417e8ee0a6ba0de96a09b0ec2b841f60 -RUN curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz \ - && echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c - \ - && tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \ - && rm nodejs.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs - -FROM sdk-with-node AS updated-npm -RUN npm i -g npm - +FROM microsoft/dotnet:2.1-sdk as dotnet-build +WORKDIR /src -FROM updated-npm as build +FROM ${NODE_IMAGE} as node-build +WORKDIR /web +COPY src/Services/Identity/Identity.API . RUN npm install -g bower@1.8.4 +RUN bower install --allow-root + +FROM dotnet-build as build +WORKDIR /src/src/Services/Identity/Identity.API/wwwroot +COPY --from=node-build /web/wwwroot . WORKDIR /src COPY . . WORKDIR /src/src/Services/Identity/Identity.API diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index ca31685ab..cf4c39568 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -27,7 +27,6 @@ - diff --git a/src/Web/WebMVC/Dockerfile b/src/Web/WebMVC/Dockerfile index bf104e83b..9847ad772 100644 --- a/src/Web/WebMVC/Dockerfile +++ b/src/Web/WebMVC/Dockerfile @@ -1,26 +1,24 @@ +ARG NODE_IMAGE=node:8.11 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 -FROM microsoft/dotnet:2.1-sdk AS sdk-with-node -ENV NODE_VERSION 8.11.1 -ENV NODE_DOWNLOAD_SHA 0e20787e2eda4cc31336d8327556ebc7417e8ee0a6ba0de96a09b0ec2b841f60 -RUN curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz \ - && echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c - \ - && tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \ - && rm nodejs.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs - -FROM sdk-with-node AS updated-npm -RUN npm i -g npm +FROM microsoft/dotnet:2.1-sdk as dotnet-build +WORKDIR /src -FROM updated-npm as build +FROM ${NODE_IMAGE} as node-build +WORKDIR /web +COPY src/Web/WebMVC . RUN npm install -g bower@1.8.4 +RUN bower install --allow-root + +FROM dotnet-build as build +WORKDIR /src/src/Web/WebMVC/wwwroot +COPY --from=node-build /web/wwwroot . WORKDIR /src COPY . . WORKDIR /src/src/Web/WebMVC RUN dotnet restore -nowarn:msb3202,nu1503 -RUN dotnet build --no-restore -c Release -o /app FROM build AS publish RUN dotnet publish --no-restore -c Release -o /app diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index cc5b975b3..1426517d3 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -31,7 +31,6 @@ - diff --git a/src/Web/WebSPA/Dockerfile b/src/Web/WebSPA/Dockerfile index 68cf0988b..4e806786c 100644 --- a/src/Web/WebSPA/Dockerfile +++ b/src/Web/WebSPA/Dockerfile @@ -1,28 +1,24 @@ +ARG NODE_IMAGE=node:8.11 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 -FROM microsoft/dotnet:2.1-sdk AS sdk-with-node -ENV NODE_VERSION 8.11.1 -ENV NODE_DOWNLOAD_SHA 0e20787e2eda4cc31336d8327556ebc7417e8ee0a6ba0de96a09b0ec2b841f60 -RUN curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz \ - && echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c - \ - && tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \ - && rm nodejs.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +FROM microsoft/dotnet:2.1-sdk as dotnet-build +WORKDIR /src -FROM sdk-with-node AS updated-npm -RUN npm i -g npm +FROM ${NODE_IMAGE} as node-build +WORKDIR /web +COPY src/Web/WebSPA . +RUN npm install +RUN npm run build:prod -FROM updated-npm as build +FROM dotnet-build as publish +WORKDIR /src/src/Web/WebSPA/wwwroot +COPY --from=node-build /web/wwwroot . WORKDIR /src COPY . . WORKDIR /src/src/Web/WebSPA -RUN dotnet restore -nowarn:msb3202,nu1503 -RUN dotnet build --no-restore -c Release -o /app - -FROM build AS publish -RUN dotnet publish --no-restore -c Release -o /app +RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app diff --git a/src/Web/WebSPA/WebSPA.csproj b/src/Web/WebSPA/WebSPA.csproj index 8d390cfc4..3f6e188c3 100644 --- a/src/Web/WebSPA/WebSPA.csproj +++ b/src/Web/WebSPA/WebSPA.csproj @@ -94,16 +94,6 @@ - - - - - - <_GeneratedFiles Include="$(GeneratedItemPatterns)" /> - - - -