Что такое Linkwarden и зачем он мне понадобился#
У меня накопилась привычка сохранять “почитать позже” во вкладки браузера, а потом эти вкладки жить у меня месяцами, пока браузер не начинает от них подвисать. Классические закладки не спасают - страница через полгода может просто исчезнуть с сайта, и остается только название ссылки и обида. Linkwarden решает это буквально: он не просто запоминает адрес, а сохраняет копию самой страницы - текст, картинки, верстку - так что даже если оригинал пропадет, у вас все равно останется рабочая копия.
Позиционируется как self-hosted альтернатива Pocket, Raindrop.io и Pinboard, только с открытым кодом и без вопроса “а что будет с моими закладками, если сервис завтра закроется”.
Если статья или видео оказались полезны - поддержать канал можно на бусти, ссылка в контактах.
Что внутри#
- Архивация страниц - сохраняет HTML, PDF и скриншот на выбор, не только ссылку.
- Режим чтения - без рекламы, с подсветкой текста и заметками поверх статьи.
- Коллекции и теги - иерархические коллекции плюс теги, обычная для таких сервисов организация, но сделана удобно.
- Полнотекстовый поиск - через Meilisearch, находит материал даже если вы забыли и ссылку, и название.
- Совместная работа - можно делиться коллекциями и раздавать права участникам, полезно, если пользуетесь семьей или небольшой командой.
- Импорт/экспорт - из браузера, в CSV/HTML - переехать с чего-то другого не проблема.
- SSO/API - Authentik из коробки, плюс REST API для своих скриптов.
- Клиенты - расширение для Chrome, PWA, приложения под Android и iOS.
- AI-теги - пытается сам понять, о чем страница, и предлагает тег. Работает не идеально, но как черновой вариант сортировки - неплохо.
- Wayback Machine - можно одной кнопкой отправить ссылку на archive.org, для действительно важных страниц лишняя копия не помешает.
Аутентификация - email/пароль, Google, GitHub, плюс OAuth2-провайдеры вроде Authentik, если у вас уже есть свой SSO.
Установка “в один клик” (для знакомства)#
Проект поставляется с готовым compose-файлом, если просто хочется потыкать:
Проект поставляется с готовыми Docker-контейнерами. Развертывание занимает всего пару минут:
git clone https://github.com/linkwarden/linkwarden
cd linkwarden
cp .env.example .env
docker compose up -dФайлы, которые использовались в ролике#
Docker compose файл
services:
postgres:
container_name: postgres_linkwarden
image: postgres:16-alpine
env_file: .env
restart: always
volumes:
- /home/stilicho/docker/linkwarden/pgdata:/var/lib/postgresql/data
networks:
- linkwarden #not necessary if you don't use another postgres instance
#- proxy
linkwarden:
container_name: linkwarden
env_file: .env
environment:
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres
restart: always
# build: . # uncomment this line to build from source
image: ghcr.io/linkwarden/linkwarden:latest # comment this line to build from source
#ports:
# - 3000:3000
volumes:
- /home/stilicho/docker/linkwarden/data:/data/data
depends_on:
- postgres
networks:
- proxy
- linkwarden #not necessary if you don't use another postgres instance
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.linkwarden.entrypoints=http"
- "traefik.http.routers.linkwarden.rule=Host(`linkwarden.stilicho.ru`)"
- "traefik.http.middlewares.linkwarden-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.linkwarden.middlewares=linkwarden-https-redirect"
- "traefik.http.routers.linkwarden-secure.entrypoints=https"
- "traefik.http.routers.linkwarden-secure.rule=Host(`linkwarden.stilicho.ru`)"
- "traefik.http.routers.linkwarden-secure.tls=true"
- "traefik.http.routers.linkwarden-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.linkwarden-secure.service=linkwarden"
- "traefik.http.services.linkwarden.loadbalancer.server.port=3000"
networks:
proxy:
external: true
linkwarden:
external: trueФайл .env рядом:
NEXTAUTH_URL=https://linkwarden.stilicho.ru/api/v1/auth
# NEXTAUTH_URL=http://localhost:3000/api/v1/auth # раскомментируйте, если работаете без своего OIDC-провайдера
NEXTAUTH_SECRET=замените_на_случайную_строку
POSTGRES_PASSWORD=замените_на_свой_пароль
# SMTP Settings
#NEXT_PUBLIC_EMAIL_PROVIDER=
#EMAIL_FROM=
#EMAIL_SERVER=
#BASE_URL=
#################
# SSO Providers #
#################
#AUTHENTIK_CUSTOM_NAME=Authentik
#NEXTAUTH_URL=https://linkwarden.stilicho.ru/api/v1/auth
#NEXT_PUBLIC_AUTHENTIK_ENABLED=true
#AUTHENTIK_CUSTOM_NAME=authentik
#AUTHENTIK_ISSUER=https://auth.stilicho.ru/application/o/linkwarden
#AUTHENTIK_CLIENT_ID=ID
#AUTHENTIK_CLIENT_SECRET=SECRETПара моментов:
NEXTAUTH_SECRET- в оригинальном примере от разработчиков там буквально стоит значениеlinkwarden. Не оставляйте так - это секрет, которым подписываются сессии, и его знают все, кто читал README проекта. Сгенерируйте что-то случайное, напримерopenssl rand -hex 32.- сеть
linkwarden- тожеexternal: true, то есть Compose сам ее не создаст. Если раньше не заводили:docker network create linkwardenперед первым запуском. - Комментарий про “loadbalancer должен быть последней строкой” из оригинального примера - можно не бояться нарушить: Traefik разбирает лейблы контейнера целиком, порядок строк в списке
labels:ни на что не влияет.
Как он смотрится на фоне соседей#
| Характеристика | Linkwarden | Raindrop.io | Wallabag | |
|---|---|---|---|---|
| Self-hosted | ✅ | ❌ | ❌ | ✅ |
| Архивация страниц | ✅ | ❌ | ✅ (Pro) | ✅ |
| Полнотекстовый поиск | ✅ | ✅ | ✅ | ✅ |
| Мультипользовательский | ✅ | ❌ | ✅ | ✅ |
| Открытый исходный код | ✅ | ❌ | ❌ | ✅ |
Ближайший конкурент по духу здесь - Wallabag: тоже open source, тоже self-hosted, тоже архивирует страницы. У меня в итоге победил Linkwarden - в первую очередь из-за интерфейса, который выглядит современнее, и из-за AI-тегов, которые хоть и не идеальны, но реально экономят время на сортировке накопившихся ссылок.
Вывод#
Ставится легко, за Traefik заводится без сюрпризов (кроме того самого секрета по умолчанию, который обязательно смените), а привычка “сохранить, чтобы почитать позже” наконец перестает заканчиваться мертвыми ссылками через полгода. Если у вас то же самое болото из вкладок браузера, что было у меня - разворачивать стоит, тем более что при своем SSO (Authentik/Authelia) настройка занимает буквально пару минут.




