########################################### # Этап 1: Сборщик (Builder) ########################################### FROM python:3.11.9-alpine as builder # Устанавливаем инструменты для компиляции (если нужны для некоторых пакетов) RUN apk add --no-cache \ gcc \ musl-dev \ libffi-dev \ && rm -rf /var/cache/apk/* 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 addgroup -g 1001 deploy && adduser -D -u 1001 -G deploy deploy WORKDIR /app # Копируем зависимости COPY --from=builder --chown=deploy:deploy /install /usr/local/lib/python3.11/site-packages # Создаем структуру папок RUN mkdir -p database logs voice_users && \ chown -R deploy:deploy /app # Копируем исходный код COPY --chown=deploy:deploy . . USER deploy # 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"]