VPSРейтинг
Self-hosted2 марта 2026 · 13 мин чтения

Karakeep на VPS: букмарк-менеджер с AI, который сам раскладывает ссылки по полкам

Браузерные закладки — это помойка. Karakeep — self-hosted менеджер, который сохраняет ссылки, статьи, заметки и даже твиты, а встроенный AI автоматически расставляет теги. Работает на VPS 24/7, синхронизируется с телефоном, не отправляет ваши данные никуда.

1. Что такое Karakeep и зачем он нужен

Представьте, что вы сохранили 500 закладок в браузере. Теперь попробуйте что-нибудь в них найти. Karakeep решает эту проблему: он сохраняет не просто ссылку, а полное содержимое страницы — текст, скриншот, PDF-версию. И AI автоматически решает, в какую папку это положить.

Проект начинался под названием Hoarder, в 2025 году переименован в Karakeep. Актуальная версия — 0.31.0 (2 марта 2026).

🔖 Ссылки, заметки, изображения

Сохраняйте статьи, видео, твиты, PDF и просто заметки в одном месте. Работает через браузерное расширение, мобильное приложение или API.

🤖 AI-тегирование

Модель анализирует содержимое страницы и сама ставит теги: "python", "безопасность", "статья", "рецепт". Вам остаётся только сохранить.

🔍 Полнотекстовый поиск

Meilisearch индексирует текст всех страниц. Поиск работает не только по заголовку, но и по содержимому — даже если вы не помните, откуда была статья.

📸 Скриншоты и архивы

Headless Chromium делает скриншот каждой страницы в момент сохранения. Статья удалена с сайта? Скриншот останется у вас.

📱 Мобильное приложение

iOS и Android. Поделитесь ссылкой из любого приложения — Karakeep сохранит и разложит по тегам автоматически.

📡 RSS-ленты

Подпишитесь на RSS-каналы прямо в Karakeep: новые записи будут автоматически появляться в вашей библиотеке.

Karakeep vs Pocket vs Raindrop

Pocket и Raindrop хранят данные на своих серверах. Karakeep — на вашем VPS. Никакой платной подписки, никаких ограничений на количество закладок, ваши данные только ваши. Pocket Free показывает рекламу и ограничивает офлайн-доступ.

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

Karakeep запускает три контейнера: само приложение, Meilisearch (поиск) и Chromium (скриншоты). Больше всего памяти потребляет Meilisearch — не менее 512 МБ.

ПараметрМинимумРекомендуется
CPU1 vCPU2 vCPU (для Chromium при скриншотах)
RAM1 ГБ2 ГБ — Meilisearch занимает 512 МБ+, Chromium — до 400 МБ
Диск15 ГБ30+ ГБ (скриншоты и архивы растут со временем)
ОСUbuntu 22.04+Ubuntu 22.04 LTS
Dockerv24+Docker Engine v26+ (скрипт установки ниже)

Не ставьте на VPS с 512 МБ RAM

Meilisearch — база данных полнотекстового поиска, и ей нужна память. На 512 МБ контейнер будет постоянно вылетать из-за OOM (out of memory). Минимальный комфортный вариант — VPS на 1–2 ГБ RAM.

3. Установка Docker

Если Docker ещё не установлен — официальный скрипт сделает всё за вас:

Установка Docker (официальный скрипт)
curl -fsSL https://get.docker.com | sh

Проверьте, что Docker запущен:

docker --version
# Docker version 26.x.x, build ...

4. docker-compose.yml и .env

Создадим директорию и скачаем официальный файл конфигурации:

Создать директорию и скачать docker-compose.yml
mkdir ~/karakeep && cd ~/karakeep
wget https://raw.githubusercontent.com/karakeep-app/karakeep/main/docker/docker-compose.yml

Посмотрите содержимое файла — там три сервиса. Ничего менять не нужно, всё уже настроено:

~/karakeep/docker-compose.yml (содержимое для справки, не создавать вручную)
services:
  web:
    image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
    restart: unless-stopped
    volumes:
      - data:/data
    ports:
      - 3000:3000
    env_file:
      - .env
    environment:
      MEILI_ADDR: http://meilisearch:7700
      BROWSER_WEB_URL: http://chrome:9222
      DATA_DIR: /data

  chrome:
    image: gcr.io/zenika-hub/alpine-chrome:124
    restart: unless-stopped
    command:
      - --no-sandbox
      - --disable-gpu
      - --disable-dev-shm-usage
      - --remote-debugging-address=0.0.0.0
      - --remote-debugging-port=9222
      - --hide-scrollbars

  meilisearch:
    image: getmeili/meilisearch:v1.13.3
    restart: unless-stopped
    env_file:
      - .env
    environment:
      MEILI_NO_ANALYTICS: "true"
    volumes:
      - meilisearch:/meili_data

volumes:
  meilisearch:
  data:

Создать файл .env

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

Сгенерировать ключи (запустите, скопируйте вывод)
echo "NEXTAUTH_SECRET=$(openssl rand -base64 36)"
echo "MEILI_MASTER_KEY=$(openssl rand -base64 36 | tr -dc 'A-Za-z0-9')"

# Пример вывода:
# NEXTAUTH_SECRET=abc123...
# MEILI_MASTER_KEY=XyZ456...

Создайте файл .env, вставив сгенерированные значения. Замените karakeep.ваш-домен.ru на реальный домен:

~/karakeep/.env
# Замените на ваш домен
NEXTAUTH_URL=https://karakeep.ваш-домен.ru

# Вставьте значения из команды выше
NEXTAUTH_SECRET=вставьте-сгенерированный-ключ
MEILI_MASTER_KEY=вставьте-сгенерированный-ключ

# AI-тегирование — добавим позже (можно оставить закомментированным)
# OPENAI_API_KEY=sk-...

# Запрет новых регистраций (включите после создания своего аккаунта)
# DISABLE_SIGNUPS=true

Ограничьте права на файл — в нём хранятся секретные ключи:

Закрыть .env от других пользователей системы
chmod 600 ~/karakeep/.env

Запустить контейнеры

Запустить Karakeep в фоне
cd ~/karakeep
docker compose up -d

Первый запуск занимает 1–2 минуты: Docker скачивает образы (~800 МБ суммарно). Проверьте, что все три контейнера запустились:

docker compose ps

# Ожидаемый вывод:
# NAME                   STATUS
# karakeep-web-1         Up
# karakeep-chrome-1      Up
# karakeep-meilisearch-1 Up

Порт 3000 открыт наружу — это временно

По умолчанию docker-compose.yml открывает порт 3000 на всех интерфейсах (0.0.0.0:3000). Это нужно для первоначальной проверки. После настройки Nginx измените строку на 127.0.0.1:3000:3000, чтобы закрыть прямой доступ.

5. Nginx + SSL

Прежде чем идти дальше — настройте домен. Добавьте A-запись у регистратора:

DNS-запись (в панели управления доменом)
karakeep.ваш-домен.ru  →  A  →  IP_ВАШЕГО_СЕРВЕРА

Создайте конфиг Nginx. Karakeep — обычный HTTP-сервер, никаких WebSocket-заголовков не нужно:

/etc/nginx/sites-available/karakeep
server {
    listen 80;
    server_name karakeep.ваш-домен.ru;

    # Увеличиваем лимит для загрузки файлов (по умолчанию 50 МБ)
    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Активировать конфиг и получить SSL
ln -s /etc/nginx/sites-available/karakeep /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

# Установить certbot если нет
apt install -y certbot python3-certbot-nginx

# Получить SSL-сертификат (certbot обновит конфиг Nginx автоматически)
certbot --nginx -d karakeep.ваш-домен.ru

Закрыть прямой доступ к порту 3000

Теперь, когда Nginx настроен, привяжите порт только к localhost. Отредактируйте docker-compose.yml:

Изменить в ~/karakeep/docker-compose.yml
# Было:
#   ports:
#     - 3000:3000

# Стало:
    ports:
      - 127.0.0.1:3000:3000
Применить изменение
cd ~/karakeep && docker compose up -d

6. Первый запуск и регистрация

Откройте https://karakeep.ваш-домен.ru в браузере. Вы увидите форму регистрации — создайте первый аккаунт (он автоматически получает права администратора).

  1. 1Нажмите «Sign Up» и введите email и пароль. Email может быть любым — подтверждения нет.
  2. 2После входа вы увидите пустую библиотеку. Панель слева: All Bookmarks, Favourites, Archive, список тегов.
  3. 3Попробуйте сохранить первую закладку: нажмите «+» вверху → вставьте любую ссылку → Save.
  4. 4Karakeep пойдёт на сайт, извлечёт текст, сделает скриншот и (если настроен AI) поставит теги.

Запретить новые регистрации

Если Karakeep только для вас — заблокируйте возможность зарегистрировать новые аккаунты. Добавьте строку в .env:

~/karakeep/.env — добавить строку
DISABLE_SIGNUPS=true
Применить изменение
cd ~/karakeep && docker compose up -d

После этого форма регистрации исчезнет, останется только вход для уже созданных пользователей.

7. AI-тегирование

Karakeep работает без AI — но именно с ним становится по-настоящему удобным. AI читает содержимое страницы и ставит теги автоматически: «python», «docker», «рецепт», «видео». Есть два варианта: OpenAI (платно, но качественно) или Ollama (бесплатно, локально, чуть хуже).

Вариант 1: OpenAI (рекомендуется)

Karakeep по умолчанию использует gpt-4o-mini — самую дешёвую и быструю модель OpenAI. Одна закладка стоит примерно $0.0001–0.001. На тысяче закладок потратите меньше доллара.

~/karakeep/.env — добавить ключ OpenAI
OPENAI_API_KEY=sk-ваш-ключ-openai

# Необязательно: тегировать на русском языке
INFERENCE_LANG=russian

Вариант 2: Ollama (локально, без API-ключа)

Если у вас уже запущена Ollama на этом или другом сервере — используйте её. Нужна модель для текста (например, llama3.2) и мультимодальная для изображений (например, llava).

Ollama нужна на отдельном мощном VPS

Языковые модели требуют минимум 4–8 ГБ RAM. Запускать Ollama на том же VPS, где работает Karakeep, можно только если у вас 8+ ГБ RAM. Иначе поставьте Ollama отдельно — у нас есть подробный гайд.

~/karakeep/.env — настройка Ollama
# Адрес Ollama (host.docker.internal если на том же хосте, или IP другого сервера)
OLLAMA_BASE_URL=http://host.docker.internal:11434

# Модель для анализа текста
INFERENCE_TEXT_MODEL=llama3.2

# Модель для анализа изображений (необязательно)
INFERENCE_IMAGE_MODEL=llava

После изменения .env перезапустите контейнеры:

cd ~/karakeep && docker compose up -d

Как проверить, что AI работает

Сохраните любую ссылку на статью. Подождите 10–30 секунд. В карточке закладки должны появиться теги — это значит AI сработал. Если тегов нет через минуту, проверьте логи: docker compose logs web --tail=50

8. Мобильное приложение и браузерное расширение

Браузерное расширение

Расширение есть для Chrome и Firefox. Установите из официального магазина, затем в настройках расширения:

  1. 1В поле Server URL введите ваш адрес: https://karakeep.ваш-домен.ru
  2. 2Войдите в аккаунт через форму в расширении или создайте API-ключ в Karakeep (Settings → API Keys) и вставьте его.
  3. 3Теперь на любой странице браузера нажмите иконку расширения — ссылка сохранится в Karakeep за 1 клик.
  4. 4Можно добавить заметку, выбрать теги вручную или оставить всё AI.

Мобильное приложение (iOS / Android)

Найдите Karakeep в App Store или Google Play. После установки:

  1. 1На экране входа нажмите Self Hosting и введите адрес вашего Karakeep.
  2. 2Войдите в аккаунт. Все закладки синхронизируются на телефон.
  3. 3Чтобы сохранить ссылку из Safari/Chrome: нажмите ПоделитьсяKarakeep. Ссылка улетит на VPS автоматически.

Поделиться ссылкой из любого приложения

Стандартный механизм «Share» на iOS и Android позволяет поделиться ссылкой из YouTube, Telegram, Reddit и любого другого приложения прямо в Karakeep. AI обработает её в фоне — при следующем открытии приложения ссылка уже будет с тегами.

9. Полезные настройки

Архив полных страниц

По умолчанию Karakeep делает скриншот. Можно включить сохранение полной страницы в PDF — это позволит читать статьи офлайн, даже если оригинал удалён:

~/karakeep/.env
CRAWLER_FULL_PAGE_ARCHIVE=true

Внимание: PDF занимает больше места на диске (500 КБ–5 МБ на страницу).

Скачивание видео

Karakeep встроенно поддерживает yt-dlp — скачивает видео с YouTube, Vimeo и других платформ при сохранении ссылки:

~/karakeep/.env
CRAWLER_VIDEO_DOWNLOAD=true
CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE=100  # МБ, ограничение на размер

Как обновить Karakeep

Тег release всегда указывает на последний стабильный релиз. Обновление одной командой:

cd ~/karakeep
docker compose pull && docker compose up -d

Данные в volumes не затрагиваются. Простой во время обновления — около 10–30 секунд.

RSS-подписки

В боковой панели нажмите Feeds+ Add Feed. Вставьте RSS-ссылку (например, Habr: https://habr.com/ru/rss/all/). Karakeep будет проверять ленту каждые несколько минут и автоматически добавлять новые записи в библиотеку.

10. Частые проблемы

Контейнер meilisearch вылетает, в логах — «out of memory»

Meilisearch требует достаточно RAM. Проверьте сколько памяти доступно: free -h. Чтобы ограничить аппетит Meilisearch, добавьте в секцию meilisearch в docker-compose.yml ограничение памяти контейнера: deploy: { resources: { limits: { memory: 512M } } }. Надёжное решение — перейти на VPS с 2+ ГБ RAM.

Скриншоты не создаются, в логах chrome — «Permission denied»

Контейнер alpine-chrome работает без root. Убедитесь, что в docker-compose.yml в секции chrome есть флаг --no-sandbox — он обязателен для работы в контейнере без привилегий. Если флаг на месте, а проблема остаётся, пересоздайте контейнер: docker compose down && docker compose up -d

AI теги появляются на английском, хотя страница на русском

Добавьте в .env строку INFERENCE_LANG=russian, затем перезапустите: docker compose up -d. Новые закладки будут тегироваться на русском. Уже сохранённые нужно перетегировать вручную — через три точки на карточке → «Re-crawl».

Ошибка «NEXTAUTH_URL mismatch» после смены домена

Karakeep использует NEXTAUTH_URL для формирования ссылок в OAuth и сессиях. При смене домена обязательно обновите значение в .env и перезапустите контейнеры. Старые сессии при этом инвалидируются — потребуется заново войти в аккаунт.

Нужен VPS для Karakeep? Смотрите подборку с 2 ГБ RAM от 300 ₽/месяц

Рейтинг VPS →

Смотрите также