Личная библиотека ссылок с AI-тегами: устанавливаем Karakeep на VPS с локальной нейросетью

Зачем это нужно?

Представьте: вы скидываете в Telegram ссылку на интересную статью, видео с YouTube или пост с форума, а система автоматически:

  • Сохраняет копию страницы (на случай, если оригинал удалят)
  • Делает скриншот
  • Сама придумывает теги к содержимому
  • Раскладывает по полочкам

Встречайте Karakeep (бывший Linkwarden) — self-hosted менеджер закладок с открытым исходным кодом, который превращает хаотичные ссылки в структурированную базу знаний.

Что построим

Мы развернем на VPS (Ubuntu 24.04) полноценную систему:

  • Karakeep — веб-интерфейс для хранения ссылок
  • Ollama — локальная нейросеть для генерации тегов
  • Telegram-бот — для удобного добавления ссылок из любого чата
  • Автоматические AI-теги — никакого ручного заполнения

Требования к серверу

Минимальные (но работоспособные):

  • 2 vCPU
  • 4 GB RAM
  • 40 GB SSD
  • Ubuntu 24.04

На таком железе все будет работать, но AI будет думать 1-2 минуты. Для более быстрой работы нужно 8+ GB RAM.


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

Шаг 1: Подготовка сервера

Подключаемся к VPS:

bash

ssh root@ваш_IP_сервера

Обновляем систему:

bash

apt update && apt upgrade -y

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

bash

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Выходим и заходим заново (или выполняем: newgrp docker)

Проверяем:

bash

docker --version
docker compose version

Шаг 3: Создание swap-файла (критично для 4 GB RAM!)

bash

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Делаем постоянным
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

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

Создаем директорию:

bash

mkdir ~/karakeep-app && cd ~/karakeep-app

Скачиваем docker-compose.yml:

bash

wget https://raw.githubusercontent.com/karakeep-app/karakeep/main/docker/docker-compose.yml

Генерируем ключи безопасности:

bash

# Первый ключ (NEXTAUTH_SECRET)
openssl rand -base64 36

# Второй ключ (MEILI_MASTER_KEY)
openssl rand -base64 36

Создаем файл с переменными окружения:

bash

nano .env

Вставляем (замени ключи на свои):

env

KARAKEEP_VERSION=release
NEXTAUTH_SECRET=ваш_сгенерированный_ключ_1
MEILI_MASTER_KEY=ваш_сгенерированный_ключ_2
NEXTAUTH_URL=http://ваш_IP_сервера:3000

Запускаем:

bash

docker compose up -d

Проверяем:

bash

docker compose ps

Все контейнеры должны быть в статусе Up. Открываем браузер по адресу http://ваш_IP:3000 и регистрируемся. Первый пользователь автоматически становится администратором.

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

bash

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

Важное отступление: первая попытка с тяжелой моделью

Изначально я попытался использовать стандартную модель llama3.2 (3.2B параметров). Результат был предсказуем:

text

ollama pull llama3.2

Через 5 минут сервер «лег» — free -h показывал:

text

Mem: 3.9G total, 3.5G used, 367M free
Swap: 0

Ollama одна жрала 2.5 GB RAM (61% памяти!), а Karakeep с Chrome и Meilisearch добивали остатки. В логах появились ошибки:

text

level=WARN source=runner.go:153 msg="context canceled"
error: [inference] inference job failed: Error: Timeout

Вывод: Для 4 GB RAM модель 3.2B слишком тяжела. Нужна облегченная версия.

Шаг 6: Установка легкой модели (решение)

bash

# Удаляем тяжелую модель
ollama rm llama3.2

# Ставим легкую (1.5B параметров)
ollama pull llama3.2:1b

# Проверяем
ollama list

Шаг 7: Настройка Ollama для работы с Karakeep

Сначала Ollama слушала только на localhost, и Docker контейнеры не могли к ней обратиться. Исправляем:

bash

sudo mkdir -p /etc/systemd/system/ollama.service.d/

sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
Environment="OLLAMA_KEEP_ALIVE=2m"
EOF

sudo systemctl daemon-reload
sudo systemctl restart ollama

Проверяем, что теперь слушает на всех интерфейсах:

bash

sudo ss -tlnp | grep 11434
# Должен показать 0.0.0.0:11434

Шаг 8: Подключаем Ollama к Karakeep

Останавливаем Karakeep:

bash

cd ~/karakeep-app
docker compose down

Редактируем .env:

bash

nano .env

Добавляем:

env

OLLAMA_BASE_URL=http://172.17.0.1:11434
INFERENCE_TEXT_MODEL=llama3.2:1b
# INFERENCE_IMAGE_MODEL=llava  # для картинок - НЕ ставим, сэкономит память

Важно про IP: 172.17.0.1 — это стандартный адрес хоста внутри Docker. Если не работает, проверь:

bash

docker run --rm alpine ip route | grep default

Запускаем:

bash

docker compose up -d
docker compose logs -f

Шаг 9: Проверка AI-тегов

Добавляем любую ссылку через веб-интерфейс. В логах появится:

text

info: [inference] Starting an inference job for bookmark...
info: [inference] inference job completed successfully

Через 1-2 минуты (на слабом сервере) у ссылки появятся автоматические теги.

Шаг 10: Настройка Telegram-бота

Создаем бота через @BotFather в Telegram, получаем токен.

Узнаем свой Telegram Chat ID через @userinfobot.

В веб-интерфейсе Karakeep идем в Settings → API Keys → Create new key, копируем ключ.

Создаем файл для бота:

bash

cd ~/karakeep-app
nano docker-compose-bot.yml

Вставляем:

yaml

services:
  karakeepbot:
    image: ghcr.io/madh93/karakeepbot:latest
    restart: unless-stopped
    environment:
      - KARAKEEPBOT_TELEGRAM_TOKEN=токен_бота_от_BotFather
      - KARAKEEPBOT_TELEGRAM_ALLOWLIST=ваш_telegram_chat_id
      - KARAKEEPBOT_KARAKEEP_TOKEN=API_ключ_из_karakeep
      - KARAKEEPBOT_KARAKEEP_URL=http://ваш_IP_сервера:3000

Запускаем бота:

bash

docker compose -f docker-compose-bot.yml up -d

Теперь можно отправлять боту любые ссылки — они автоматически попадут в Karakeep!


Возможности Karakeep

1. Умное сохранение контента

Karakeep не просто хранит ссылку. Для каждой страницы он сохраняет:

  • Полный HTML (если страница исчезнет, копия останется)
  • Скриншот (визуальная «превьюшка»)
  • PDF-версию (для печати или офлайн-чтения)
  • Метаданные (заголовок, описание, автор)

2. AI-тегирование (наша главная фишка)

Благодаря Ollama, каждая новая ссылка автоматически получает теги. Нейросеть анализирует содержимое и предлагает категории. Например, для видео про Anbernic RG35XX теги будут: Retro Game, Console Review, Anbernic, Handheld, Gaming.

Больше не нужно вручную раскладывать ссылки по папкам!

3. Коллекции и теги

  • Коллекции — как папки для группировки ссылок по проектам
  • Цветные теги — гибкая система меток, можно фильтровать по нескольким тегам сразу
  • Избранное — отдельный список для важного

4. Поиск с AI

Встроенный поиск на базе Meilisearch мгновенно находит ссылки по:

  • Названию
  • Описанию
  • Содержимому страницы
  • Тегам (в том числе AI-сгенерированным)

5. Импорт и экспорт

Можно импортировать закладки из:

  • Браузеров (Chrome, Firefox)
  • Pocket
  • Raindrop.io
  • Простого CSV

И экспортировать в любой момент.

6. Доступ из Telegram

Самое удобное — кидать ссылки прямо из мессенджера:

  1. Нашел интересное видео в YouTube
  2. Переслал боту
  3. Через минуту оно уже в библиотеке с тегами

7. REST API

Для автоматизации есть полноценное API. Можно написать скрипты, расширения для браузера или интеграции с другими сервисами.

8. Мониторинг ссылок

Karakeep может проверять, жива ли ссылка, и уведомлять, если страница изменилась или исчезла.

9. Режим «только для чтения»

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

10. Темная тема

Для тех, кто любит беречь глаза.


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

Проблема: AI-теги не появляются

Решение: Проверь логи

bash

docker compose logs -f

Если видишь fetch failed — неправильный IP для Ollama. Исправь в .env.

Проблема: Таймауты при генерации тегов

Причина: Слабый сервер
Решение:

  • Убедись, что используешь llama3.2:1b, а не полную версию
  • Проверь swap: free -h
  • Подожди 2-3 минуты, модель загружается долго

Проблема: Telegram-бот не отвечает

Решение:

bash

docker compose -f docker-compose-bot.yml logs -f

Проверь токен и Chat ID.

Проблема: Не хватает памяти

Симптомы: Сервер зависает, контейнеры падают
Решение:

  • Используй самую легкую модель (tinyllama)
  • Увеличь swap до 8 GB
  • Ограничь память для контейнеров (добавь в docker-compose.yml секцию deploy.resources)

Мониторинг ресурсов

Полезные команды для наблюдения:

bash

# Память
free -h

# Процессы
ps aux --sort=-%mem | head -15

# Логи Karakeep
cd ~/karakeep-app && docker compose logs -f

# Статус Ollama
sudo systemctl status ollama

# Использование диска
df -h

Заключение

Мы построили полноценную личную библиотеку ссылок с AI-тегированием и Telegram-ботом. Теперь любой интересный материал можно сохранить в два клика, а нейросеть сама рассортирует его по темам.

Что особенно ценно:

  • Все данные принадлежат вам
  • Нет ежемесячной платы
  • AI работает локально, без отправки данных в облако
  • Можно расширять функционал через API

На сервере с 4 GB RAM система работает стабильно, хотя AI думает небыстро (1-2 минуты на первую ссылку, потом быстрее). Для домашнего использования — идеально.

Попробуйте, это реально меняет отношение к сохраненным ссылкам! 🚀


*P.S. Если захотите ускорить AI — апгрейдите сервер до 8+ GB RAM и ставьте полную модель llama3.2. Но и на 4 GB с версией 1B всё отлично работает для личных нужд.*