opex792 commited on
Commit
4a84fea
·
verified ·
1 Parent(s): 37480d3

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +33 -27
Dockerfile CHANGED
@@ -1,13 +1,8 @@
1
  # Используем официальный образ Python 3.10
2
  FROM python:3.10-slim
3
 
4
- # Устанавливаем рабочую директорию
5
- WORKDIR /code
6
-
7
- # Отключаем интерактивные запросы при установке пакетов
8
- ENV DEBIAN_FRONTEND=noninteractive
9
-
10
- # 1. Установка системных зависимостей
11
  RUN apt-get update && apt-get install -y \
12
  ffmpeg \
13
  curl \
@@ -18,31 +13,42 @@ RUN apt-get update && apt-get install -y \
18
  && apt-get clean \
19
  && rm -rf /var/lib/apt/lists/*
20
 
21
- # 2. Установка Rust и Cargo
22
- # --- ИЗМЕНЕНИЕ: Убираем ENV PATH, он больше не нужен ---
23
- RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
 
 
 
24
 
25
- # 3. Установка ab-av1 с помощью Cargo
26
- # Устанавливаем в домашнюю директорию root
27
- RUN /root/.cargo/bin/cargo install --git https://github.com/alexheretic/ab-av1
 
28
 
29
- # --- НОВОЕ И САМОЕ ВАЖНОЕ ИСПРАВЛЕНИЕ ---
30
- # Перемещаем скомпилированный бинарник в общедоступный системный путь
31
- RUN mv /root/.cargo/bin/ab-av1 /usr/local/bin/
32
 
33
- # 4. Настройка Python-окружения
34
- COPY ./requirements.txt /code/requirements.txt
35
- RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
36
 
37
- # Копируем код нашего приложения
38
- COPY ./app /code/app
39
 
40
- # Создаем директории для данных и даем на них права
41
- RUN mkdir -p /code/data/uploads /code/data/outputs /code/data/logs
42
- RUN chmod -R 777 /code/data
 
 
43
 
44
- # Открываем порт 7860, на котором будет работать API
45
- EXPOSE 7860
 
46
 
47
- # 5. Запуск приложения
 
 
 
 
 
48
  CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
  # Используем официальный образ Python 3.10
2
  FROM python:3.10-slim
3
 
4
+ # --- Шаг 1: Установка системных зависимостей от имени ROOT ---
5
+ # Это делается один раз в начале.
 
 
 
 
 
6
  RUN apt-get update && apt-get install -y \
7
  ffmpeg \
8
  curl \
 
13
  && apt-get clean \
14
  && rm -rf /var/lib/apt/lists/*
15
 
16
+ # --- Шаг 2: Создание и переключение на правильного пользователя ---
17
+ # Создаем пользователя 'user' с ID 1000, как требует Hugging Face.
18
+ RUN useradd -m -u 1000 user
19
+
20
+ # Переключаемся на этого пользователя. Все последующие команды будут от его имени.
21
+ USER user
22
 
23
+ # --- Шаг 3: Настройка окружения для 'user' ---
24
+ # Устанавливаем домашнюю директорию и рабочую папку.
25
+ ENV HOME=/home/user
26
+ WORKDIR $HOME/app
27
 
28
+ # Обновляем PATH, чтобы включить пути для Cargo и Pip.
29
+ ENV PATH="$HOME/.cargo/bin:$HOME/.local/bin:${PATH}"
 
30
 
31
+ # --- Шаг 4: Установка зависимостей от имени 'user' ---
32
+ # Устанавливаем Rust/Cargo. Он установится в $HOME/.cargo
33
+ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
34
 
35
+ # Устанавливаем ab-av1. Он попадет в $HOME/.cargo/bin, который уже есть в PATH.
36
+ RUN cargo install --git https://github.com/alexheretic/ab-av1
37
 
38
+ # Копируем requirements.txt и устанавливаем Python-пакеты.
39
+ # --chown=user гарантирует, что файл принадлежит 'user'.
40
+ # --user для pip устанавливает пакеты в домашнюю директорию пользователя.
41
+ COPY --chown=user ./requirements.txt .
42
+ RUN pip install --no-cache-dir --user -r requirements.txt
43
 
44
+ # --- Шаг 5: Копирование кода приложения ---
45
+ # Копируем остальной код, также устанавливая владельцем 'user'.
46
+ COPY --chown=user ./app ./app
47
 
48
+ # Создаем директории для данных. Так как мы 'user', они автоматически будут принадлежать ему.
49
+ RUN mkdir -p data/uploads data/outputs data/logs
50
+
51
+ # --- Шаг 6: Запуск приложения ---
52
+ # Открываем порт и запускаем сервер. Процесс будет запущен от имени 'user'.
53
+ EXPOSE 7860
54
  CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]