RabbitMQ на VPS: очереди задач для приложений — иллюстрация к статье Storm Cloud Blog, категория DevOps
RabbitMQ на VPS: очереди задач для приложений — иллюстрация к статье Storm Cloud Blog, категория DevOps
DevOps·2 мин··

RabbitMQ на VPS: очереди задач для приложений

Установка RabbitMQ на VPS: exchanges, queues, workers, management UI. Интеграция с Laravel, Node.js и Python. Надёжная доставка сообщений.

Краткий ответ: RabbitMQ — брокер сообщений для фоновых задач: отправка email, обработка изображений, синхронизация данных. На VPS ставится через apt или Docker, management UI — на localhost за Nginx.

Синхронный код не масштабируется. Когда API должен отвечать за 100 мс, а задача занимает 30 секунд — нужна очередь. RabbitMQ — классика рядом с Redis (который тоже умеет очереди, но проще).


RabbitMQ vs Redis vs SQS

RabbitMQ Redis (Bull/Celery) AWS SQS
Сложность Средняя Низкая Низкая (managed)
Гарантии доставки Сильные Зависит от настройки Сильные
Routing Гибкий (exchanges) Базовый Базовый
Self-hosted Да Да Нет

Для Laravel на VPS RabbitMQ — стандарт production-очередей.


Установка (Docker)

services:
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "127.0.0.1:5672:5672"
      - "127.0.0.1:15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: STRONG_PASS
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    restart: unless-stopped

volumes:
  rabbitmq_data:

Management UI: http://127.0.0.1:15672 (через SSH tunnel).


Базовые концепции

  • Producer — отправляет сообщение
  • Exchange — маршрутизирует в очереди
  • Queue — хранит сообщения
  • Consumer/Worker — обрабатывает

Типы exchange: direct, fanout, topic, headers.


Laravel + RabbitMQ

composer require php-amqplib/php-amqplib
QUEUE_CONNECTION=rabbitmq
RABBITMQ_HOST=127.0.0.1
RABBITMQ_USER=admin
RABBITMQ_PASSWORD=...
php artisan queue:work --tries=3

Supervisor или systemd для автозапуска воркеров.


Node.js (amqplib)

const amqp = require('amqplib');
const conn = await amqp.connect('amqp://admin:pass@localhost');
const ch = await conn.createChannel();
await ch.assertQueue('tasks');
ch.sendToQueue('tasks', Buffer.from(JSON.stringify({ job: 'send-email' })));

Python (Celery)

# celery.py
app = Celery('tasks', broker='amqp://admin:pass@localhost//')

RAM и производительность

Очередей/сообщений RAM
Dev 512 MB
Production малый 1–2 GB
High throughput 4 GB+

Мониторьте queue depth через management UI или Grafana.


Надёжность

  • Durable queues + persistent messages
  • Publisher confirms
  • Dead letter exchange для failed jobs
  • Бэкап rabbitmq_data volume — бэкапы 3-2-1

Безопасность

  • Не открывайте 5672/15672 в интернет
  • Отдельные vhost и пользователи per app
  • TLS для production между VPS
  • Fail2ban на Nginx

Итог

RabbitMQ на VPS — фундамент для асинхронной архитектуры. Начните с Docker, одной очереди и одного воркера — масштабируйте по мере роста.

VPS от 2 GB — StormNet Cloud. PHP-стек — Laravel на VPS.

Частые вопросы

RabbitMQ или Redis для очередей на VPS?

Redis проще для лёгких задач и маленьких проектов. RabbitMQ — для гарантий доставки, сложной маршрутизации и Laravel Horizon.

Нужно ли открывать RabbitMQ в интернет?

Нет. Держите порты 5672 и 15672 на localhost или приватной сети. Доступ через VPN или SSH tunnel.