opex792 commited on
Commit
0d25770
·
verified ·
1 Parent(s): 1b94546

Upload 4 files

Browse files
Files changed (3) hide show
  1. Dockerfile +3 -7
  2. cleanup.js +7 -1
  3. index.js +22 -3
Dockerfile CHANGED
@@ -15,13 +15,8 @@ RUN npm install --only=production
15
  # Копируем остальной код приложения в рабочую директорию
16
  COPY . .
17
 
18
- # Создаем директорию для временных файлов
19
- RUN mkdir -p /tmp/huggingface-runner
20
-
21
- # --- ИЗМЕНЕНИЕ ЗДЕСЬ ---
22
- # Меняем владельца временной директории на пользователя 'node',
23
- # от имени которого запускается приложение. Это дает права на запись.
24
- RUN chown -R node:node /tmp/huggingface-runner
25
 
26
  # Открываем порт, на котором будет работать приложение (стандартный для Spaces - 7860)
27
  EXPOSE 7860
@@ -30,3 +25,4 @@ EXPOSE 7860
30
  # Используем массив для корректной обработки сигналов
31
  CMD [ "node", "index.js" ]
32
 
 
 
15
  # Копируем остальной код приложения в рабочую директорию
16
  COPY . .
17
 
18
+ # ИСПРАВЛЕНИЕ: Строка ниже удалена, т.к. приложение само создает нужную директорию
19
+ # RUN mkdir -p /tmp/huggingface-runner
 
 
 
 
 
20
 
21
  # Открываем порт, на котором будет работать приложение (стандартный для Spaces - 7860)
22
  EXPOSE 7860
 
25
  # Используем массив для корректной обработки сигналов
26
  CMD [ "node", "index.js" ]
27
 
28
+
cleanup.js CHANGED
@@ -1,8 +1,13 @@
1
  import cron from 'node-cron';
2
  import fs from 'fs/promises';
3
  import path from 'path';
 
 
 
 
 
 
4
 
5
- const TEMP_DIR = '/tmp/huggingface-runner';
6
  const MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 часа в миллисекундах
7
 
8
  /**
@@ -53,3 +58,4 @@ export function startCleanupJob() {
53
  console.log('Задача по очистке запланирована на запуск каждый час.');
54
  }
55
 
 
 
1
  import cron from 'node-cron';
2
  import fs from 'fs/promises';
3
  import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+
6
+ // ИСПРАВЛЕНИЕ: Получаем путь к директории аналогично index.js
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = path.dirname(__filename);
9
+ const TEMP_DIR = path.join(__dirname, 'tmp');
10
 
 
11
  const MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 часа в миллисекундах
12
 
13
  /**
 
58
  console.log('Задача по очистке запланирована на запуск каждый час.');
59
  }
60
 
61
+
index.js CHANGED
@@ -1,7 +1,7 @@
1
  import express from 'express';
2
  import multer from 'multer';
3
  import { spawn } from 'child_process';
4
- import { writeFile, unlink, createReadStream } from 'fs';
5
  import { fileURLToPath } from 'url';
6
  import path, { dirname } from 'path';
7
  import { v4 as uuidv4 } from 'uuid';
@@ -11,7 +11,19 @@ import { startCleanupJob } from './cleanup.js';
11
  // --- НАСТРОЙКА ---
12
  const __filename = fileURLToPath(import.meta.url);
13
  const __dirname = dirname(__filename);
14
- const TEMP_DIR = '/tmp/huggingface-runner'; // Директория для временных файлов
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  const app = express();
17
  const PORT = process.env.PORT || 7860; // Hugging Face Spaces использует порт 7860
@@ -182,7 +194,13 @@ app.post('/api/run/file', upload.single('file'), async (req, res) => {
182
 
183
  // Сохраняем входной файл
184
  await new Promise((resolve, reject) => {
185
- writeFile(inputFilePath, inputBuffer, (err) => err ? reject(err) : resolve());
 
 
 
 
 
 
186
  });
187
 
188
  // Выполняем команду
@@ -253,3 +271,4 @@ app.listen(PORT, () => {
253
  startCleanupJob();
254
  });
255
 
 
 
1
  import express from 'express';
2
  import multer from 'multer';
3
  import { spawn } from 'child_process';
4
+ import { writeFile, unlink, createReadStream, mkdirSync } from 'fs';
5
  import { fileURLToPath } from 'url';
6
  import path, { dirname } from 'path';
7
  import { v4 as uuidv4 } from 'uuid';
 
11
  // --- НАСТРОЙКА ---
12
  const __filename = fileURLToPath(import.meta.url);
13
  const __dirname = dirname(__filename);
14
+
15
+ // ИСПРАВЛЕНИЕ: Создаем временную директорию внутри проекта, чтобы избежать проблем с правами.
16
+ const TEMP_DIR = path.join(__dirname, 'tmp');
17
+
18
+ // Создаем директорию синхронно при запуске, если она не существует.
19
+ try {
20
+ mkdirSync(TEMP_DIR, { recursive: true });
21
+ console.log(`Временная директория готова для использования: ${TEMP_DIR}`);
22
+ } catch (e) {
23
+ console.error(`Критическая ошибка: не удалось создать временную директорию ${TEMP_DIR}.`, e);
24
+ process.exit(1); // Завершаем работу, если не можем создать папку.
25
+ }
26
+
27
 
28
  const app = express();
29
  const PORT = process.env.PORT || 7860; // Hugging Face Spaces использует порт 7860
 
194
 
195
  // Сохраняем входной файл
196
  await new Promise((resolve, reject) => {
197
+ writeFile(inputFilePath, inputBuffer, (err) => {
198
+ if (err) {
199
+ console.error("Ошибка записи входного файла:", err);
200
+ return reject(err);
201
+ }
202
+ resolve();
203
+ });
204
  });
205
 
206
  // Выполняем команду
 
271
  startCleanupJob();
272
  });
273
 
274
+