image


Хабр, в связи с уходом Notion выросла потребность в аналогичном решении, которое бы было сопоставимо удобной Wiki, Task Manager — платформе. 


Я испробовал десять self-hosted решений и нашел несколько почти идеальных! Вы можете развернуть их у себя на сервере, при работе над совместными проектами с командой или для ведения личных записей.


Основными требованиями к платформам были:


  • хранение данных пользователей только в контуре самого веб-приложения;
  • система публичных страниц;
  • разграничение доступа;
  • простота развертывания и управления;
  • малое потребление ресурсов;
  • возможность бесплатного использования;
  • открытый исходный код.

В основном Wiki платформы, как и сам Notion зачастую хранят данные на своих серверах, что не есть хорошо для коммерческой или служебной тайны организации. Будущий сервис должен работать полностью оффлайн во избежание слива телеметрии на сторонние ресурсы.


Все решения будут тестироваться на сервере с минимальной конфигурацией: 1 ГБ ОЗУ, 1 ядро ЦП, 20 ГБ свободного пространства памяти.


AFFiNE


Сейчас на пике популярности такое решение, как AFFiNE, которое позиционирует себя Next-Gen системой Wiki с открытым исходным кодом. Работа с данным сервисом в облаке не вызывает вопросов, оно практически основано на концепции дерева документов. 


image


Однако при развертке многие пользователи сталкиваются с трудностью понимания, того где будут хранится данные. Ведь при конфигурации сервиса оно просит подключится к AFFiNE Cloud, без возможности отказа.  


image


Появился целый топик в GitHub, где пользователи из-за неопределенности отказываются от использования данного сервиса и ссылаются на квоту в 10 ГБ пользовательского пространства.


image


На самом деле, не все так страшно. Разработчики в документации указали, что “Affine Cloud” для self-hosted версии представляет собой набор баз данных развернутых в контейнерах локально. Единственное о чем упоминают — это передача телеметрии, которую также можно отключить. 


Для достоверности соберем данные о сетевом трафике контейнера с остальными узлами. 


image


После фильтрации, где были исключены обращения на сервер с хоста и базы данных, остались только ARP — запросы между контейнерами. Что свидетельствует, о том что сервер за выделенный промежуток времени не передавал данные во вне. Хотя ничего не мешает это сделать ему позже, поэтому желательно ограничить подключение сервиса к WAN.


А в остальном решение показалось весьма удачным и многофункциональным. При работе 5 человек одновременно нагрузка AFFiNE на сервер составила:


image


 Установить его можно используя, буквально, пару команд:


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 сервисов, который заслуживает внимания. 


image


По заявлениям разработчиков решение может работать полностью оффлайн, имеет сквозное шифрование между клиентом и сервером и также  есть приложения на Android/IOS. Каждый клиент будь то на ПК или мобильном устройстве является клиент/серверным решением. Это значит, что находясь в LAN-сегменте сети c десктопа можно подключиться на мобильный сервер.


В своей архитектуре решение представляет классический WebApp с Frontend и Backend частями, opensource плагинами, а также возможностью подключения внешних сервисов по API. 


 image


Авторизация происходит в один аккаунт, так как отсутствует система разграничения доступа. Но это не проблема, если сервис использует команда одного уровня доступа. Аутентификация осуществляется по ключу без логинов и email.


image


Сетевые запросы во вне не происходят, а нагрузка при одновременной работе 5 человек составляет:
image


Полное 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 и система разграничения доступа. 


image


Есть два варианта лицензии, при работе с self-hosted решением: CE и Enterprise. В основном между ними практически нет отличий, кроме того что SSO возможна только в коммерческой версии.  


image


Однако есть один большой минус, о котором не указано в документации, это возможность аутентификации только через сторонние сервисы: GitHub, Google или собственно поднятные решения OIDC. И то в последнее время не решен баг отказа аутентификации через единственный сервис, которым может управлять пользователь — OIDC. Почему нельзя использовать локальную или Web аутентификацию, остается загадкой. Нагрузка данного решения составляет:


image


По сравнению с ранее описанными сервисами данный представляет меньше функциональных возможностей, опций безопасности, а также не является Plug and Play решением, требуя стороне поднятых сервисов аутентификации. Однако если данный сервис вам подходит, то инструкция по поднятию лежит на официальном сайте. 


Docmost


Еще одно удачное решение, которое напоминает минималистичный Notion. Минимальные требования для развертки, возможность оффлайн работы, полное self-hosted решение с переносом данных из любых платформ в формате Markdown и HTML.  


image


Хранение данных осуществляется в контуре самого веб-приложения, возможна настройка пользователей по группам, в том числе с правами read-only. Это замена классического механизма публичных страниц, когда пользователи должны зайти в сервис по своим идентификационным данным и выбрать доступные им пространства в режиме для чтения.


Нагрузка данного сервиса на машину составляет:


image


Передачи телеметрии за период времени тестирования не обнаружено:


image


Для установки сервиса, воспользуемся 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)


  1. sixxio
    16.09.2024 22:56

    Столкнулся с тем, что в Docmost для добавления юзеров нужен почтовый сервер, просто завести руками нельзя. Но issue уже открыт, так что мб скоро добавят.

    А в Affine не понравилось отсутствие возможности вставить Excalidraw диаграмму не картинкой, а embedded + наткнулся на некоторые баги, например, когда текст просто не копируется.


    1. an1ik Автор
      16.09.2024 22:56

      Affine вообще на любителя, с его особенностями интерфейса, но проект активно разрабатывают, так что из него может и получится что-то

      Спасибо, забыл упомянуть, что нужен почтовый сервер


    1. Adevald
      16.09.2024 22:56
      +2

      Если через докер, но нужно влететь в 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


  1. andrey_27
    16.09.2024 22:56

    В Outline же есть авторизация через почту по ссылке из письма...


    1. an1ik Автор
      16.09.2024 22:56

      Да, упомянул, что при развертке сервиса Outline нужна дополнительная инфраструктура, не из коробки
      В данном случае развертка и настройка почты


  1. slavb18
    16.09.2024 22:56

    В Affine self hosted всего 3 пользователей дает завести, а как вы завели 5 пользователей?


    1. andrey_27
      16.09.2024 22:56
      +1

      Через БД можно кому угодно выставить максимальный тариф, там до 10 человек будет


  1. AlexNixon
    16.09.2024 22:56
    +4

    Для своих заметок совершенно внезапно для себя пришел к такому селфхостед решению как dokuwiki. Вместо заметочницы веду вику. Не совсем аналог "записочниц", не то что бы я это всем рекомендую, но для меня это работает.

    ЗЫ приложений на мобилы нет, но оно открывается и нормально работает даже с IE на винмобайловых КПК


    1. rocket
      16.09.2024 22:56

      Синтаксис у dokuwiki очень сильно похож на markdown. Очень большой пласт сервисов-заметочников использует этот тип разметки. К сожалению, Evernote подсадил меня на некоторые опции форматирования, которые я пока не встречаю на других сервисах: это цветная заливка фона для текста и чекбоксы.


      1. AlexNixon
        16.09.2024 22:56

        на докувики куча плагинов, я чаще всего вообще использую WYSIWYG, заливка и чекбоксы тоже вроде есть (хотя мне не надо, поэтому я точно не помню)


    1. vvv1965
      16.09.2024 22:56
      +2

      + joplin с синхронизацией на что либо свое


    1. egribanov
      16.09.2024 22:56

      Если не очень много требований, то еще есть codex.doc, приятный редактор и можно хостить хоть на калькуляторе


  1. noxxx
    16.09.2024 22:56

    Siyuan 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

    Ну такое ...


    1. an1ik Автор
      16.09.2024 22:56

      Если у вас большие проекты, то перенос будет сложней, но Ctrl+C и Ctrl+V с Notion сохраняет практически все компоненты

      На импорт, действительно, принимается только кастомное расширение, но экспорт возможен в любом формате


      1. noxxx
        16.09.2024 22:56

        Меня больше расстроило отсутствие приложений.


  1. Itkocs
    16.09.2024 22:56
    +1

    Большое спасибо за статью.
    Попробую Siyuan и Docmost, не подскажите есть у них локализация (хочется подключать людей, у которых не очень хорошо с английским)?

    Outline не понравился тем, что их репозиторий с контейнером не качается из России, подходящего зеркало быстро не нашел. Пришел ставить через VPN.


    1. an1ik Автор
      16.09.2024 22:56

      Docmost в бете, Siyuan без выбора языка :(
      Код Open-source и если есть навыки, то можно пересобрать с русской версией. Однако, там многое интуитивно понятно, не думаю, что это будет большой проблемой


  1. jh0ns0n
    16.09.2024 22:56

    Множество остального ПО на текущий момент поддерживает частичный self-hosted: данные пользователей хранятся на сторонних облаках, хоть и сам сервер хоститься локально, например Appflowy

    Appflowy можно полностью локальным сделать используя Supabase


  1. eugenes_tp
    16.09.2024 22:56

    Что на счёт Anytype.io?


  1. coolibin98
    16.09.2024 22:56
    +3

    Попробуйте Obsidian


    1. freedomcoder
      16.09.2024 22:56

      Пользуюсь им для личного файло-заметочного хранилища.

      Плагинами настроил синхронизацию с S3 и шифрование отдельных заметок. Плагинов очень много, работают на всех платформах, довольно удобно. Стабильность синхронизации изредка хромает, может быть однажды руки дойдут исправить плагин


  1. AntonIXO
    16.09.2024 22:56

    А как же Anytype? Тоже selfhosted и с шифрованием? https://anytype.io/


    1. freedomcoder
      16.09.2024 22:56

      Чтобы пользоваться self-hosted версией необходимо пропатчить и собрать клиенты на все плаформы...


      1. AntonIXO
        16.09.2024 22:56

        Уже нет, в пк версии можно выставить свой сервер. Не смотрел на мобиле.


  1. godsha
    16.09.2024 22:56

    Возможно стоит перечислить весь список протестированных.

    Еще есть Trilium Next, довольно стабильный и функциональный. Из минусов однопользовательский и нет локализации, хотя сейчас у новой команды разработчиков это в ближайших планах.


  1. remendado
    16.09.2024 22:56

    А я в Редмайне, по старинке ))


  1. DBalashov
    16.09.2024 22:56

    Docmost совсем не на уровне Notion. Это ОЧЕНЬ простая конструкция. Приложений для android/ios нет, оффлайна соответственно тоже. Шаринга заметок - насколько я понимаю тоже нет, только для юзеров (ну тоесть через copy link оно всё равно просит логин-пароль и в инкогнито не открывается). При вставке картинки в ячейку таблицы - она (таблица) разбивается на две. Дальше копать не стал.

    Outline - мобильных приложений нет, только для Windows. Соответственно на телефоне/планшете оффлайна не будет никакого.

    Siyuan выглядит симпатично, однако я так и не понял как в приложении слинковать воркспейс с моим self-hosted сервером. Как-то очень неочевидно.


  1. tim8ska
    16.09.2024 22:56

    Была задача на отдельном open source решении писать инструкции для суппорта. Выбирал между Notion, Outline и Wiki.js, выбрали в итоге Wiki.js - все устраивает. В итоге там инструкции уже дле всей компании по одному из продуктов и в него заходит AI ассистент и забирает тексты для выдачи через OpenAI.