# #region docker.frontend.Dockerfile [C:3] [TYPE Module] [SEMANTICS docker,frontend,build,nginx,ssl] # @BRIEF Frontend Dockerfile — сборка SvelteKit (node:20) + nginx runtime с опциональным SSL. # @LAYER Infrastructure # @RELATION DEPENDS_ON -> [EXT:path:docker/nginx.conf] # @RELATION DEPENDS_ON -> [EXT:path:docker/nginx.ssl.conf] # @RELATION DEPENDS_ON -> [EXT:path:docker/frontend.entrypoint.sh] # @RELATION DEPENDS_ON -> [EXT:path:frontend/package.json] # @PRE Docker builder context — корень проекта. frontend/ и docker/ доступны. # @POST nginx:alpine образ со статикой SvelteKit, entrypoint для выбора HTTP/SSL конфига. # #endregion docker.frontend.Dockerfile FROM node:20-alpine AS build ARG APP_VERSION=0.0.0 ENV APP_VERSION=${APP_VERSION} WORKDIR /app/frontend COPY frontend/package*.json ./ RUN npm ci --legacy-peer-deps COPY frontend/ ./ RUN npm run build FROM nginx:1.27-alpine # ca-certificates и openssl для установки корп. сертификатов и проверки SSL ключей RUN apk add --no-cache ca-certificates openssl # HTTP-only конфиг (по умолчанию) COPY docker/nginx.conf /docker/nginx.conf # SSL конфиг (активируется entrypoint при наличии сертификатов) COPY docker/nginx.ssl.conf /docker/nginx.ssl.conf # Entrypoint — установка CA-сертификатов, выбор HTTP/SSL конфига COPY docker/frontend.entrypoint.sh /docker/entrypoint.sh RUN chmod +x /docker/entrypoint.sh # Статика из сборки COPY --from=build /app/frontend/build /usr/share/nginx/html EXPOSE 80 443 ENTRYPOINT ["/docker/entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"]