ИИ и автоматизация 15 мин чтения 2026-10-25

Развертывание LibreChat на VDS в Docker Compose: приватный веб-клиент для Ollama, DeepSeek и Claude без утечки данных

Практическое руководство по развертыванию open-source веб-интерфейса LibreChat v0.8.8 в Docker Compose на собственном VDS: микросервисная архитектура (Node.js, MongoDB, MeiliSearch, pgvector RAG), шифрование токенов AES-256, интеграция с локальной Ollama и внешними API (DeepSeek, Claude, OpenAI), защита портов и бэкап данных.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

Использование публичных облачных интерфейсов вроде ChatGPT Plus или Claude Pro несет для бизнеса и инженеров два критических риска: передачу коммерческой тайны и исходного кода на серверы зарубежных корпораций и постоянную угрозу внезапной блокировки аккаунтов. LibreChat — это ведущий open-source веб-интерфейс для работы с искусственным интеллектом (более 46 000 звёзд на GitHub, лицензия MIT), объединяющий в едином окне любые нейросети: локальные модели через Ollama, флагманские модели DeepSeek, Anthropic Claude и OpenAI. Платформа полностью повторяет эстетику и функциональность оригинального ChatGPT, добавляя мультимодальность, поиск по истории сообщений через MeiliSearch, векторную базу данных для работы с документами (RAG), агентов и разделение прав пользователей. В этом руководстве мы развернем стабильный релиз LibreChat v0.8.8 в Docker Compose, настроим безопасный доступ через Nginx с SSL и подключим гибридный стек нейросетей без утечки корпоративных данных.

1. Почему бизнесу и инженерам нужен собственный приватный AI-клиент

Работа разработчиков, маркетологов и аналитиков через публичные веб-интерфейсы OpenAI или Anthropic создает серьезные угрозы информационной безопасности:

  • Утечка конфиденциальных данных и 152-ФЗ. Отправляя в облачный чат куски закрытого исходного кода, базы данных клиентов, финансовые отчеты или архитектурные схемы, сотрудники фактически передают чувствительные данные третьим лицам. В LibreChat база переписок хранится на вашем изолированном VDS, а при работе с локальной Ollama запросы вообще не покидают периметр сервера.
  • Блокировки аккаунтов и недоступность из РФ. Публичные сайты ChatGPT и Claude регулярно блокируют профили пользователей из России, требуют иностранных номеров телефонов и зарубежных банковских карт для продления подписок ($20 за каждого сотрудника в месяц).
  • Единая точка входа для всей команды. Вместо покупки десятка индивидуальных подписок компания разворачивает один портал: администратор подключает корпоративные API-ключи (например, высокопроизводительный и доступный DeepSeek-V3 / R1 или локальную Ollama) и настраивает квоты для сотрудников.
Критерий ChatGPT Plus Open WebUI Dify LibreChat v0.8.8 (Self-Hosted)
Хранение диалогов Серверы OpenAI (США) Свой сервер Свой сервер Свой изолированный VDS
Поддерживаемые провайдеры Только OpenAI Ollama + базовый OpenAI Мультипровайдеры Ollama, DeepSeek, Claude, OpenAI
Полнотекстовый поиск по чатам Базовый Медленный (SQL LIKE) В рамках воркфлоу Мгновенный (MeiliSearch)
Работа с файлами и RAG Да (Advanced Data) Встроенный RAG Продвинутый RAG pgvector + RAG API Lite
Лицензия Проприетарная Open-source Open-source MIT (Максимально свободная)

2. Архитектура LibreChat: Node.js API, MongoDB, MeiliSearch и pgvector RAG

В отличие от простых веб-оберток, платформа LibreChat спроектирована как масштабируемый сервис, разделенный на независимые функциональные уровни:

  • Основной контейнер API и клиента (LibreChat): высокопроизводительный сервис на Node.js и React. Обрабатывает пользовательские сессии, шифрует ключи, проксирует потоковые ответы нейросетей (Server-Sent Events) и управляет диалогами.
  • База данных MongoDB 8.0 (chat-mongodb): документное хранилище для истории чатов, настроек пользовательских пресетов, системных промптов и учетных записей.
  • Поисковый движок MeiliSearch 1.35 (chat-meilisearch): сверхбыстрый специализированный движок для мгновенного полнотекстового поиска по всем перепискам и сообщениям с поддержкой опечаток и русского языка.
  • Векторная база данных pgvector (vectordb): PostgreSQL с расширением vector, предназначенная для хранения векторных эмбеддингов документов и PDF-файлов.
  • Сервис RAG API (rag_api): микросервис на Python, который извлекает текст из загруженных файлов, разбивает его на фрагменты (чанги) и находит наиболее релевантные куски для добавления в контекст нейросети.

💡 Совет инженера: почему MeiliSearch необходим в корпоративном чате

Когда у сотрудника накапливаются сотни диалогов с генерацией кода и решениями задач, стандартный поиск по базе MongoDB приводит к высоким задержкам и нагрузке на CPU. Интеграция с MeiliSearch индексирует каждое сообщение асинхронно, обеспечивая моментальный вывод результатов поиска по ключевым словам прямо во время ввода.

3. Системные требования к VDS: облачные API против локального запуска Ollama

Потребление ресурсов сервера кардинально зависит от выбранного сценария эксплуатации:

  1. Только внешние API (DeepSeek, Claude, OpenAI): сервер выполняет роль шлюза, кэша и базы данных. В этом сценарии стек LibreChat чрезвычайно легковесен и стабильно работает на недорогом VDS с 2–4 ГБ оперативной памяти.
  2. Гибридный режим с локальной Ollama: если вы планируете запускать инференс открытых моделей (например, Qwen 2.5 Coder или Llama 3.2) прямо на процессоре сервера без видеокарты, потребуются высокочастотные процессорные ядра и от 8 до 16 ГБ оперативной памяти.
Параметр Базовый режим (Внешние API: DeepSeek, Claude) Гибридный режим (+ локальная Ollama CPU)
Процессор (vCPU) 2 vCPU (от 2.6 ГГц) 4–8 vCPU (от 3.3 ГГц)
Оперативная память (RAM) 2–4 ГБ RAM 8–16 ГБ RAM
Дисковое пространство 30 ГБ NVMe 80–120 ГБ NVMe (под веса моделей GGUF)
Операционная система Ubuntu 24.04 LTS / Debian 12 Ubuntu 24.04 LTS x86_64

4. Развертывание LibreChat в Docker Compose: секреты и привязка портов

При настройке стека в соответствии со стандартами информационной безопасности SysKit выполняются три критических правила:

  1. Привязка порта только к локальной петле (127.0.0.1:3080:3080). Это полностью закрывает порт веб-интерфейса от внешнего сканирования и исключает уязвимость обхода фаервола UFW в Linux (подробности в материале Docker обходит UFW на Linux).
  2. Криптостойкое шифрование токенов (AES-256). LibreChat использует ключи CREDS_KEY (32 байта hex) и CREDS_IV (16 байт hex) для симметричного шифрования персональных API-ключей пользователей перед сохранением в MongoDB. Это гарантирует, что даже при утечке дампов базы закрытые ключи останутся в безопасности.
  3. Активация полнотекстового поиска (SEARCH=true). По умолчанию поиск в LibreChat выключен. Чтобы движок MeiliSearch действительно индексировал переписки, в файле .env обязательно задаются одновременно флаг SEARCH=true и мастер-ключ MEILI_MASTER_KEY.

Генерация секретов и подготовка структуры проекта

# Создаём рабочий каталог
mkdir -p /opt/librechat && cd /opt/librechat

# Генерируем 32 байта hex для CREDS_KEY (64 символа)
CREDS_KEY=$(openssl rand -hex 32)

# Генерируем 16 байт hex для CREDS_IV (32 символа)
CREDS_IV=$(openssl rand -hex 16)

# Генерируем секреты для подписи JWT-токенов сессий
JWT_SECRET=$(openssl rand -hex 32)
JWT_REFRESH=$(openssl rand -hex 32)

# Генерируем мастер-ключ для поискового движка MeiliSearch
MEILI_KEY=$(openssl rand -hex 24)

# Пароль для векторной базы PostgreSQL
PG_PASS=$(openssl rand -hex 24)

# Создаём защищенный файл переменных окружения .env
cat <<EOF > .env
HOST=0.0.0.0
PORT=3080

# Подключение к MongoDB 8.0
MONGO_URI=mongodb://mongodb:27017/LibreChat

# Ключи шифрования пользовательских токенов в БД (AES-256)
CREDS_KEY=${CREDS_KEY}
CREDS_IV=${CREDS_IV}

# JWT аутентификация сессий
JWT_SECRET=${JWT_SECRET}
JWT_REFRESH_SECRET=${JWT_REFRESH}

# Полнотекстовый поиск MeiliSearch 1.35 (КРИТИЧНО: SEARCH=true)
SEARCH=true
MEILI_HOST=http://meilisearch:7700
MEILI_MASTER_KEY=${MEILI_KEY}
MEILI_NO_ANALYTICS=true

# Сервис RAG и векторная база данных pgvector
RAG_PORT=8000
RAG_API_URL=http://rag_api:8000
DB_HOST=vectordb
POSTGRES_DB=rag_vectors
POSTGRES_USER=rag_user
POSTGRES_PASSWORD=${PG_PASS}

# Разрешить регистрацию первого администратора (после регистрации меняется на false)
ALLOW_REGISTRATION=true

# Файл расширенной конфигурации моделей
CONFIG_PATH=/app/librechat.yaml
EOF

chmod 600 .env

💡 Совет инженера: сетевая изоляция MongoDB

Обратите внимание: для контейнера librechat-mongodb в манифесте намеренно не объявляется секция ports. База данных доступна исключительно внутри закрытой виртуальной сети Docker для сервиса api и полностью изолирована от внешнего сетевого интерфейса хоста.

Манифест docker-compose.yml

services:
  api:
    image: ghcr.io/danny-avila/librechat:v0.8.8
    container_name: librechat-api
    restart: unless-stopped
    ports:
      # Защита от прямого сканирования: слушаем строго локальную петлю
      - "127.0.0.1:3080:3080"
    extra_hosts:
      # Разрешение прямого обращения к локальной Ollama на хосте Linux
      - "host.docker.internal:host-gateway"
    env_file:
      - .env
    environment:
      - HOST=0.0.0.0
      - MONGO_URI=mongodb://mongodb:27017/LibreChat
      - SEARCH=true
      - MEILI_HOST=http://meilisearch:7700
      - RAG_PORT=8000
      - RAG_API_URL=http://rag_api:8000
    volumes:
      - ./librechat.yaml:/app/librechat.yaml:ro
      - ./uploads:/app/uploads
      - ./images:/app/client/public/images
      - ./logs:/app/logs
      - librechat-data:/app/data
    depends_on:
      mongodb:
        condition: service_started
      meilisearch:
        condition: service_started
      rag_api:
        condition: service_started
    mem_limit: 1.5g
    cpus: 1.5

  mongodb:
    image: mongo:8.0.20
    container_name: librechat-mongodb
    restart: unless-stopped
    command: mongod --noauth
    volumes:
      - mongo-data:/data/db
    mem_limit: 1g
    cpus: 1.0

  meilisearch:
    image: getmeili/meilisearch:v1.35.1
    container_name: librechat-meilisearch
    restart: unless-stopped
    environment:
      - MEILI_HOST=http://meilisearch:7700
      - MEILI_NO_ANALYTICS=true
      - MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
    volumes:
      - meili-data:/meili_data
    mem_limit: 768m
    cpus: 1.0

  vectordb:
    image: pgvector/pgvector:0.8.0-pg15-trixie
    container_name: librechat-vectordb
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pgdata-rag:/var/lib/postgresql/data
    mem_limit: 768m
    cpus: 1.0

  rag_api:
    # Официальный образ RAG API публикуется разработчиками под тегом latest
    image: ghcr.io/librechat-ai/librechat-rag-api-dev-lite:latest
    container_name: librechat-rag-api
    restart: unless-stopped
    environment:
      - DB_HOST=vectordb
      - DB_PORT=5432
      - DB_NAME=${POSTGRES_DB}
      - DB_USER=${POSTGRES_USER}
      - DB_PASSWORD=${POSTGRES_PASSWORD}
      - RAG_PORT=8000
    depends_on:
      - vectordb
    mem_limit: 1g
    cpus: 1.0

volumes:
  mongo-data:
  meili-data:
  pgdata-rag:
  librechat-data:

💡 Совет инженера: почему у rag_api используется тег latest

В отличие от основного приложения LibreChat, жестко зафиксированного на стабильном релизе v0.8.8, вспомогательный Python-микросервис извлечения векторных эмбеддингов поддерживается мейнтейнерами в реестре ghcr.io/librechat-ai/librechat-rag-api-dev-lite исключительно под тегом latest. Попытка вручную прописать числовой тег приведет к ошибке manifest unknown.

Первичный файл конфигурации librechat.yaml

Создайте базовый файл librechat.yaml в рабочем каталоге:

version: 1.3.18
cache: true

endpoints:
  allowedAddresses:
    - 'host.docker.internal:11434'
    - '127.0.0.1:11434'
    - 'localhost:11434'
  custom: []
# Скачиваем образы и запускаем сервисы
docker compose pull
docker compose up -d

# Проверяем статус всех пяти контейнеров
docker compose ps

# Просматриваем журналы запуска основного контейнера
docker compose logs --tail=50 -f api

5. Настройка Nginx с SSL и потоковой передачей ответов (SSE)

В отличие от обычных веб-сайтов, веб-клиенты искусственного интеллекта активно используют технологию Server-Sent Events (SSE) для плавной посимвольной печати ответов языковых моделей (стриминга токенов). Если в обратном прокси Nginx включена стандартная буферизация ответов бэкенда, текст не будет появляться плавно: браузер будет ждать генерации всего ответа целиком или выдавать его рывками по несколько килобайт.

Конфигурация виртуального хоста Nginx

Создайте файл /etc/nginx/sites-available/chat.example.ru.conf:

# Лимит на размер загружаемых PDF-документов и файлов для RAG
client_max_body_size 50M;

server {
    listen 80;
    server_name chat.example.ru;

    # Принудительный редирект HTTP на HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name chat.example.ru;

    # Сертификаты Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/chat.example.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/chat.example.ru/privkey.pem;

    # Рекомендуемые параметры безопасности SSL/TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # Заголовки безопасности
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    location / {
        proxy_pass http://127.0.0.1:3080;
        proxy_http_version 1.1;

        # Поддержка WebSocket для интерактивных элементов
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # КРИТИЧНО ДЛЯ ИИ: отключение буферизации для Server-Sent Events (стриминг токенов)
        proxy_buffering off;
        proxy_cache off;
        chunked_transfer_encoding on;

        # Увеличенные таймауты для генерации длинных ответов и рассуждений моделей
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

Выпуск сертификата Let's Encrypt и применение конфигурации

# Создаём символическую ссылку для активации сайта
ln -s /etc/nginx/sites-available/chat.example.ru.conf /etc/nginx/sites-enabled/

# Проверяем конфигурационные файлы Nginx на синтаксические ошибки
nginx -t

# Выпускаем бесплатный SSL-сертификат
certbot --nginx -d chat.example.ru --non-interactive --agree-tos --redirect -m admin@example.ru

# Перезагружаем веб-сервер
systemctl reload nginx

После установки проверьте надежность шифрования с помощью инструмента проверки SSL-сертификатов и убедитесь в корректности директив безопасности через сервис анализа HTTP-заголовков.

Регистрация первого администратора и закрытие публичной регистрации

Откройте браузер по адресу https://chat.example.ru:

  1. Нажмите кнопку Sign Up и создайте первую учетную запись администратора, указав рабочий Email и надежный пароль. Первый зарегистрированный пользователь автоматически получает статус администратора системы.
  2. Чтобы посторонние пользователи интернета не могли бесконтрольно расходовать баланс ваших платных токенов нейросетей, отключите свободную регистрацию. Для этого откройте /opt/librechat/.env и установите параметр:
    ALLOW_REGISTRATION=false
  3. Примените изменение конфигурации командой:
    docker compose up -d

Теперь добавлять новых коллег сможет только администратор через панель управления или временное включение инвайтов.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud — Быстрые NVMe VDS

Высокочастотные процессоры 3.3 ГГц и скоростные NVMe-диски для моментального поиска в MeiliSearch и плавной генерации токенов в LibreChat.

Конфигурация
2 vCPU 3.3 ГГц • 4 ГБ RAM • 50 ГБ NVMe • Трафик без лимита
Премиум Tier III
🔷

Selectel — Инфраструктура Tier III

Отказоустойчивые серверы в сертифицированных дата-центрах РФ уровня Tier III, выделенные каналы и строгое соблюдение требований 152-ФЗ.

Конфигурация
2 vCPU • 4 ГБ RAM • 60 ГБ NVMe • Приватная сеть
Быстрый старт
🟠

Beget — Простой старт для домена

Удобная панель управления, предустановленный Docker на Ubuntu 24.04 LTS и круглосуточная русскоязычная техническая поддержка.

Конфигурация
2 vCPU • 4 ГБ RAM • 50 ГБ NVMe • Быстрый запуск

6. Подключение нейросетей в librechat.yaml: Ollama, DeepSeek и Claude

Файл librechat.yaml — это главный центр управления моделями платформы. Здесь вы можете гибко объединять локальный инференс без передачи данных наружу с мощными облачными API.

Полный пример конфигурации librechat.yaml

Замените содержимое /opt/librechat/librechat.yaml следующей production-конфигурацией:

version: 1.3.18
cache: true

endpoints:
  # Разрешаем контейнеру обращаться к локальному порту Ollama на хосте через extra_hosts
  allowedAddresses:
    - 'host.docker.internal:11434'
    - '127.0.0.1:11434'
    - 'localhost:11434'

  custom:
    # 1. Локальная Ollama на VDS (полная конфиденциальность данных)
    - name: "Ollama"
      apiKey: "ollama"
      baseURL: "http://host.docker.internal:11434/v1"
      models:
        default: ["qwen2.5-coder:7b", "llama3.3:70b", "deepseek-r1:8b"]
        fetch: true
      titleConvo: true
      titleModel: "current_model"
      modelDisplayLabel: "Ollama (Локально на VDS)"

    # 2. Флагманский китайский DeepSeek API (высокая скорость и минимальная стоимость)
    - name: "DeepSeek"
      apiKey: "${DEEPSEEK_API_KEY}"
      baseURL: "https://api.deepseek.com/v1"
      models:
        default: ["deepseek-chat", "deepseek-reasoner"]
        fetch: false
      titleConvo: true
      titleModel: "deepseek-chat"
      modelDisplayLabel: "DeepSeek V3 / R1"

    # 3. Нативный протокол Anthropic Claude (через provider: anthropic)
    - name: "Anthropic"
      provider: "anthropic"
      apiKey: "${ANTHROPIC_API_KEY}"
      baseURL: "https://api.anthropic.com"
      models:
        default: ["claude-3-7-sonnet-20250219", "claude-3-5-sonnet-latest", "claude-3-5-haiku-latest"]
      titleConvo: true
      titleModel: "claude-3-5-haiku-latest"
      modelDisplayLabel: "Claude"

    # 4. OpenAI API (o3-mini и GPT-4o)
    - name: "OpenAI"
      apiKey: "${OPENAI_API_KEY}"
      baseURL: "https://api.openai.com/v1"
      models:
        default: ["o3-mini", "gpt-4o", "gpt-4o-mini"]
        fetch: false
      titleConvo: true
      titleModel: "gpt-4o-mini"
      modelDisplayLabel: "OpenAI"

💡 Совет инженера: передача API-ключей через .env

Никогда не вписывайте приватные токены в сам YAML-файл. LibreChat автоматически подставляет переменные вида ${DEEPSEEK_API_KEY} из файла /opt/librechat/.env. Добавьте ваши ключи в .env и перезапустите контейнер API командой docker compose restart api.

7. Работа с документами через RAG и артефакты кода

Помимо стандартного диалога, связка LibreChat с vectordb (pgvector) и rag_api открывает мощные сценарии корпоративной автоматизации:

1. Поиск по корпоративным документам и регламентам (RAG)

Нажмите на иконку скрепки в строке ввода и прикрепите PDF-документ (например, техническое задание, договор или бухгалтерскую выписку):

  • Контейнер rag_api автоматически извлекает текстовые блоки и строит векторные эмбеддинги в базе данных PostgreSQL vectordb.
  • При вопросе пользователя LibreChat выполняет семантический поиск, находит 3–5 наиболее подходящих абзацев из вашего документа и отправляет их в контекст модели.
  • Модель отвечает строго на основе предоставленного регламента, указывая конкретные страницы или разделы.

2. Интерактивные артефакты (Artifacts)

Как и в Claude.ai, LibreChat поддерживает режим артефактов: при генерации HTML-страниц, React-компонентов, диаграмм Mermaid или SVG-графики в правой части экрана открывается окно интерактивного предпросмотра. Разработчик может сразу протестировать код прямо в браузере без копирования во внешний редактор.

3. Персональные пресеты и системные промпты

В разделе Presets можно сохранить готовые конфигурации под разные отделы компании:

  • Senior DevOps Reviewer: модель DeepSeek-Reasoner с системным промптом на аудит манифестов Kubernetes и Docker Compose.
  • Legal Assistant: локальная модель Qwen на Ollama для проверки договоров без передачи персональных данных клиентов во внешние сети.
  • Technical Writer: модель Claude 3.7 Sonnet для подготовки инженерной документации и архитектурных статей.

8. Резервное копирование диалогов MongoDB, базы RAG и обновление

В LibreChat история диалогов, настройки пользователей и пресеты хранятся в документоориентированной базе данных MongoDB 8.0, а векторы документов — в PostgreSQL vectordb. Для предотвращения потери накопленной базы знаний настраивается ночной автоматический бэкап:

Скрипт автоматического создания резервной копии

Создайте скрипт /usr/local/bin/backup-librechat.sh:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/librechat"
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
TARGET_DIR="${BACKUP_DIR}/${TIMESTAMP}"

mkdir -p "${TARGET_DIR}"
chmod 700 "${TARGET_DIR}"

# 1. Горячий дамп базы данных MongoDB 8.0
echo "Создание дампа MongoDB..."
docker exec librechat-mongodb mongodump --archive | gzip -9 > "${TARGET_DIR}/mongo-dump.archive.gz"

# 2. Дамп векторной базы данных pgvector
echo "Создание дампа векторной базы данных RAG..."
docker exec librechat-vectordb pg_dump -U rag_user rag_vectors | gzip -9 > "${TARGET_DIR}/vectordb.sql.gz"

# 3. Сохранение конфигурационных файлов и секретов с закрытыми правами
cp /opt/librechat/.env "${TARGET_DIR}/librechat.env"
cp /opt/librechat/librechat.yaml "${TARGET_DIR}/librechat.yaml"
chmod 600 "${TARGET_DIR}/librechat.env" "${TARGET_DIR}/librechat.yaml"

echo "Резервная копия успешно создана в ${TARGET_DIR} ($(du -sh "${TARGET_DIR}" | cut -f1))"

# Удаляем локальные резервные копии старше 14 дней
find "${BACKUP_DIR}" -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +
# Делаем скрипт исполняемым
chmod +x /usr/local/bin/backup-librechat.sh

# Настраиваем расписание: используем системный /etc/cron.d, чтобы не затирать существующий crontab пользователя
cat <<EOF > /etc/cron.d/librechat-backup
# Ночной бэкап стека LibreChat в 04:00
0 4 * * * root /usr/local/bin/backup-librechat.sh >> /var/log/librechat-backup.log 2>&1
EOF

chmod 644 /etc/cron.d/librechat-backup

Для гарантированной защиты от аппаратных аварий накопителя настройте автоматическую выгрузку дампов в независимое отечественное объектное хранилище по нашему руководству по автоматическим шифрованным бэкапам VDS в S3.

Обновление LibreChat до новых версий

cd /opt/librechat

# Создаем свежий бэкап перед обновлением
/usr/local/bin/backup-librechat.sh

# Скачиваем свежие версии образов
docker compose pull

# Перезапускаем контейнеры без простоя базы данных
docker compose up -d

# Проверяем журналы на наличие ошибок инициализации
docker compose logs --tail=50 -f api

9. Чек-лист проверки готовности LibreChat к коммерческой эксплуатации

Параметр Рекомендуемое значение Назначение
Сетевой порт 127.0.0.1:3080:3080 Защита от сканирования из интернета и обхода UFW
Ключи шифрования Стойкие CREDS_KEY и CREDS_IV Шифрование AES-256 пользовательских API-токенов в MongoDB
Поиск MeiliSearch SEARCH=true Активация асинхронного поиска по сообщениям чатов
Связка с Ollama host.docker.internal:host-gateway Доступ контейнера к хостовому порту 11434 на Linux
Регистрация ALLOW_REGISTRATION=false Защита от несанкционированного расхода баланса API посторонними
Буферизация Nginx proxy_buffering off; Плавный посимвольный стриминг ответов моделей (Server-Sent Events)
Лимиты ресурсов Директивы mem_limit для всех сервисов Защита операционной системы хоста от зависания по OOM
Резервное копирование Дамп в /etc/cron.d/ Безопасный ночной бэкап без затирания crontab пользователя

Развертывание LibreChat на собственном VDS позволяет компании получить современный, быстрый и удобный инструмент работы с любыми нейросетями, гарантируя соблюдение конфиденциальности коммерческой информации и исключая зависимость от зарубежных облачных подписок.

🎯 Подберите производительный VDS для корпоративного AI-портала

Для мгновенного поиска по истории сообщений в MeiliSearch, быстрой работы базы MongoDB и плавной генерации токенов выбирайте серверы с современными высокочастотными ядрами процессора и скоростными NVMe-накопителями в дата-центрах уровня Tier III.

Инструменты SysKit по теме статьи

Бесплатные утилиты для проверки и диагностики вашего сервера

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Сколько оперативной памяти требуется LibreChat в Docker?
Если вы используете внешние API (DeepSeek, Claude, OpenAI), полный стек контейнеров (Node.js API, MongoDB 8.0, MeiliSearch 1.35, pgvector и RAG API) стабильно работает на VDS с 2–4 ГБ оперативной памяти. Если на этом же сервере запускается локальный инференс Ollama на CPU с квантованными моделями (например, Qwen 2.5 Coder 7B или Llama 3.2 3B), рекомендуется выбирать тариф с 8–16 ГБ RAM.
Почему для LibreChat критически важно отключить буферизацию в Nginx?
LibreChat транслирует посимвольный вывод моделей с помощью Server-Sent Events (SSE). Если в Nginx не отключить буферизацию директивой proxy_buffering off, веб-сервер будет накапливать байты в памяти и отдавать текст пользователю с задержкой или крупными рывками, что разрушает плавность стриминга ответов.
Как безопасно подключить локальную Ollama к LibreChat в Docker Compose?
Если Ollama установлена прямо на хосте VDS и слушает порт 11434, в манифесте docker-compose.yml для сервиса api обязательно добавляется директива extra_hosts: ["host.docker.internal:host-gateway"], а в файле librechat.yaml задается baseURL: "http://host.docker.internal:11434/v1". В секции endpoints.allowedAddresses также прописывается host.docker.internal:11434 для явного разрешения локального сетевого доступа.
Почему поиск MeiliSearch не работает после первого запуска?
В официальной конфигурации LibreChat поиск по умолчанию отключен. Чтобы поисковый движок MeiliSearch индексировал сообщения, в файле .env необходимо обязательно установить параметр SEARCH=true и сгенерировать криптостойкий ключ MEILI_MASTER_KEY. После правки перезапустите сервис командой docker compose up -d.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи