После создания сервера Linkwarden разворачивается сам: Docker Compose поднимает три контейнера (приложение, база и поиск), отдельный контейнер Caddy выпускает Let's Encrypt и открывает доступ по HTTPS на magic-DNS адресе - вручную ничего настраивать не нужно. Ставится версия 2.16.3.

Что внутри

  • Linkwarden (Next.js) + воркер архивации - веб-интерфейс; headless Chromium снимает страницу и PDF, Monolith (Rust) собирает рабочую копию в один HTML-файл.
  • PostgreSQL 16 - основное хранилище: ссылки, коллекции, пользователи.
  • Meilisearch - полнотекстовый поиск, включая текст внутри заархивированных страниц.
  • Caddy - reverse-proxy и авто-TLS (Let's Encrypt), отдельный контейнер. Linkwarden слушает только localhost.

Безопасность

  • Регистрация закрыта по умолчанию - администратора заводит сама установка, напрямую в базе тем же кодом, что и сам продукт (Prisma + bcrypt). Посторонний не станет администратором, даже открыв адрес раньше вас.
  • HTTPS с автопродлением (Let's Encrypt) через Caddy.

Важно: почта включает проверку адреса

Пока SMTP не настроен, письма выключены и продукт впускает всех, кого заведет администратор. Как только впишете SMTP в настройки и перезапустите установку, вход начинает требовать подтвержденный email - учетки, заведенные раньше без проверенного адреса, потеряют доступ до подтверждения. Администратора это не коснется: ему адрес подтвержден сразу при создании. Заводите новых пользователей уже после включения почты, тогда подтверждение придет письмом сразу.

Важно: массовый импорт

Перенос большой чужой библиотеки (сотни ссылок разом) поднимает архивацию до десятка параллельных процессов headless-браузера и пиковую память до 2,3 ГиБ - на тарифе с 4 ГБ и без файла подкачки сервер уходил в отказ. Рецепт добавляет файл подкачки на 4 ГБ и ограничивает число архиваторов (MAX_WORKERS=2); с этой парой очередь на 200 ссылок разбирается, но при переносе тысяч ссылок разумно грузить их порциями, а не одним файлом.

ИИ-теги (опционально)

Авто-расстановка тегов через модель - опция, не обязательна: сохранение, архив страницы и поиск работают без всякого ключа. Чтобы включить, впишите свой OPENAI_API_KEY (любой OpenAI-совместимый провайдер, выбор за вами) в /etc/linkwarden-mp/params.env и запустите install.sh еще раз. Обращения к модели идут через прокси Fatmetal - он уже включен в сервер, отдельно заказывать и настраивать не нужно.

Как войти

  1. Адрес формируется из IP сервера: замените точки на дефисы и добавьте .fatmetal.net. Пример: IP 45.15.159.126 -> https://45-15-159-126.fatmetal.net/.
  2. Регистрация закрыта, администратор admin уже заведен установкой - пароль тот же, что для входа по SSH (пароль этого сервера).
  3. Смените пароль сразу: Настройки -> Пароль. Новых пользователей заводите там же, в интерфейсе - открытой регистрации нет.

Хранилище

Каждая сохраненная ссылка занимает около 6 МиБ (снимок, PDF, HTML и текст) - тысяча ссылок это порядка 6 ГБ, и архив со временем растет. Продукт умеет S3-хранилище нативно: под растущую библиотеку берите горячий класс, а не холодный - из того же хранилища отдаются превью-картинки, которые видны в каждом списке ссылок, это постоянное чтение, а не архив на полке.

Свой домен

Направьте A-запись на IP этого сервера, задайте DOMAIN=ваш.домен в /etc/linkwarden-mp/params.env и выполните bash /opt/linkwarden-mp/install.sh еще раз - Caddy перевыпустит сертификат под новый домен, NEXTAUTH_URL обновится сам. Полная инструкция - на сервере: cat /root/linkwarden-credentials.txt.

Требования

Тариф CPU2-RAM4-DISK50: в простое весь стек держит 382 МиБ, отклик интерфейса около 100 мс, архивация одной ссылки занимает 30-40 секунд. Заявленный вендором минимум - 2 ядра и 4 ГБ RAM, тариф ему соответствует с запасом на обычной работе. Разовый перенос большой чужой библиотеки - исключение, см. «Массовый импорт» выше: на нем тариф работает на пределе.

Подробный разбор с замерами и скриншотами