Приватного ассистента в духе ChatGPT можно запустить на собственном сервере без GPU. Ollama загружает и запускает языковые модели с открытыми весами, такие как Qwen, Llama и Gemma, и предоставляет к ним простой API, а Open WebUI добавляет чат-интерфейс с пользователями, историей и загрузкой документов. Поскольку всё работает на вашем сервере, запросы и документы никогда не покидают его. В статье: выбор конфигурации сервера, установка Ollama, выбор модели, которая хорошо работает на CPU, установка Open WebUI с HTTPS и использование API из собственных приложений.
При работе на 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, и не размещайте на той же машине другие сервисы, требовательные к памяти.
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 ГБ).
# 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, оцените скорость и переходите на более крупную, только если качество ответов вас не устраивает.
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 не отвечает. Если отвечает, исправьте файрвол, прежде чем продолжать.
Направьте поддомен, например 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;
}
}
Откройте сайт и сразу создайте первую учётную запись — она получает права администратора. Затем в настройках администратора отключите регистрацию новых пользователей или включите подтверждение администратором и создайте учётные записи для команды сами.
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-агентов.
Environment="OLLAMA_KEEP_ALIVE=1h" в override-файле, чтобы избежать медленного первого ответа.OLLAMA_NUM_PARALLEL=2 позволяет двум запросам использовать одну загруженную модель; каждый дополнительный слот требует больше RAM.ollama ps и free -h.Да, для внутренних инструментов, Q&A по документам, подготовки черновиков, перевода и пакетных задач с моделями 3B–8B. Для большого числа одновременных пользователей или крупных моделей нужно больше ядер и RAM либо GPU.
Семейство Qwen обучено на большом объёме китайских и английских текстов и является хорошим выбором по умолчанию. Сначала попробуйте qwen2.5:7b, затем сравните с другими моделями на своих вопросах.
Нет. Ollama и Open WebUI обрабатывают запросы и документы локально. В интернет сервер обращается только для загрузки моделей и обновлений.
Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, версию ОС, CPU и объём RAM, используемую модель и полный текст ошибки, чтобы мы быстрее нашли причину.