# Используем официальный образ Python 3.10 FROM python:3.10-slim # --- Шаг 1: Установка системных зависимостей и FFMPEG от имени ROOT --- # Устанавливаем утилиты для скачивания, распаковки и mediainfo. RUN apt-get update && apt-get install -y \ curl \ build-essential \ pkg-config \ libssl-dev \ git \ wget \ xz-utils \ mediainfo \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Скачиваем и устанавливаем последнюю статическую сборку FFmpeg RUN FFMPEG_URL="https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.1-latest-linux64-gpl-7.1.tar.xz" && \ wget "$FFMPEG_URL" -O ffmpeg.tar.xz && \ tar -xf ffmpeg.tar.xz && \ mv ./ffmpeg-n7.1-latest-linux64-gpl-7.1/bin/* /usr/local/bin/ && \ rm -rf ffmpeg.tar.xz ffmpeg-n7.1-latest-linux64-gpl-7.1 # --- Шаг 2: Создание и переключение на пользователя 'user' --- RUN useradd -m -u 1000 user USER user # --- Шаг 3: Настройка окружения для 'user' --- ENV HOME=/home/user WORKDIR $HOME/app ENV PATH="$HOME/.cargo/bin:$HOME/.local/bin:${PATH}" # --- Шаг 4: Установка зависимостей от имени 'user' --- RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y RUN cargo install --git https://github.com/alexheretic/ab-av1 COPY --chown=user ./requirements.txt . RUN pip install --no-cache-dir --user -r requirements.txt # --- Шаг 5: Копирование кода приложения --- COPY --chown=user ./app ./app RUN mkdir -p data/uploads data/outputs data/logs # --- Шаг 6: Запуск приложения --- EXPOSE 7860 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]