В предыдущей главе мы запустили локальную нейросеть на VDS и научили её обрабатывать отзывы маркетплейсов поштучно. Но если вы собираетесь автоматизировать бизнес-процессы селлера по-настоящему, запускать скрипты вручную через консоль не получится.
Когда парсер собирает тысячи карточек товаров, а локальный ИИ начинает их массово анализировать, сервер сталкивается с двумя проблемами:
- Таймауты и зависания: Если скрипт попытается обработать 5000 отзывов одновременно «в лоб», оперативная память сервера мгновенно переполнится, и сработает системный OOM Killer, который наглухо убьет ваш процесс.
- Падения из-за сбоев сети: Если в процессе обработки на одну секунду пропадет связь с маркетплейсом, обычный скрипт выдаст ошибку и полностью остановится, похоронив всю многочасовую работу.
Чтобы сервер работал автономно в режиме 24/7, обработку данных нужно перевести на систему очередей задач (Celery + Redis) и поставить под жесткий контроль системного диспетчера (Supervisor). Давайте настроим этот отказоустойчивый конвейер.
1. Зачем нужны очереди задач и как это работает?
Представьте себе популярный склад маркетплейса: если все грузовики одновременно попытаются подъехать к одному окну разгрузки, случится коллапс. Поэтому на складах есть электронная очередь — машины ждут своей зоны выгрузки.
В автоматизации скриптов на VDS всё устроено точно так же:
- Инициатор (Парсер): Мгновенно собирает тысячи артикулов или отзывов и не пытается обработать их сам, а просто «выбрасывает» их как мелкие задачи в общую корзину.
- Брокер (Redis): Та самая корзина или диспетчер. Он хранит список всех задач в строгом порядке.
- Воркеры (Celery Workers): Специальные фоновые процессы-трудяги. Они берут из Redis строго по 2–3 задачи одновременно, спокойно обрабатывают их через локальную нейросеть Ollama и складывают результат в базу данных.
Если один воркер упадет или столкнется с ошибкой сети, задача не пропадет — Redis просто передаст её другому воркеру.
2. Пошаговая настройка Celery и Redis на Ubuntu
Мы будем использовать связку Python, Celery и встроенную базу данных Redis, которую мы уже затрагивали в первой статье.
Шаг 1. Установка брокера Redis
Установим и запустим сервер Redis на вашем VDS:
sudo apt update
sudo apt install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server
Шаг 2. Создание структуры ИИ-конвейера
Установим необходимые библиотеки для Python:
pip install celery ollama redis
Вставьте в него рабочий код:
from celery import Celery
import ollama
# Подключаем Celery к нашему брокеру Redis
app = Celery('ai_tasks', broker='redis://localhost:6379/0')
@app.task
def analyze_review_task(review_text):
"""Фоновая задача для обработки отзыва через локальный ИИ"""
prompt = f"Определи тональность отзыва (Позитивная/Негативная) и выдели главную суть: {review_text}"
try:
# Отправляем задачу в локальную Ollama
response = ollama.generate(model='llama3', prompt=prompt)
return response['response']
except Exception as e:
# Если сервер Ollama перегружен, задача автоматически вернется в очередь
print(f"Ошибка обработки: {e}")
raise e
3. Настройка Supervisor: заставляем скрипты работать вечно
Если вы запустите воркер Celery обычной командой в консоли, он закроется, как только вы отключитесь от сервера по SSH. Чтобы скрипт работал 24/7, установим системный менеджер процессов Supervisor. Он будет следить за воркерами в фоновом режиме и автоматически перезапустит их, если они упадут из-за нехватки памяти.
Шаг 1. Установка диспетчера
sudo apt install supervisor -y
Шаг 2. Создание конфига для автоматизации
Создадим файл конфигурации, который укажет Supervisor, как управлять нашими воркерами Celery:
sudo nano /etc/supervisor/conf.d/celery_workers.conf
Вставьте следующий текст (замените /path/to/your/folder на реальный путь к папке, где лежат ваши скрипты):
[program:celery_worker]
command=celery -A tasks worker --loglevel=info --concurrency=2
directory=/path/to/your/folder
user=root
numprocs=1
autostart=true
autorestart=true
stdout_logfile=/var/log/celery_worker.log
stderr_logfile=/var/log/celery_worker_err.log
Параметр --concurrency=2 указывает, что одновременно сервер будет обрабатывать строго 2 отзыва, защищая оперативную память вашего VDS от перегрузки.
Шаг 3. Запуск конвейера автоматизации
Прикажем Supervisor перечитать конфигурацию и запустить процесс в вечный фоновый режим:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start celery_worker
Теперь, даже если ваш VDS полностью перезагрузится, Supervisor сам поднимет Redis, запустит Celery-воркеров и возобновит безопасную фоновую обработку данных маркетплейсов без вашего участия.
Зачем ограничивать количество воркеров через concurrency?
Локальные нейросети (например, Llama 3) потребляют очень много мощностей процессора в момент генерации текста. Если запустить 10 воркеров одновременно, процессор вашего VDS загрузится на 100%, сервер зависнет, и хостинг может временно ограничить вам ресурсы. Ограничение в 2–3 параллельных потока гарантирует стабильную работу 24/7.
Что произойдет, если база данных Redis переполнится?
По умолчанию Redis хранит очереди задач в оперативной памяти. Чтобы сервер не упал от нехватки ОЗУ при парсинге миллионов карточек, настройте скрипт-инициатор так, чтобы он закидывал задачи порциями (например, по 5–10 тысяч штук), либо используйте встроенную функцию очистки успешно выполненных задач в Celery.
Можно ли с помощью Celery настроить регулярный парсинг по расписанию?
Да, для этого у Celery есть встроенный планировщик задач под названием Celery Beat. С его помощью можно настроить скрипт так, чтобы он, например, автоматически запускал парсинг цен конкурентов на Wildberries каждый день ровно в 4 часа утра.












