diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5bdd9f0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules +.forgejo +dist +.git +.env* +*.log +.DS_Store +coverage +.vite \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 3b74df8..d780e0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,33 @@ -FROM mkenney/npm:node-11-alpine +# ========== СТАДИЯ 1: СБОРКА ========== +FROM node:20-alpine AS builder -WORKDIR /web/app +WORKDIR /app +# Копируем зависимости +COPY package*.json ./ +RUN npm ci + +# Копируем исходники COPY . . -RUN npm install -RUN npm cache clean --force +# Сборка проекта +RUN npm run build -CMD ["npm", "run", "dev"] +# ========== СТАДИЯ 2: СЕРВЕР ========== +FROM nginx:alpine + +# Копируем собранные файлы из стадии 1 +COPY --from=builder /app/dist /usr/share/nginx/html + +# Конфиг для SPA (чтобы react-router работал) +RUN echo 'server { \ + listen 80; \ + location / { \ + root /usr/share/nginx/html; \ + try_files $uri $uri/ /index.html; \ + } \ +}' > /etc/nginx/conf.d/default.conf + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"]