Бизнес хочет RAG, но боится облаков. И правильно делает.
Вы когда-нибудь пробовали подключить свою конфиденциальную базу знаний к ChatGPT? У меня после первого такого опыта дёргался глаз. Данные улетают в неизвестность, счёт за API растёт, а скорость ответа – как повезёт. Малый бизнес не может платить $500-1000 в месяц за API и спать спокойно.
RAG (Retrieval-Augmented Generation) – штука крутая: модель отвечает на основе ваших документов, а не на основе мутного интернета. Но где это хостить? Полностью локальный сервер – дорого, сложно в поддержке. Облако – опять зависимость.
Компромисс, который я обкатал на десятке проектов: VPS для фронта и API, домашняя GPU для инференса через защищённый туннель. VPS стоит копейки (500-1000 руб/мес), а за GPU вы уже заплатили. И никакой утечки. В этом гайде я покажу, как собрать такую систему на AnythingLLM + Ollama + IPsec.
Если вы ещё не собрали домашнюю станцию, сначала прочитайте гайд по железу за $15 000 – там всё про выбор видеокарт и RAM. А если сомневаетесь между облаком и локальным хостингом, у меня есть системная статья про стратегию развёртывания.
Ключевая идея: VPS держит веб-интерфейс, API-эндпоинты и базу векторов. Инференс модели выполняется на вашей домашней видеокарте. Всё шифруется через IPsec. Вы получаете AI для бизнеса с полным контролем без ежемесячных счетов.
Что вам понадобится
Не пугайтесь списка – всё стандартное. Из необычного разве что VPN-туннель.
| Компонент | Требования | Примечание |
|---|---|---|
| VPS | Ubuntu 22.04/24.04, 2 CPU, 4 ГБ RAM, 20 ГБ SSD | Можно меньше, если не крутить LLM на VPS |
| Домашний сервер | NVIDIA GPU (RTX 3060+), 16+ ГБ RAM, Linux (Ubuntu/Pop!_OS) | Установите драйверы и CUDA Toolkit 12.x |
| ПО на VPS | Docker + Docker Compose, strongSwan, curl | Последние версии на июнь 2026 |
| ПО на домашнем сервере | Ollama 0.5.x, strongSwan, Docker (опционально) | Ollama проще всего ставить через скрипт установки |
| Модели | llama3, mistral, qwen2.5 – любые из библиотеки Ollama | Выбирайте под свою видеопамять |
Я не буду разжёвывать установку драйверов NVIDIA – это миллион раз описано. Если что, загляните в статью про «бетонную стену» – там есть секция железа.
Шаг 1: Поднимаем IPsec-туннель между VPS и домашним сервером
Это самое ответственное место. Если сделать как попало, модель будет тормозить из-за потерь пакетов. Я выбрал strongSwan – проверенный, стабильный, без компромиссов.
⚠️ Предупреждение: Никогда не открывайте порт Ollama (11434) наружу! Злоумышленники запустят на вашей GPU майнер за минуту. Только через зашифрованный туннель.
1 Устанавливаем strongSwan на обоих машинах
# На VPS и дома
sudo apt update && sudo apt install strongswan strongswan-pki libcharon-extra-plugins -y
2 Генерируем сертификаты
# На домашнем сервере (CA и сертификат для сервера)
pki --gen > /etc/ipsec.d/private/ca-key.pem
pki --self --in /etc/ipsec.d/private/ca-key.pem --dn "CN=VPN CA" --ca > /etc/ipsec.d/cacerts/ca-cert.pem
pki --gen > /etc/ipsec.d/private/server-key.pem
pki --pub --in /etc/ipsec.d/private/server-key.pem | pki --issue --cacert /etc/ipsec.d/cacerts/ca-cert.pem --cakey /etc/ipsec.d/private/ca-key.pem --dn "CN=home-server" --san=192.168.1.100 > /etc/ipsec.d/certs/server-cert.pem
# Скопируйте ca-cert.pem на VPS (в /etc/ipsec.d/cacerts/)
Замените 192.168.1.100 на реальный IP домашнего сервера в локальной сети (или публичный, если у вас белый IP). Для туннеля VPS-дом лучше использовать публичные адреса обеих сторон.
3 Конфигурируем IPsec
На домашнем сервере создаём /etc/ipsec.conf:
config setup
charondebug="ike 2, knl 2, cfg 2"
uniqueids=no
conn vps-tunnel
auto=start
keyexchange=ikev2
authby=pubkey
left=YOUR_HOME_PUBLIC_IP
leftsubnet=0.0.0.0/0
leftcert=server-cert.pem
right=YOUR_VPS_PUBLIC_IP
rightsubnet=0.0.0.0/0
ike=aes256-sha256-modp2048
esp=aes256-sha256
dpdaction=restart
closeaction=restart
На VPS аналогично, только left – IP VPS, right – IP дома. Сертификат клиента не нужен, достаточно CA-сертификата. В конфиге VPS укажите rightcert с путём к серверному сертификату (если используете взаимную аутентификацию) – проще сгенерировать отдельный клиентский сертификат. Я обычно делаю так:
# На VPS
pki --gen > /etc/ipsec.d/private/client-key.pem
pki --pub --in /etc/ipsec.d/private/client-key.pem | pki --issue --cacert /etc/ipsec.d/cacerts/ca-cert.pem --cakey /etc/ipsec.d/private/ca-key.pem --dn "CN=vps-client" --san=YOUR_VPS_IP > /etc/ipsec.d/certs/client-cert.pem
После настройки запустите strongSwan на обеих машинах:
sudo systemctl restart strongswan
sudo systemctl enable strongswan
sudo ipsec status
Если видите ESTABLISHED – всё ок. Теперь между VPS и домом есть зашифрованный канал. Проверьте пинг по внутренним IP (виртуальным) – их можно настроить, но проще использовать физические IP, туннель их шифрует автоматически.
Шаг 2: Запускаем Ollama на домашнем сервере
Тут всё стандартно, но с одной хитростью – нужно разрешить подключения с VPS IP (через туннель).
# Установка Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Откройте порт для LAN (безопасно только внутри туннеля)
sudo ufw allow from 10.0.0.0/8 to any port 11434 # Подставьте свою подсеть туннеля
Затем запустите модель, которая поместится в вашу видеопамять. Для RTX 4090 (24 ГБ) отлично идёт llama3:70b в 4-битной квантованной версии. Для RTX 3060 (12 ГБ) – qwen2.5:14b или mistral.
ollama pull llama3:70b-instruct-q4_K_M
ollama serve
Проверьте, что Ollama отвечает:
curl http://localhost:11434/api/tags
Теперь нужно сделать так, чтобы Ollama слушал на 0.0.0.0 (или на IP домашнего сервера). По умолчанию он слушает только localhost. Отредактируйте systemd сервис:
sudo systemctl edit ollama.service
# Добавьте:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
sudo systemctl daemon-reload && sudo systemctl restart ollama
🔒 ВАЖНО: Port forwarding на роутере НЕ делайте. Доступ к Ollama разрешён ТОЛЬКО через IPsec-туннель, потому что VPS будет подключаться к домашнему серверу по его внутреннему IP (192.168.x.x). Если у вас нет прямого доступа к локальной сети, можно пробросить порт на роутере, но только для IP VPS – лучше этого избегать.
Шаг 3: Разворачиваем AnythingLLM на VPS
Вот где начинается магия. AnythingLLM – это open-source платформа для создания чат-ботов с RAG. Она умеет подключаться к любому LLM-провайдеру, включая Ollama по API.
Создайте на VPS папку /opt/anythingllm и файл docker-compose.yml:
version: '3.8'
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
ports:
- "3001:3001"
environment:
- SERVER_PORT=3001
- LLM_PROVIDER=ollama
- OLLAMA_BASE_PATH=http://192.168.1.100:11434 # IP домашнего сервера (через туннель!)
- OLLAMA_MODEL_PREF=llama3:70b-instruct-q4_K_M
- EMBEDDING_PROVIDER=ollama
- OLLAMA_EMBEDDING_MODEL=nomic-embed-text:latest
volumes:
- ./data:/app/server/storage
- ./models:/app/server/models
restart: unless-stopped
Запустите:
docker compose up -d
Откройте браузер по адресу http://YOUR_VPS_IP:3001. Пройдите начальную настройку: создайте рабочее пространство, загрузите документы (PDF, DOCX, тексты). Система сама разобьёт их на чанки, создаст векторные индексы.
Когда зададите вопрос, AnythingLLM отправит запрос к Ollama на домашнем сервере через зашифрованный туннель. Задержка будет 5-20 мс – незаметно для пользователя.
Шаг 4: Тюним RAG под бизнес-задачи
Мало просто запустить – надо, чтобы модель реально помогала. Вот три вещи, которые я меняю почти в каждом проекте:
1 Настройка prompt’а в AnythingLLM
Зайдите в Settings → Chat Settings → System Prompt. Пишите чётко: «Ты – ассистент отдела продаж компании X. Отвечай на основе предоставленных документов. Если ответа нет в документах – честно скажи, что не знаешь, не выдумывай.»
Без такого промпта модель начнёт галлюцинировать – проверено.
2 Выбор chunk size и overlap
По умолчанию AnythingLLM режет документы на куски по 1000 символов с пересечением 200. Для юридических договоров лучше уменьшить до 500 символов – контекст точнее. Для технической документации можно 1500. Настройка в Settings → Embedding → Chunk size.
3 Включаем гибридный поиск
В настройках Workspace активируйте Hybrid Search (BM25 + векторный). Это поднимает релевантность на 20-30%. Для этого нужен полнотекстовый индекс – AnythingLLM его строит автоматически на SQLite.
Типичные ошибки и как их избежать
Собрал грабли, на которые наступил сам и мои клиенты:
- VPN упал – модель недоступна. Решение: добавьте
auto=startиdpdaction=restartв конфиг IPsec, а ещё лучше – cron скрипт, проверяющий туннель каждую минуту. - Ollama падает из-за перегрузки GPU. При параллельных запросах от нескольких пользователей видеопамять переполняется. Ограничьте число одновременных сессий в AnythingLLM (Settings → Multi-User) или используйте модель меньшего размера.
- Медленная загрузка больших документов. Для PDF с сотнями страниц настройте параллельную обработку. В AnythingLLM этого нет из коробки, но можно предварительно разбить файл на части.
- Домашний IP меняется. Если у провайдера динамический IP, используйте DDNS (например duckdns.org) и в конфиге IPsec пропишите DNS-имя вместо IP.
А что дальше?
После запуска вы получите полностью рабочую RAG-систему. Дальше можно:
- Добавить аутентификацию (AnythingLLM умеет SSO через OpenID).
- Подключить несколько моделей для разных задач (например, для аналитики – более мощную, для чата – легковесную).
- Интегрировать через API с CRM или телеграм-ботом.
И главное – вы больше не платите за каждый токен. Железо уже ваше, трафик между VPS и домом через VPN бесплатный. Если захотите расшириться – см. мой гайд «Корпоративный LLM за бетонной стеной», там про кластеризацию.
Не советую так делать, но одну вещь скажу: я видел компании, которые просто проксировали Ollama через VPS без шифрования. Через месяц у них украли модель и базу знаний. Не будьте такими. IPsec – это больно настраивать, но оно того стоит.
В следующей статье разберу, как заменить IPsec на WireGuard (проще, но чуть медленнее) и добавить балансировку на несколько домашних GPU. Подпишитесь, чтобы не пропустить.