# --- Этап 1: Сборка --- FROM node:20 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . # Сборка фронтенда (Vite) RUN npm run build # Сборка сервера с помощью esbuild (игнорируя ошибки типов) # Мы помечаем зависимости как 'external', чтобы они не вшивались в один файл, # так как мы все равно сделаем npm install в финальном образе. RUN npx esbuild server.ts --bundle --platform=node --format=esm --outfile=dist/server.js --external:express --external:socket.io --external:vite --external:mineflayer --external:mineflayer-pathfinder --external:@google/genai # --- Этап 2: Запуск --- FROM node:20-slim WORKDIR /app # Копируем зависимости COPY --from=builder /app/package*.json ./ # Устанавливаем зависимости для работы сервера RUN npm install --omit=dev # Копируем билд фронта и скомпилированный сервер COPY --from=builder /app/dist ./dist # Настройка прав RUN chown -R 1000:1000 /app USER 1000 ENV NODE_ENV=production ENV PORT=7860 EXPOSE 7860 # Запускаем готовый JS CMD ["node", "dist/server.js"]