Linux-сервер

Локальная LLM на сервере: Ollama и Open WebUI — выбор CPU и RAM, установка, HTTPS и API

7 шагов 18 мин чтения 7 просмотров 0
Содержание

Приватного ассистента в духе ChatGPT можно запустить на собственном сервере без GPU. Ollama загружает и запускает языковые модели с открытыми весами, такие как Qwen, Llama и Gemma, и предоставляет к ним простой API, а Open WebUI добавляет чат-интерфейс с пользователями, историей и загрузкой документов. Поскольку всё работает на вашем сервере, запросы и документы никогда не покидают его. В статье: выбор конфигурации сервера, установка Ollama, выбор модели, которая хорошо работает на CPU, установка Open WebUI с HTTPS и использование API из собственных приложений.

У API Ollama нет аутентификации. Никогда не открывайте порт 11434 в интернет: держите его на localhost или за файрволом, а наружу публикуйте только Open WebUI через HTTPS с учётными записями. Злоумышленники активно ищут открытые серверы Ollama сканерами и используют их в своих целях.

Шаг 1: Выбор конфигурации сервера

При работе на CPU объём RAM определяет, какие модели можно загрузить, а количество и скорость ядер — как быстро появляются ответы. Квантованным моделям (сборки Q4, которые Ollama использует по умолчанию) нужно примерно следующее количество памяти:

Размер моделиRAM для моделиРекомендуемый серверТипичное применение
1–4 млрд параметров (1–4B)около 1–3 ГБ4 ядра, 8 ГБ RAMКлассификация, короткие ответы, тесты
7–8 млрд параметров (7–8B)около 5–6 ГБ8+ ядер, 16 ГБ RAMЧат-ассистент, краткие пересказы, внутренняя база знаний
14 млрд параметров (14B)около 9–10 ГБ16+ ядер, 32 ГБ RAMЛучше рассуждает и пишет, медленнее на CPU

Для моделей 7–8B на современном многоядерном CPU рассчитывайте на несколько слов в секунду: этого достаточно для небольшой команды или фоновых задач, но слишком медленно для сотен одновременных пользователей. Для серьёзной нагрузки выбирайте выделенный сервер с большим числом ядер и объёмом RAM, а не маленький VPS, и не размещайте на той же машине другие сервисы, требовательные к памяти.

Шаг 2: Установка Ollama

curl -fsSL https://ollama.com/install.sh | sh

systemctl status ollama --no-pager
ollama --version
ss -lntp | grep 11434        # should show 127.0.0.1:11434

Установщик создаёт системного пользователя ollama и службу systemd, которая слушает 127.0.0.1:11434. Модели хранятся в /usr/share/ollama/.ollama/models; убедитесь, что на этом диске достаточно места (модель 7B занимает около 4–5 ГБ).

Шаг 3: Загрузка и проверка модели

# Strong multilingual model, good at Chinese and English
ollama pull qwen2.5:7b

# Smaller and faster alternative
ollama pull llama3.2:3b

ollama run qwen2.5:7b "Explain in three sentences what a reverse proxy is."
ollama list        # downloaded models
ollama ps          # loaded models and how much memory they use

Другие модели и размеры ищите в библиотеке моделей на ollama.com. Начните с модели 3B или 7B, оцените скорость и переходите на более крупную, только если качество ответов вас не устраивает.

Шаг 4: Установка Open WebUI

Open WebUI работает в Docker (см. наше руководство по установке Docker). Контейнер должен достучаться до Ollama на хосте, поэтому разрешите Ollama слушать все интерфейсы и убедитесь, что файрвол блокирует порт 11434 снаружи.

# Let Ollama accept connections from Docker containers
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF2'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF2
systemctl daemon-reload && systemctl restart ollama

# Allow Docker networks to reach Ollama, block everyone else (ufw: rules are matched in order)
ufw allow from 172.16.0.0/12 to any port 11434 proto tcp
ufw deny 11434/tcp
# firewalld: simply do not open 11434; Docker's own zone already lets containers reach the host

# Start Open WebUI, reachable only from the server itself until Nginx is in front
docker run -d --name open-webui --restart always \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

С другой машины проверьте, что http://YOUR_SERVER_IP:11434 не отвечает. Если отвечает, исправьте файрвол, прежде чем продолжать.

Шаг 5: Публикация Open WebUI по HTTPS

Направьте поддомен, например ai.example.com, на сервер, получите сертификат (см. бесплатный SSL с Certbot или acme.sh) и настройте проксирование на контейнер. Open WebUI передаёт ответы потоком через WebSocket, поэтому сохраните заголовки Upgrade и длинный таймаут чтения.

server {
    listen 443 ssl;
    http2 on;
    server_name ai.example.com;

    ssl_certificate     /etc/letsencrypt/live/ai.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem;
    client_max_body_size 50m;      # document uploads

    location / {
        proxy_pass         http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout 600s;
    }
}

Откройте сайт и сразу создайте первую учётную запись — она получает права администратора. Затем в настройках администратора отключите регистрацию новых пользователей или включите подтверждение администратором и создайте учётные записи для команды сами.

Шаг 6: Использование API в своих приложениях

Ollama предоставляет собственный API и OpenAI-совместимый эндпоинт, поэтому многие инструменты и SDK работают после простой замены базового URL. Обращайтесь к нему с того же сервера или с других ваших серверов через частную сеть или SSH-туннель.

# Native API
curl http://127.0.0.1:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "Write a short product description for a Tokyo VPS.",
  "stream": false
}'

# OpenAI-compatible API (base URL http://127.0.0.1:11434/v1, any API key)
curl http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Hello"}]}'

Инструменты автоматизации workflow, такие как Dify и n8n, могут использовать Ollama в качестве провайдера моделей; см. требования к серверу для Dify, n8n и AI-агентов.

Шаг 7: Настройка производительности

  • Держите модель загруженной: по умолчанию модель выгружается после 5 минут простоя. Пропишите Environment="OLLAMA_KEEP_ALIVE=1h" в override-файле, чтобы избежать медленного первого ответа.
  • Параллельные запросы: OLLAMA_NUM_PARALLEL=2 позволяет двум запросам использовать одну загруженную модель; каждый дополнительный слот требует больше RAM.
  • Длина контекста: длинным документам нужно большее контекстное окно, которое также расходует больше памяти. Увеличивайте его только при необходимости.
  • Оставляйте RAM свободной: если сервер начинает уходить в swap, ответы становятся крайне медленными. Проверяйте командами ollama ps и free -h.

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

Можно ли реально пользоваться сервером без GPU, только на CPU?

Да, для внутренних инструментов, Q&A по документам, подготовки черновиков, перевода и пакетных задач с моделями 3B–8B. Для большого числа одновременных пользователей или крупных моделей нужно больше ядер и RAM либо GPU.

Какая модель лучше всего подходит для китайского языка?

Семейство Qwen обучено на большом объёме китайских и английских текстов и является хорошим выбором по умолчанию. Сначала попробуйте qwen2.5:7b, затем сравните с другими моделями на своих вопросах.

Покидают ли мои данные сервер?

Нет. Ollama и Open WebUI обрабатывают запросы и документы локально. В интернет сервер обращается только для загрузки моделей и обновлений.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию ОС, CPU и объём RAM, используемую модель и полный текст ошибки, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства