
Зачем это нужно?
Представьте: вы скидываете в 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)
- Raindrop.io
- Простого CSV
И экспортировать в любой момент.
6. Доступ из Telegram
Самое удобное — кидать ссылки прямо из мессенджера:
- Нашел интересное видео в YouTube
- Переслал боту
- Через минуту оно уже в библиотеке с тегами
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 всё отлично работает для личных нужд.*