Шаблон Контейнеризации Angular 6 Spa Приложения Asp .Net Core 2.1

ОБНОВЛЕНИЕ от 24 июля 2019 года смотрите в конце статьи.

ОБНОВЛЕНИЕ от 01.11.2018 { Благодаря помощи в комментариях ниже представлен более идеологически правильный вариант файла docker. В стандартном проекте шаблона Angular SPA обнаружена ошибка.

Разработчики в версии net .

core 2.1. удален из образа microsoft/dotnet:2.1-sdk, использовавшегося для сборки nodejs, но код, использующий его, остался в файле проекта.

Более подробная информация здесь github.com/aspnet/Announcements/issues/298 Вам необходимо вручную отредактировать файл проекта *.

csproj, удалив следующий код. Код для удаления из *.

csproj

  
  
  
  
  
  
  
   

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish"> <!-- As part of publishing, ensure the JS resources are freshly built in production mode --> <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " /> <!-- Include the newly-built files in the publish output --> <ItemGroup> <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" /> <DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" /> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <RelativePath>%(DistFiles.Identity)</RelativePath> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </ResolvedFileToPublish> </ItemGroup> </Target>

Правильный файл докеров

ARG NODE_IMAGE=node:8.12 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"] RUN dotnet restore "AngularWebApp/AngularWebApp.csproj" COPY .

.

WORKDIR "/src/AngularWebApp" FROM ${NODE_IMAGE} as node-build WORKDIR /src COPY AngularWebApp/ClientApp .

RUN npm install RUN npm run build -- --prod FROM build AS publish RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app .

COPY --from=node-build /src/dist .

/ClientApp/dist ENTRYPOINT ["dotnet", "AngularWebApp.dll"]

} К сожалению, готового решения мне нигде не удалось найти.

Мне пришлось собирать информацию из нескольких источников.

Чтобы запустить приложение в докере Angular 6/7 как проект ASP .

NET Core. Если мы включим поддержку Docker для проекта с приложением Angular стандартными средствами, файл Docker создаст образ приложения на основе образа microsoft/dotnet:2.1-aspnetcore-runtime. Этот базовый образ не включает сервер node.js. И результаты выполнения отобразят ошибку ASP .

NET Core.

An unhandled exception occurred while processing the request. The NPM script ‘start’ exited without indicating that the Angular CLI was listening for requests



Шаблон контейнеризации Angular 6 SPA Приложения ASP .
</p><p>
NET Core 2.1

Чтобы устранить эту ошибку, вам необходимо обновить файл Docker, добавив node.js и установку angular. Кроме того, поскольку разработка ведется под Windows, и все это запускается в Docker-контейнере на базе Ubuntu, то если используются файлы стилей scss или sass, то они компилируются Angular CLI с использованием node-sass, и при запуске выдает ошибка «Node Sass еще не поддерживает вашу текущую среду: 64-разрядную версию Windows с неподдерживаемой средой выполнения».

Вам необходимо выполнить команду:

npm rebuild node-sass

npm загрузит необходимые скрипты для текущей платформы и пересоберет CSS-файлы.

Окончательный файл Docker для приложения Angular, основанного на проекте ASP .

NET Core 2.1, выглядит следующим образом.



FROM microsoft/ dotnet:2.1-aspnetcore-runtime AS base # Setup NodeJs RUN apt-get update && \ apt-get install -y wget && \ apt-get install -y gnupg2 && \ wget -qO- https://deb.nodesource.com/setup_8.x | bash - && \ apt-get install -y build-essential nodejs RUN npm install @angular/cli -g # End setup WORKDIR /app EXPOSE 80 FROM microsoft/ dotnet:2.1-sdk AS build WORKDIR /src COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"] RUN dotnet restore "AngularWebApp/AngularWebApp.csproj" COPY .

.

WORKDIR "/src/AngularWebApp" RUN dotnet build "AngularWebApp.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app .

WORKDIR /app/ClientApp RUN npm install RUN npm rebuild node-sass WORKDIR /app ENTRYPOINT ["dotnet", "AngularWebApp.dll"]

Я использовал стабильную версию LTS Node.js, на данный момент 8.x, но вы можете сменить ее на любую более актуальную.

Кроме того, еще отмечу, что Windows прощает ошибки, связанные с разным регистром символов, а вот Linux этого не прощает. А проект, работавший во время разработки, откажется компилироваться в контейнере, выдав ошибку

docker ERROR in error TS1149: File name 'filename.ts' differs from already included file name 'FileNames.ts' only in casing

Чтобы избежать подобных ошибок на этапе компиляции, рекомендую добавить соответствующую опцию «forceConsistentCasingInFileNames»: true в файл tsconfig.json в разделе compilerOptions.

{ "compilerOptions": { "forceConsistentCasingInFileNames": true } } }

ОБНОВЛЕНИЕ от 24.07.2019 { Еще раз, спасибо за помощь в комментариях ниже оптимизированная версия докер-файла.

Оптимизированный файл докеров

ARG NODE_IMAGE=node:10.16.0 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build WORKDIR /src COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"] RUN dotnet restore "AngularWebApp/AngularWebApp.csproj" COPY .

.

WORKDIR "/src/AngularWebApp" RUN dotnet build "AngularWebApp.csproj" -c Release -o /app RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM ${NODE_IMAGE} as node-build WORKDIR /src COPY AngularWebApp/ClientApp .

RUN npm install RUN npm rebuild node-sass RUN npm run build -- --prod FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 80 COPY --from=build /app .

COPY --from=node-build /src/dist .

/ClientApp/dist ENTRYPOINT ["dotnet", "AngularWebApp.dll"]

} angular, angular6/7, asp.net core 2.1, докер Теги: #docker #.

NET #angular #angular 6 #asp .

net core 2.1

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.