########################################### # Этап 1: Сборщик (Builder) ########################################### FROM python:3.11.9-alpine as builder # Устанавливаем инструменты для компиляции + linux-headers для psutil RUN apk add --no-cache \ gcc \ g++ \ musl-dev \ python3-dev \ linux-headers # ← ЭТО КРИТИЧЕСКИ ВАЖНО ДЛЯ psutil WORKDIR /app COPY requirements.txt . # Устанавливаем зависимости RUN pip install --no-cache-dir --target /install -r requirements.txt ########################################### # Этап 2: Финальный образ (Runtime) ########################################### FROM python:3.11.9-alpine as runtime # Минимальные рантайм-зависимости RUN apk add --no-cache \ libstdc++ \ sqlite-libs # Создаем пользователя RUN addgroup -g 1001 deploy && adduser -D -u 1001 -G deploy deploy WORKDIR /app # Копируем зависимости COPY --from=builder --chown=1001:1001 /install /usr/local/lib/python3.11/site-packages # Создаем структуру папок RUN mkdir -p database logs voice_users && \ chown -R 1001:1001 /app # Копируем исходный код COPY --chown=1001:1001 . . USER 1001 # Healthcheck HEALTHCHECK --interval=30s --timeout=15s --start-period=10s --retries=5 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8080/health', timeout=5)" || exit 1 EXPOSE 8080 CMD ["python", "-u", "run_helper.py"]