Хабр, в связи с уходом Notion выросла потребность в аналогичном решении, которое бы было сопоставимо удобной Wiki, Task Manager — платформе.
Я испробовал десять self-hosted решений и нашел несколько почти идеальных! Вы можете развернуть их у себя на сервере, при работе над совместными проектами с командой или для ведения личных записей.
Основными требованиями к платформам были:
- хранение данных пользователей только в контуре самого веб-приложения;
- система публичных страниц;
- разграничение доступа;
- простота развертывания и управления;
- малое потребление ресурсов;
- возможность бесплатного использования;
- открытый исходный код.
В основном Wiki платформы, как и сам Notion зачастую хранят данные на своих серверах, что не есть хорошо для коммерческой или служебной тайны организации. Будущий сервис должен работать полностью оффлайн во избежание слива телеметрии на сторонние ресурсы.
Все решения будут тестироваться на сервере с минимальной конфигурацией: 1 ГБ ОЗУ, 1 ядро ЦП, 20 ГБ свободного пространства памяти.
AFFiNE
Сейчас на пике популярности такое решение, как AFFiNE, которое позиционирует себя Next-Gen системой Wiki с открытым исходным кодом. Работа с данным сервисом в облаке не вызывает вопросов, оно практически основано на концепции дерева документов.
Однако при развертке многие пользователи сталкиваются с трудностью понимания, того где будут хранится данные. Ведь при конфигурации сервиса оно просит подключится к AFFiNE Cloud, без возможности отказа.
Появился целый топик в GitHub, где пользователи из-за неопределенности отказываются от использования данного сервиса и ссылаются на квоту в 10 ГБ пользовательского пространства.
На самом деле, не все так страшно. Разработчики в документации указали, что “Affine Cloud” для self-hosted версии представляет собой набор баз данных развернутых в контейнерах локально. Единственное о чем упоминают — это передача телеметрии, которую также можно отключить.
Для достоверности соберем данные о сетевом трафике контейнера с остальными узлами.
После фильтрации, где были исключены обращения на сервер с хоста и базы данных, остались только ARP — запросы между контейнерами. Что свидетельствует, о том что сервер за выделенный промежуток времени не передавал данные во вне. Хотя ничего не мешает это сделать ему позже, поэтому желательно ограничить подключение сервиса к WAN.
А в остальном решение показалось весьма удачным и многофункциональным. При работе 5 человек одновременно нагрузка AFFiNE на сервер составила:
Установить его можно используя, буквально, пару команд:
git clone https://github.com/toeverything/AFFiNE.git --branch stable && cd AFFiNE
docker compose -f ./.github/deployment/self-host/compose.yaml up
А провести конфигурацию самого решения можно по путям compose файла описанного выше.
Siyuan
Данный проект практически не фигурировал ни в одном из топов по аналогам, однако, это один из отличных Open-source сервисов, который заслуживает внимания.
По заявлениям разработчиков решение может работать полностью оффлайн, имеет сквозное шифрование между клиентом и сервером и также есть приложения на Android/IOS. Каждый клиент будь то на ПК или мобильном устройстве является клиент/серверным решением. Это значит, что находясь в LAN-сегменте сети c десктопа можно подключиться на мобильный сервер.
В своей архитектуре решение представляет классический WebApp с Frontend и Backend частями, opensource плагинами, а также возможностью подключения внешних сервисов по API.
Авторизация происходит в один аккаунт, так как отсутствует система разграничения доступа. Но это не проблема, если сервис использует команда одного уровня доступа. Аутентификация осуществляется по ключу без логинов и email.
Сетевые запросы во вне не происходят, а нагрузка при одновременной работе 5 человек составляет:
Полное self-hosted решение, которое имеет приложение, как на десктоп, так и на мобильные устройства. Релевантные меры безопасности и возможность гибкой настройки. Установить данное решение можно через Docker:
services:
main:
image: b3log/siyuan
command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=${AuthCode}']
user: '1000:1000'
ports:
- 6806:6806
volumes:
- ~/siyuan/workspace:/siyuan/workspace
restart: unless-stopped
environment:
# A list of time zone identifiers can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- TZ=${TimeZone}
Замените строчку ${AuthCode} вашим идентификационным кодом, желательно, от 256 символов. Его можно сгенерировать утилитой openssl на Linux:
openssl rand -hex 256
Весь процесс запускается от внутреннего пользователя siyuan, поэтому необходимо выдать права на использование хостового хранилища:
chown -R 1000:1000 ~/siyuan/workspace
Развертывание сервиса занимает считанные минуты, после чего он готов к работе.
Outline
Очень созвучное название с одним VPN-сервисом, но в данном случае разработчики говорят о своем продукте, как о системе базы знаний. Классическое решение, которое визуально напоминает Notion. Из мер безопасности представлено шифрование, при передаче данных через TLS и система разграничения доступа.
Есть два варианта лицензии, при работе с self-hosted решением: CE и Enterprise. В основном между ними практически нет отличий, кроме того что SSO возможна только в коммерческой версии.
Однако есть один большой минус, о котором не указано в документации, это возможность аутентификации только через сторонние сервисы: GitHub, Google или собственно поднятные решения OIDC. И то в последнее время не решен баг отказа аутентификации через единственный сервис, которым может управлять пользователь — OIDC. Почему нельзя использовать локальную или Web аутентификацию, остается загадкой. Нагрузка данного решения составляет:
По сравнению с ранее описанными сервисами данный представляет меньше функциональных возможностей, опций безопасности, а также не является Plug and Play решением, требуя стороне поднятых сервисов аутентификации. Однако если данный сервис вам подходит, то инструкция по поднятию лежит на официальном сайте.
Docmost
Еще одно удачное решение, которое напоминает минималистичный Notion. Минимальные требования для развертки, возможность оффлайн работы, полное self-hosted решение с переносом данных из любых платформ в формате Markdown и HTML.
Хранение данных осуществляется в контуре самого веб-приложения, возможна настройка пользователей по группам, в том числе с правами read-only. Это замена классического механизма публичных страниц, когда пользователи должны зайти в сервис по своим идентификационным данным и выбрать доступные им пространства в режиме для чтения.
Нагрузка данного сервиса на машину составляет:
Передачи телеметрии за период времени тестирования не обнаружено:
Для установки сервиса, воспользуемся Docker Compose и предварительно скачаем для него конфиг:
mkdir docmostcd docmostcurl -O https://raw.githubusercontent.com/docmost/docmost/main/docker-compose.yml
Изменим в docker-compose.yml файле необходимы строки с адресом:
services:
docmost:
image: docmost/docmost:latest
depends_on:
- db
- redis
environment:
APP_URL: "http://localhost:3000"
APP_SECRET: "REPLACE_WITH_LONG_SECRET"
DATABASE_URL: "postgresql://docmost:STRONG_DB_PASSWORD@db:5432/docmost?schema=public"
REDIS_URL: "redis://redis:6379"
ports:
- "3000:3000"
restart: unless-stopped
volumes:
- docmost:/app/data/storage
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: docmost
POSTGRES_USER: docmost
POSTGRES_PASSWORD: STRONG_DB_PASSWORD
restart: unless-stopped
volumes:
- db_data:/var/lib/postgresql/data
redis:
image: redis:7.2-alpine
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
docmost:
db_data:
redis_data:
Для корректной работы с сервисом замените поля STRONG_DB_PASSWORD в переменной и запросе к БД, APP_URL, а так же APP_SECRET. Все пароли можно сгенерировать командой:
openssl rand -hex 128
Множество остального ПО на текущий момент поддерживает частичный self-hosted: данные пользователей хранятся на сторонних облаках, хоть и сам сервер хоститься локально, например Appflowy. Или же функциональность и легкость развертки оставляет желать лучшего. Протестированные сервисы Siyuan, AFFiNE и Docmost являются полностью offline-решениями, которые предоставляют функциональность на уровне Notion и могут быть использованы в корпоративном сегменте.
Если вы знаете еще интересные self-hosted решения, то обязательно пишите в комментариях!
Статья поддерживается командой Serverspace.
Serverspace — провайдер облачных сервисов, предоставляющий в аренду виртуальные серверы с ОС Linux и Windows в 8 дата-центрах: Россия, Беларусь, Казахстан, Нидерланды, Турция, США, Канада и Бразилия. Для построения ИТ-инфраструктуры провайдер также предлагает: создание сетей, шлюзов, бэкапы, сервисы CDN, DNS, объектное хранилище S3.
IT-инфраструктура | Удвоение первого платежа по коду HABR
Комментарии (28)
AlexNixon
16.09.2024 22:56+4Для своих заметок совершенно внезапно для себя пришел к такому селфхостед решению как dokuwiki. Вместо заметочницы веду вику. Не совсем аналог "записочниц", не то что бы я это всем рекомендую, но для меня это работает.
ЗЫ приложений на мобилы нет, но оно открывается и нормально работает даже с IE на винмобайловых КПК
rocket
16.09.2024 22:56Синтаксис у dokuwiki очень сильно похож на markdown. Очень большой пласт сервисов-заметочников использует этот тип разметки. К сожалению, Evernote подсадил меня на некоторые опции форматирования, которые я пока не встречаю на других сервисах: это цветная заливка фона для текста и чекбоксы.
AlexNixon
16.09.2024 22:56на докувики куча плагинов, я чаще всего вообще использую WYSIWYG, заливка и чекбоксы тоже вроде есть (хотя мне не надо, поэтому я точно не помню)
egribanov
16.09.2024 22:56Если не очень много требований, то еще есть codex.doc, приятный редактор и можно хостить хоть на калькуляторе
noxxx
16.09.2024 22:56Siyuan self-hosted docker Limitations:
Does not support desktop and mobile application connections, only supports use on browsers
Export to PDF, HTML and Word formats is not supported
Import Markdown file is not supportedНу такое ...
an1ik Автор
16.09.2024 22:56Если у вас большие проекты, то перенос будет сложней, но Ctrl+C и Ctrl+V с Notion сохраняет практически все компоненты
На импорт, действительно, принимается только кастомное расширение, но экспорт возможен в любом формате
Itkocs
16.09.2024 22:56+1Большое спасибо за статью.
Попробую Siyuan и Docmost, не подскажите есть у них локализация (хочется подключать людей, у которых не очень хорошо с английским)?
Outline не понравился тем, что их репозиторий с контейнером не качается из России, подходящего зеркало быстро не нашел. Пришел ставить через VPN.an1ik Автор
16.09.2024 22:56Docmost в бете, Siyuan без выбора языка :(
Код Open-source и если есть навыки, то можно пересобрать с русской версией. Однако, там многое интуитивно понятно, не думаю, что это будет большой проблемой
jh0ns0n
16.09.2024 22:56Множество остального ПО на текущий момент поддерживает частичный self-hosted: данные пользователей хранятся на сторонних облаках, хоть и сам сервер хоститься локально, например Appflowy
Appflowy можно полностью локальным сделать используя Supabase
coolibin98
16.09.2024 22:56+3Попробуйте Obsidian
freedomcoder
16.09.2024 22:56Пользуюсь им для личного файло-заметочного хранилища.
Плагинами настроил синхронизацию с S3 и шифрование отдельных заметок. Плагинов очень много, работают на всех платформах, довольно удобно. Стабильность синхронизации изредка хромает, может быть однажды руки дойдут исправить плагин
AntonIXO
16.09.2024 22:56А как же Anytype? Тоже selfhosted и с шифрованием? https://anytype.io/
freedomcoder
16.09.2024 22:56Чтобы пользоваться self-hosted версией необходимо пропатчить и собрать клиенты на все плаформы...
godsha
16.09.2024 22:56Возможно стоит перечислить весь список протестированных.
Еще есть Trilium Next, довольно стабильный и функциональный. Из минусов однопользовательский и нет локализации, хотя сейчас у новой команды разработчиков это в ближайших планах.
DBalashov
16.09.2024 22:56Docmost совсем не на уровне Notion. Это ОЧЕНЬ простая конструкция. Приложений для android/ios нет, оффлайна соответственно тоже. Шаринга заметок - насколько я понимаю тоже нет, только для юзеров (ну тоесть через copy link оно всё равно просит логин-пароль и в инкогнито не открывается). При вставке картинки в ячейку таблицы - она (таблица) разбивается на две. Дальше копать не стал.
Outline - мобильных приложений нет, только для Windows. Соответственно на телефоне/планшете оффлайна не будет никакого.
Siyuan выглядит симпатично, однако я так и не понял как в приложении слинковать воркспейс с моим self-hosted сервером. Как-то очень неочевидно.
tim8ska
16.09.2024 22:56Была задача на отдельном open source решении писать инструкции для суппорта. Выбирал между Notion, Outline и Wiki.js, выбрали в итоге Wiki.js - все устраивает. В итоге там инструкции уже дле всей компании по одному из продуктов и в него заходит AI ассистент и забирает тексты для выдачи через OpenAI.
sixxio
Столкнулся с тем, что в Docmost для добавления юзеров нужен почтовый сервер, просто завести руками нельзя. Но issue уже открыт, так что мб скоро добавят.
А в Affine не понравилось отсутствие возможности вставить Excalidraw диаграмму не картинкой, а embedded + наткнулся на некоторые баги, например, когда текст просто не копируется.
an1ik Автор
Affine вообще на любителя, с его особенностями интерфейса, но проект активно разрабатывают, так что из него может и получится что-то
Спасибо, забыл упомянуть, что нужен почтовый сервер
Adevald
Если через докер, но нужно влететь в postgresql например так (docker-compose exec db psql -U docmost -d docmost)
Там
select * from workspace_invitations;
Потом
localhost:3000/invites/ИД_ИНВАЙТА?token=ТОКЕН
Типа такого.
https://yoursite.com/invites/01907078-a64b-734c-86f1-ae1fc777bfb0?token=9j1tonjhv055lzez