Linkwarden
Менеджер закладок, который сохраняет страницу целиком: снимок, PDF и работающую копию HTML. Поставили версию 2.16.3 на Fatmetal Cloud Server, уронили сервер массовым импортом и нашли ловушку, которая отбирает вход в собственный сервис.
Вердикт
- команде от двух человек: общие коллекции с правами на каждого участника
- тем, кому нужна копия страницы на дату, а не адрес: юристам, журналистам, исследователям
- тем, кто уже терял библиотеку вместе с закрывшимся сервисом
- одному человеку с сотней ссылок: облако вендора обойдется дешевле сервера
- любителям минимализма: в поставке едет headless-браузер
- тем, у кого сервер на 2 ГБ памяти: первый же импорт его положит
Что это и какую задачу решает
Обычная закладка хранит адрес. Через год адрес ведет на страницу 404, на редизайн без нужного текста или на платную стену.
Linkwarden хранит саму страницу. На каждую сохраненную ссылку он кладет рядом четыре файла: снимок экрана, PDF, работающую копию HTML и вычищенный текст для чтения. Плюс по желанию отправляет копию в archive.org.
История, из-за которой этот вопрос перестал быть теоретическим, свежая. Pocket, самый известный сервис «прочитать позже», Mozilla выключила 8 июля 2025 года, а 8 октября удалила данные тех, кто не успел выгрузить архив. Библиотеки за десять лет не стало у людей, которые ничего не нарушали.
Лицензия - AGPL-3.0 на весь код, без урезанной бесплатной версии. Вход через внешние системы (около пятидесяти провайдеров, включая Яндекс, VK и Mail.ru) в самостоятельной установке работает бесплатно: платная стена стоит в облаке вендора, а не в коде.
Что именно сохраняется и сколько это весит
Мы сохранили статью «Вымирание ссылок» из Википедии и разобрали архив по файлам.
| Формат | Что это | Вес одной страницы |
|---|---|---|
| Веб-страница | копия HTML со всем содержимым внутри одного файла | 2,39 МБ |
| печатная версия страницы | 2,20 МБ | |
| Снимок экрана | картинка страницы целиком | 604 КБ |
| Вид для чтения | очищенный текст, на нем держатся поиск и цитаты | 4,4 КБ |
| Снимок archive.org | ссылка на копию в Wayback Machine, по желанию | - |
Итого около 6 МиБ на одну сохраненную страницу. Тысяча ссылок - примерно 6 ГБ, и это единственная цифра, которую надо держать в голове при выборе диска.
Копия рабочая, а не декоративная: она открывается в интерфейсе как обычная страница, со всеми картинками и версткой, только отдает ее ваш сервер.
Архив растет, и его можно вынести. Linkwarden умеет складывать копии в S3-хранилище: в образе лежат переменные SPACES_KEY, SPACES_ENDPOINT, SPACES_BUCKET_NAME. Это дешевле, чем докупать диск к серверу.
Что мы намерили после запуска
Все цифры сняты на тарифе CPU2-RAM4-DISK50 за 500 рублей в месяц.
| Официальный минимум RAM | 4 ГБ, 2 ядра |
| Память в простое, весь стек | 382 МиБ |
| из них само приложение | 351 МиБ |
| Память под массовым импортом | 2353 МиБ - пик |
| Главный образ на диске | 2,48 ГБ |
| Занято после установки | 5,4 ГБ из 48 |
| Скачивание образов | 46 с |
| От чистой машины до рабочего входа | около 3 минут |
| Архивация одной страницы | 30-40 с |
| Отклик интерфейса | 100 мс |
| Тариф Fatmetal | CPU2-RAM4-DISK50 - 500 ₽/мес |
Вендор обещает простой около 350 МБ - и это честная цифра, наш замер дал 351 МиБ у приложения. Заодно проверьте свои ожидания по диску: на странице документации образ назван «примерно 1,5 ГБ», на диске он занимает 2,48.
Импорт, на котором у нас лег сервер
Это главная засада продукта, и она случается в первый же день.
Мы загрузили файл с 200 закладками - обычный перенос из другого сервиса. Сам импорт занял 2 секунды и ответил «Success».
Дальше за дело взялся фоновый обработчик. На каждую ссылку он поднимает headless-браузер, и таких браузеров одновременно оказалось десять.
Порт SSH принимал соединение, но дальше приветствия дело не шло, интерфейс отдавал таймаут. Через восемь минут машина сама не вернулась. Мягкая перезагрузка не помогла - понадобилось выключить и включить питание.
Причина простая: на образе VPS нет файла подкачки вообще, и упереться пику было не во что.
Лечится двумя строчками, и это проверено. Файл подкачки на 4 ГБ плюс ограничение числа обработчиков - MAX_WORKERS=2 в настройках. После этого та же очередь разгреблась, а интерфейс все время отвечал исправно: память гуляла до 3,6 ГБ, подкачка доходила до 900 МБ.
В нашей карточке маркетплейса подкачка уже настроена. Ставите руками - сделайте это до первого импорта, а не после.
Почта, которая отбирает вход
Пока почтовый сервер не настроен, Linkwarden разрешает зарегистрироваться вообще без адреса - только логин и пароль. Так и делает большинство: сервис личный, письма не нужны.
Через месяц вы решаете пригласить коллегу, и для приглашений прописываете почтовый сервер. С этого момента вход в ваш собственный сервис закрыт.
Что происходит на самом деле
Настроенная почта включает проверку адреса задним числом. Все аккаунты, где адрес не подтвержден, получают на входе ошибку «Email not verified». А у аккаунта без адреса подтверждать нечего - он заперт навсегда.
Мы проверили причину в обе стороны: убрали настройки почты - вход сразу заработал, вернули - снова отказ.
Как выбраться, если уже заперты. Одна команда в базе отмечает адрес подтвержденным, и вход возвращается при включенной почте:UPDATE "User" SET email='вы@пример.ру', "emailVerified"=now() WHERE id=1;
Простое правило на будущее: указывайте почту при регистрации сразу, даже если почтовый сервер вам пока не нужен.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе - не придется повторять установку из разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный сертификат и файл с доступами.
Рекомендуемая конфигурация: CPU2-RAM4-DISK50
Развертывание на Fatmetal
Три контейнера и обратный прокси. От чистой машины до входа - около трех минут.
Создать сервер
Ubuntu 24.04, тариф CPU2-RAM4-DISK50. Диск меньше 50 ГБ не берите: архив растет на 6 МиБ со страницы.
Поставить Docker и файл подкачки
Docker из официального репозитория, подкачка на 4 ГБ - до первого запуска, а не после.
Задать три разных секрета
Пароль базы, ключ подписи сессий и ключ поиска. Именно разных: документация требует этого, и требует не зря.
Указать публичный адрес
Адрес сервиса прописывается в настройках с суффиксом
/api/v1/authи обязан совпадать с тем, что видит браузер. Иначе вход ломается без внятной ошибки.Выпустить сертификат
Обратный прокси получает сертификат Let's Encrypt автоматически. У нас на это ушло меньше 25 секунд.
Зарегистрироваться первым
Регистрация открыта: первый, кто откроет адрес, станет владельцем. Сделайте это сразу и закройте регистрацию.
Образ живет только в одном реестре. На Docker Hub Linkwarden не публикуется вовсе, зеркала нет. Если скачивание встает - дело не в реестре, проверяйте сеть до него.
Требование безопасности, о котором молчат все обзоры
Сохраненный HTML чужих страниц документация просит отдавать с отдельного адреса - переменная NEXT_PUBLIC_USER_CONTENT_DOMAIN. Второй сервер не нужен, оба имени смотрят на ту же машину. Без этого чужая страница из архива исполняется там же, где живет ваша сессия.
Как сделать его легче
Вендор сам ведет страницу про это - редкая честность, и ей стоит воспользоваться.
Тяжесть у продукта ровно одна и осмысленная: в поставке едет headless-браузер, потому что кто-то должен открыть страницу и сделать снимок. Выключается это по частям.
| Что сделать | Что теряете | Эффект |
|---|---|---|
| Выключить PDF и веб-страницу | копию документа, останется снимок и текст | большой |
| Оставить только вид для чтения | картинку и верстку | большой |
| Выключить архивацию целиком | все копии, останутся закладки, теги и поиск по заголовкам | максимальный |
| Сохранять из своего браузера | ничего, работа уходит с сервера на ваш компьютер | большой |
Правила по тегу - самое разумное: полная копия для того, что действительно важно, и только текст для всего остального.
Автоматические теги. Linkwarden умеет расставлять метки моделью по содержимому страницы. Ключ провайдера выбираете вы сами, а обращения к нему идут через прокси к внешним API - он уже входит в сервер Fatmetal, настраивать ничего не надо.
Сервер против подписки
Скажем сразу неудобное: одному человеку облако вендора дешевле своего сервера. Подписка стоит 3 доллара за человека в месяц при годовой оплате - это около 253 рублей против 500 за тариф.
| Сколько человек | Облако вендора | Свой сервер | Кто дешевле |
|---|---|---|---|
| 1 | ≈253 ₽/мес | 500 ₽/мес | облако |
| 2 | ≈506 ₽/мес | 500 ₽/мес | поровну |
| 5 | ≈1265 ₽/мес | 500 ₽/мес | свой сервер |
| 10 | ≈2530 ₽/мес | 500 ₽/мес | свой сервер |
Точка окупаемости - второй пользователь. Дальше разрыв растет линейно: сервер за 500 рублей не дорожает от того, что на нем стало десять аккаунтов.
Есть и вторая арифметика. Платные функции Raindrop, Instapaper и Pinboard - это ровно веб-архив, полнотекстовый поиск и заметки по тексту. То, что здесь входит в установку.
Аргумент, который весит больше цифр. Любая из этих подписок - регулярный платеж зарубежному сервису и зависимость от чужого решения, жить ему дальше или нет. Pocket показал, чем это кончается.
Чем отличается от wallabag и Karakeep
Оба продукта мы тоже ставили и замеряли, поэтому сравнение честное.
| Linkwarden | wallabag | Karakeep | |
|---|---|---|---|
| Что сохраняет | страницу: снимок, PDF, HTML | текст статьи | снимок и текст |
| Заметки по тексту | есть | нет | нет |
| Копия в archive.org | есть | нет | нет |
| Память в простое | 382 МиБ | 108 МиБ | около 720 МиБ |
| Своя команда | права на участника | нет | нет |
Коротко: wallabag легче втрое и бережет текст, а не вид страницы. Karakeep ближе всего по духу, но тяжелее и без заметок по тексту.
Когда это НЕ ваш выбор
Вам нужен только список ссылок
Если копии страниц не нужны, вы платите памятью и диском за то, чем не пользуетесь. Возьмите что-нибудь легче.
У вас сервер на 2 ГБ
В простое влезет, но первый массовый импорт положит машину. Наш замер: пик 2,35 ГБ.
Safari - ваш основной браузер
Расширения для Safari у продукта нет. Есть для Chrome и Firefox, есть приложения для iOS и Android.
Вам важна страховка на случай ухода автора
Проект почти целиком делает один человек: 2541 коммит из примерно 2900. Лицензия AGPL-3.0 защищает от закрытия кода, но не от остановки разработки.
Частые вопросы
Сколько занимает одна сохраненная страница?
Около 6 МиБ со всеми форматами. Тысяча ссылок - примерно 6 ГБ. Если это много, выключите PDF и копию HTML или вынесите архив в S3.
Хватит ли 4 ГБ памяти?
Для работы - с большим запасом: в простое весь стек занимает 382 МиБ. Для массового импорта обязательно добавьте файл подкачки.
Интерфейс на русском?
Да, перевод полный - 565 строк из 565, включается в настройках пользователя. Английской остается страница входа и несколько заголовков в настройках.
Можно перенести библиотеку из другого сервиса?
Да, импорт понимает выгрузки Pocket, wallabag, Omnivore и обычный файл закладок из браузера. Перед импортом добавьте подкачку.
Почему после настройки почты меня не пускают?
Включилась проверка адреса, а ваш не подтвержден. Указывайте почту при регистрации; если уже заперты - отметьте адрес подтвержденным в базе.
Нужен ли ключ от модели для работы?
Нет. Автоматические теги - необязательная функция, без ключа работает все остальное.
Что бэкапить?
Три каталога: базу, архив страниц и поисковый индекс. База без архива даст закладки без копий.
Проверено на версии 2.16.3, сентябрь 2026. На новых версиях результаты могут отличаться.
Итог
Linkwarden - это не список ссылок, а личный веб-архив, и за это он берет память и диск: 382 МиБ в простое, 6 МиБ на каждую сохраненную страницу. Две засады стоят того, чтобы знать о них заранее: массовый импорт без файла подкачки кладет сервер, а настройка почты отбирает вход у аккаунтов без подтвержденного адреса. Обе лечатся до того, как случатся. Взамен вы получаете библиотеку, которая переживет закрытие любого сервиса - включая тот, чьими закладками пользуетесь сейчас.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.