После создания сервера 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 - он уже включен в сервер, отдельно заказывать и настраивать не нужно.
Как войти
- Адрес формируется из IP сервера: замените точки на дефисы и добавьте
.fatmetal.net. Пример: IP45.15.159.126->https://45-15-159-126.fatmetal.net/. - Регистрация закрыта, администратор
adminуже заведен установкой - пароль тот же, что для входа по SSH (пароль этого сервера). - Смените пароль сразу:
Настройки -> Пароль. Новых пользователей заводите там же, в интерфейсе - открытой регистрации нет.
Хранилище
Каждая сохраненная ссылка занимает около 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, тариф ему соответствует с запасом на обычной работе. Разовый перенос большой чужой библиотеки - исключение, см. «Массовый импорт» выше: на нем тариф работает на пределе.