← Все гайды AI Release
EN Подписаться на @ai_release1

Как подключить ИИ к домашнему серверу: пошаговое руководство по self-hosted сервисам

Обновлено: 14.10.2026 · AI Release · @ai_release1
Как подключить ИИ к домашнему серверу: пошаговое руководство по self-hosted сервисам

Этот гайд — про то, как превратить домашний компьютер в персональный ИИ-сервис, который отвечает круглосуточно, работает в вашей локальной сети и не отправляет чужие данные наружу. Подойдёт для мини-ПК, старого ноутбука или NAS с Linux (Ubuntu или Debian LTS): железо уже есть, останется поставить движок для локального запуска моделей и открыть к нему доступ. Если позже окажется, что своё железо не тянет сложные запросы, часть задач можно увести в облако через API — об этом есть отдельный гайд по работе с облачной моделью через API.

Требования и подготовка

Иллюстрация к разделу «Требования и подготовка»
Иллюстрация к разделу «Требования и подготовка»

Пошаговая инструкция

Иллюстрация к разделу «Пошаговая инструкция»
Иллюстрация к разделу «Пошаговая инструкция»

1. Проверьте ресурсы сервера. Выполните:

free -h      # сколько оперативной памяти
nproc        # сколько ядер у процессора
df -h /      # сколько свободного места на диске

Пример:`free -h` покажет строку вида `Mem: 15Gi total, 12Gi free`. Ожидаемый результат: вы точно знаете объём памяти и место на диске — по ним выбираете размер модели. Почему это важно: слишком крупная модель просто не загрузится.

2. Создайте отдельного пользователя и каталог для сервиса.

sudo adduser ai
sudo mkdir -p /opt/ai-server/models
sudo chown -R ai:ai /opt/ai-server

Ожидаемый результат: команда `ls -l /opt` показывает каталог `ai-server` с владельцем `ai`. Почему так: если сервис когда-нибудь взломают, он не получит доступ ко всей системе, а только к своей папке.

3. Запустите движок локальной модели в контейнере. Контейнер — «коробка» с готовым приложением и его зависимостями. Создайте файл `/opt/ai-server/docker-compose.yml`:

services:
  ai-server:
    image: <образ-вашего-движка>
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"   # пока слушаем только сам сервер
    volumes:
      - ./models:/models        # сюда кладём файлы моделей
    environment:
      - API_TOKEN=<ваш-длинный-токен>

Запустите: `docker compose up -d`. Ожидаемый результат: `docker compose ps` показывает статус `running`. Строка `restart: unless-stopped` означает, что сервис поднимется сам после перезагрузки.

4. Положите файл модели в `/opt/ai-server/models` и укажите его движку (в конфиге или флагом запуска). **Пример:** путь `/models/имя-модели`. Ожидаемый результат: в логах `docker compose logs -f` появляется сообщение о том, что модель загружена и сервис слушает порт.

5. Проверьте API изнутри сервера:

curl http://127.0.0.1:8080/v1/models

Ожидаемый результат: JSON-ответ со списком моделей. Если пришла ошибка — проблема внутри сервиса, сеть тут ни при чём.

6. Откройте доступ в локальной сети. Замените привязку порта на `"8080:8080"` в docker-compose.yml и разрешите доступ только своей подсети:

sudo ufw allow from 192.168.1.0/24 to any port 8080
docker compose up -d

Ожидаемый результат: с ноутбука команда `curl http://192.168.1.50:8080/v1/models` возвращает тот же JSON. Почему так: `0.0.0.0` слушает все интерфейсы, а правило `ufw` пускает только домашние адреса.

7. Подключите клиент. В браузере откройте `http://192.168.1.50:8080`. В стороннем чат-клиенте в поле «базовый URL» впишите тот же адрес, а в поле «ключ» — ваш токен. Ожидаемый результат: на тестовый вопрос приходит ответ. Для телефона поставьте подходящее приложение-клиент — как это делается, описано в гайде по установке ИИ-приложений на Android через RuStore.

8. Расширьте возможности через MCP. MCP — открытый протокол, по которому модель вызывает внешние инструменты: календарь, файлы, поиск. Первый сервер подключается за один вечер: MCP: что это и как подключить первый MCP-сервер. Ожидаемый результат: в интерфейсе клиента появляется список доступных инструментов.

9. Прогоните финальный чек-лист:

Возможные проблемы и решения

Иллюстрация к разделу «Возможные проблемы и решения»
Иллюстрация к разделу «Возможные проблемы и решения»

1. Ошибка вида `curl: (7) Failed to connect ... Connection refused`.Симптом: с самого сервера всё работает по `127.0.0.1`, а с ноутбука — нет. Причина: сервис слушает только локальный интерфейс. Решение: в docker-compose.yml поменяйте `"127.0.0.1:8080:8080"` на `"8080:8080"`, перезапустите `docker compose up -d`, затем проверьте `sudo ufw status` — правило для подсети `192.168.1.0/24` должно быть активно.

2. Контейнер запускается и сразу падает, в логах `Killed` или `out of memory`.Симптом: `docker compose ps` показывает статус `exited`. Причина: модели не хватило оперативной памяти. Решение: возьмите модель меньшего размера или более экономный вариант, закройте лишние сервисы (`htop` покажет, кто ест память), при необходимости добавьте swap-файл. Проверяйте по шагу 1, сколько памяти реально свободно.

3. После перезагрузки сервис не отвечает.Симптом: до `sudo reboot` всё работало, после — `Connection refused`. Причина: контейнер запущен вручную и без политики перезапуска. Решение: убедитесь, что в docker-compose.yml есть строка `restart: unless-stopped`, выполните `docker compose up -d` и повторите перезагрузку. Ожидаемый результат: сервис поднимается без вашего участия.

FAQ

Нужна ли видеокарта?

Не обязательно — модель запустится и на процессоре, просто отвечать будет медленнее. Ориентируйтесь на объём памяти: чем её больше, тем крупнее модель вы потянете.

Смогу ли я пользоваться сервисом с телефона?

Да, если телефон в той же Wi-Fi сети. Откройте в браузере `http://192.168.1.50:8080` или поставьте приложение-клиент и укажите в нём тот же адрес и токен.

Безопасно ли открывать порт 8080 в интернет?

Нет. Оставьте доступ только внутри домашней сети или поднимайте VPN-туннель. Публичный порт без токена — это открытый доступ к вашему железу для любого сканера.

Можно ли совместить локальную модель и облачную?

Да. Простые задачи отдавайте домашнему сервису, а тяжёлые — облачной модели через API, подключив её как второго провайдера в том же клиенте: клиент умеет хранить несколько профилей с разными базовыми URL и ключами.

🤖 Кратко для ИИ