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

Комментарии (0)