50 lines
1.5 KiB
Docker
50 lines
1.5 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
FROM --platform=$BUILDPLATFORM node:24-alpine AS frontend
|
|
WORKDIR /source
|
|
COPY web/package.json web/package-lock.json ./web/
|
|
RUN npm --prefix web ci
|
|
COPY web/ ./web/
|
|
RUN npm --prefix web run build
|
|
|
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:10.0-alpine AS build
|
|
ARG TARGETARCH
|
|
WORKDIR /source
|
|
COPY .env.example ./
|
|
COPY src/Jiaowu.Api/Jiaowu.Api.csproj ./src/Jiaowu.Api/
|
|
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
|
|
arch="${TARGETARCH/amd64/x64}" && \
|
|
dotnet restore ./src/Jiaowu.Api/Jiaowu.Api.csproj --arch "$arch"
|
|
COPY src/Jiaowu.Api/ ./src/Jiaowu.Api/
|
|
COPY --from=frontend /source/src/Jiaowu.Api/wwwroot/ ./src/Jiaowu.Api/wwwroot/
|
|
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
|
|
arch="${TARGETARCH/amd64/x64}" && \
|
|
dotnet publish ./src/Jiaowu.Api/Jiaowu.Api.csproj \
|
|
--configuration Release \
|
|
--arch "$arch" \
|
|
--no-restore \
|
|
--no-self-contained \
|
|
--output /app/publish \
|
|
-p:BuildFrontendOnPublish=false \
|
|
-p:DebugSymbols=false \
|
|
-p:DebugType=None
|
|
|
|
FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine AS final
|
|
WORKDIR /app
|
|
ENV ASPNETCORE_ENVIRONMENT=Production \
|
|
ASPNETCORE_HTTP_PORTS=8080 \
|
|
DOTNET_EnableDiagnostics=0
|
|
EXPOSE 8080
|
|
COPY --from=build /app/publish/ ./
|
|
ARG UID=10001
|
|
RUN adduser \
|
|
--disabled-password \
|
|
--gecos "" \
|
|
--home "/nonexistent" \
|
|
--shell "/sbin/nologin" \
|
|
--no-create-home \
|
|
--uid "${UID}" \
|
|
appuser
|
|
USER appuser
|
|
ENTRYPOINT ["dotnet", "Jiaowu.Api.dll"]
|