diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 5914b38..09b5ef2 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -16,34 +16,30 @@ WORKDIR /app COPY . . RUN npm run build -# --- novnc: скачиваем noVNC напрямую с GitHub release --- +# --- runtime: nginx + артефакты Vite + noVNC (всё в одном stage) --- +# Качаем noVNC и распаковываем прямо здесь, одним RUN — проще и +# устойчивее к кэшу, чем отдельный stage + COPY. +FROM nginx:1.27-alpine + +ARG NOVNC_VERSION=1.4.0 + +# Установка curl ради скачивания, потом удаляем чтобы не раздувать образ. # BusyBox tar в Alpine не умеет читать gzip из stdin-пайпа, поэтому # сначала скачиваем архив в файл, потом распаковываем с явным -z. -FROM alpine:3.20 AS novnc -ARG NOVNC_VERSION=1.4.0 RUN apk add --no-cache curl \ && curl -fsSL -o /tmp/novnc.tar.gz \ "https://github.com/novnc/noVNC/archive/refs/tags/v${NOVNC_VERSION}.tar.gz" \ - && mkdir -p /out \ - && tar -xzf /tmp/novnc.tar.gz --strip-components=1 -C /out \ + && mkdir -p /usr/share/nginx/html/novnc \ + && tar -xzf /tmp/novnc.tar.gz --strip-components=1 -C /usr/share/nginx/html/novnc \ && rm /tmp/novnc.tar.gz \ && apk del curl -# --- runtime: nginx + артефакты Vite + noVNC --- -FROM nginx:1.27-alpine - # Конфигурация nginx. COPY nginx.conf /etc/nginx/conf.d/default.conf # Собранный фронтенд. COPY --from=build /app/dist /usr/share/nginx/html -# noVNC: копируем из отдельного novnc-stage в /usr/share/nginx/html/novnc/. -# Берём только нужные подпапки (lib + package.json), чтобы не раздувать образ -# лишними тестами, докой и CI-скриптами из upstream-репозитория. -COPY --from=novnc /out/lib /usr/share/nginx/html/novnc/lib -COPY --from=novnc /out/package.json /usr/share/nginx/html/novnc/package.json - # В нашем nginx.conf прописан listen 5173 — порт публикует compose. EXPOSE 5173