/bonsai

Self-hosted family wiki engine / photoalbum

Primary LanguageC#MIT LicenseMIT

Bonsai

Фамильный вики-движок и фотоальбом.

Возможности

  • Страницы с разметкой Markdown
  • Медиа-файлы: фото, видео, планируется поддержка документов PDF
  • Отметки людей на фото
  • Родственные связи (с проверками и автоматическим выводом)
  • Факты (дата рождения, пол, группа крови, владение языками, хобби, и так далее)
  • Контроль доступа по ролям: администратор, редактор, читатель, гость
  • История правок: для любой страницы или медиа-файла хранится история с diff'ами и возможностью отката к предыдущей версии

Скриншоты

Публичные страницы:

Панель администратора:

Установка с помощью Docker

  1. Скачайте файл docker-compose.

  2. Опционально:

    Настройте доступ по HTTPS и внешнюю авторизацию для обеспечения максимальной безопасности ваших данных. Это трудоемкий шаг, поэтому если вы просто хотите попробовать Bonsai своими руками - его можно пропустить или отложить.

    Создайте приложение авторизации Facebook (или Google, Yandex, Вконтакте).

    Отредактируйте файл docker-compose.yml:

    • Впишите данные для авторизации Facebook в поля Auth__Facebook__AppId и Auth__Facebook__AppSecret
    • Задайте настройку Auth__AllowPasswordAuth=false если хотите отключить менее безопасную авторизацию по паролю
    • Замените заглушку @@YOUR_EMAIL@@ на свой адрес email (для автоматической генерации HTTPS-сертификата LetsEncrypt)
    • Замените заглушку @@DOMAIN@@ на доменное имя (если у вас только IP-адрес, используйте xip.io, например 192.168.1.1.xip.io)
    • Разкомментируйте две строки с Host(`@@DOMAIN@@`)
    • Закомментируйте две строки с PathPrefix(`/`)
  3. Запустите все контейнеры с помощью docker compose:

    docker-compose up -d
    
  4. После старта Bonsai будет доступен на портах 80 и 443.

Разработка (на Windows)

Для участия в разработке понадобится:

  1. Установите NodeJS (10+)

  2. Установите PostgreSQL server (9.6+)

  3. Скачайте shared-сборку ffmpeg для вашей операционной системы и извлеките данные в папку External/ffmpeg в корне проекта (необходимы исполняемые файлы ffmpeg и ffprobe).

  4. Создайте файл appsettings.Development.json, пропишите строку подключения к БД:

    {
      "ConnectionStrings": {
        "Database": "Server=127.0.0.1;Port=5432;Database=bonsai;User Id=<login>;Password=<password>;Persist Security Info=true"
      },
      "Auth": {
        "AllowPasswordAuth": true
      } 
    }
    
  5. Опционально, но рекомендуемо:

    Создайте приложение авторизации Facebook (или Google, Yandex, Вконтакте).

    Впишите данные для авторизации в файл appsettings.Development.json и установите свойство AllowPasswordAuth в значение false:

    {
        "Auth": {
    	    "AllowPasswordAuth": false,
    	    "Facebook": {
    		  "AppId": "<...>",
    		  "AppSecret": "<...>" 
    		},
    		"Google": {
    		  "ClientId": "<...>",
    		  "ClientSecret": "<...>" 
    		},
    		"Yandex": {
    		  "ClientId": "<...>",
    		  "ClientSecret": "<...>" 
    		},
    		"Vkontakte": {
    		  "ClientId": "<...>",
    		  "ClientSecret": "<...>" 
    		}
    	}
    }
    
  6. Создайте базу данных:

    dotnet ef database update
    
  7. Запустите сборку стилей и скриптов:

    npm install
    npm run build
    
  8. Запустите приложение (из Visual Studio или через dotnet run).

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

Резервные копии данных

Если вам ценна информация, которую вы заносите в Bonsai, обязательно НАСТРОЙТЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ.

Копировать необходимо следующие данные:

  • Базу данных (десятки мегабайт)
  • Загруженные медиа-файлы в папке wwwroot/media (могут быть гигабайты)

Существует множество подходов, платных и бесплатных: загрузка в облако, копирование на дополнительные носители и т.д. Выбор наиболее уместного подхода, с учетом вашего бюджета и объема данных, остается за вами.

Способы авторизации

Bonsai поддерживает 2 метода авторизации: OAuth с использованием внешних сайтов и авторизация по паролю.

OAuth является предпочтительным: он проще для пользователей, более безопасный и универсальный. Если можете, используйте его! Для этого вам потребуется создать приложение авторизации на сайте Facebook, Google, ВКонтакте или в Яндексе, как написано в инструкции. Можно подключить несколько авторизационных приложений одновременно - пользователи смогут выбирать из них то, которое им больше по душе.

Также вы можете создать учетную запись с авторизацией по логину и паролю. Она пригодится в двух случаях:

  • Быстро попробовать Bonsai в действии (установка без создания приложений значительно быстрее)
  • Дать доступ родственникам, которые не зарегистрированы в соцсетях

Несколько фактов об авторизации, которые стоит иметь в виду:

  • У одной учетной записи может быть только один способ авторизации: или пароль, или Facebook, или Google, и т.д.
  • После создания учетной записи поменять тип авторизации нельзя.
  • Учетные записи с авторизацией по паролю автоматически блокируются, если пароль был введен неверно слишком много раз подряд.
  • Пароль может сменить только администратор вручную. Если у вас только одна учетная запись администратора и вы забыли от нее пароль - восстановить доступ можно только с помощью манипуляций с базой данных!