Spaces:
Running
Running
# Этап 1: Сборка фронтенда | |
FROM node:20-alpine AS builder | |
WORKDIR /app | |
COPY package.json package-lock.json* ./ | |
RUN npm ci | |
COPY . ./ | |
ARG VITE_API_BASE_URL=/api | |
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL | |
RUN npm run build | |
# Этап 2: Финальный образ с Nginx | |
FROM nginx:alpine | |
USER root # Запускаем от root, чтобы корректно настроить права | |
# Создаём непривилегированного пользователя | |
RUN adduser -D -u 1000 -s /bin/sh pn | |
# Создаём нужные директории и устанавливаем права | |
RUN mkdir -p /var/cache/nginx \ | |
/var/log/nginx \ | |
/var/lib/nginx \ | |
/var/run \ | |
/tmp/nginx/client_temp \ | |
/tmp/nginx/proxy_temp \ | |
/tmp/nginx/fastcgi_temp \ | |
/tmp/nginx/uwsgi_temp \ | |
/tmp/nginx/scgi_temp | |
RUN touch /var/run/nginx.pid | |
# Даём права на директории, чтобы Nginx мог их использовать | |
RUN chown -R pn:pn /var/cache/nginx \ | |
/var/log/nginx \ | |
/var/lib/nginx \ | |
/var/run/nginx.pid \ | |
/tmp/nginx | |
USER pn # Запускаем Nginx от пользователя pn | |
ENV HOME=/home/pn \ | |
PATH=/home/pn/.local/bin:$PATH | |
RUN mkdir -p $HOME/app | |
WORKDIR $HOME/app | |
# Копируем собранные файлы фронтенда | |
COPY --chown=pn --from=builder /app/dist . | |
# Копируем конфигурацию Nginx | |
COPY --chown=pn devops/nginx.default.conf /etc/nginx/conf.d/default.conf | |
# Открываем порт 7860 | |
EXPOSE 7860 | |
# Запускаем Nginx | |
CMD ["nginx", "-g", "daemon off;"] | |