Bonsai
Фамильный вики-движок и фотоальбом.
Демо: попробовать в действии
Возможности
- Страницы с разметкой Markdown
- Медиа-файлы: фото, видео, планируется поддержка документов PDF
- Отметки людей на фото
- Родственные связи (с проверками и автоматическим выводом)
- Факты (дата рождения, пол, группа крови, владение языками, хобби, и так далее)
- Контроль доступа по ролям: администратор, редактор, читатель, гость
- История правок: для любой страницы или медиа-файла хранится история с diff'ами и возможностью отката к предыдущей версии
Скриншоты
Публичные страницы:
Панель администратора:
Установка с помощью Docker
-
Скачайте файл docker-compose.
-
Опционально:
Настройте доступ по HTTPS и внешнюю авторизацию для обеспечения максимальной безопасности ваших данных. Это трудоемкий шаг, поэтому если вы просто хотите попробовать Bonsai своими руками - его можно пропустить или отложить.
Создайте приложение авторизации Google (или Yandex, Вконтакте).
Отредактируйте файл
docker-compose.yml
:- Впишите данные для авторизации Google в поля
Auth__Google__ClientId
иAuth__Google__ClientSecret
- Задайте настройку
Auth__AllowPasswordAuth=false
если хотите отключить менее безопасную авторизацию по паролю - Замените заглушку
@@YOUR_EMAIL@@
на свой адрес email (для автоматической генерации HTTPS-сертификата LetsEncrypt) - Замените заглушку
@@DOMAIN@@
на доменное имя (если у вас только IP-адрес, используйте nip.io, например192.168.1.1.nip.io
) - Разкомментируйте две строки с
Host(`@@DOMAIN@@`)
- Закомментируйте две строки с
PathPrefix(`/`)
- Впишите данные для авторизации Google в поля
-
Запустите все контейнеры с помощью
docker compose
:docker-compose up -d
-
После старта Bonsai будет доступен на портах 80 и 443.
Разработка (на Windows)
Для участия в разработке понадобится:
- .NET 7: основной рантайм для Bonsai
- Установите NodeJS 14
- Установите PostgreSQL server 9.6
- Скачайте shared-сборку ffmpeg для вашей операционной системы и извлеките данные в папку
External/ffmpeg
в корне проекта (необходимы исполняемые файлыffmpeg
иffprobe
). - Создайте файл
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
}
}
-
Опционально, но рекомендуемо:
Создайте приложение авторизации Google (или Yandex, Вконтакте).
Впишите данные для авторизации в файл
appsettings.Development.json
и установите свойствоAllowPasswordAuth
в значениеfalse
:{ "Auth": { "AllowPasswordAuth": false, "Google": { "ClientId": "<...>", "ClientSecret": "<...>" }, "Yandex": { "ClientId": "<...>", "ClientSecret": "<...>" }, "Vkontakte": { "ClientId": "<...>", "ClientSecret": "<...>" } } }
-
Создайте базу данных:
dotnet ef database update
-
Запустите сборку стилей и скриптов:
npm install npm run build
-
Запустите приложение (из Visual Studio или через
dotnet run
).
Безопасность
Резервные копии данных
Если вам ценна информация, которую вы заносите в Bonsai, обязательно НАСТРОЙТЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ.
Копировать необходимо следующие данные:
- Базу данных (десятки мегабайт)
- Загруженные медиа-файлы в папке
wwwroot/media
(могут быть гигабайты)
Существует множество подходов, платных и бесплатных: загрузка в облако, копирование на дополнительные носители и т.д. Выбор наиболее уместного подхода, с учетом вашего бюджета и объема данных, остается за вами.
Способы авторизации
Bonsai поддерживает 2 метода авторизации: OAuth с использованием внешних сайтов и авторизация по паролю.
OAuth является предпочтительным: он проще для пользователей, более безопасный и универсальный. Если можете, используйте его! Для этого вам потребуется создать приложение авторизации на сайте Google, ВКонтакте или в Яндексе, как написано в инструкции. Можно подключить несколько авторизационных приложений одновременно - пользователи смогут выбирать из них то, которое им больше по душе.
Также вы можете создать учетную запись с авторизацией по логину и паролю. Она пригодится в двух случаях:
- Быстро попробовать Bonsai в действии (установка без создания приложений значительно быстрее)
- Дать доступ родственникам, которые не зарегистрированы в соцсетях
Несколько фактов об авторизации, которые стоит иметь в виду:
- У одной учетной записи может быть только один способ авторизации: или пароль, или Google, или Вконтакте, и т.д.
- После создания учетной записи поменять тип авторизации нельзя.
- Учетные записи с авторизацией по паролю автоматически блокируются, если пароль был введен неверно слишком много раз подряд.
- Пароль может сменить только администратор вручную. Если у вас только одна учетная запись администратора и вы забыли от нее пароль - восстановить доступ можно только с помощью манипуляций с базой данных!
Авторизация через Facebook
С лета 2021 года Facebook поменял правила пользования авторизационными приложениями. Приложение должно периодически проходить ручную модерацию, для чего администратор Bonsai должен создать специальную учетную запись и предоставить данные от нее в Facebook. Данный способ имеет смысл на публичных сервисах с автоматической регистрацией, но в контексте Bonsai противоречит основной идее: хранимые данные о семье не должны быть доступны третьим лицам. В связи с этим авторизация через Facebook больше не поддерживается.
Существующие учетные записи, привязанные к Facebook, необходимо перевести в тип "авторизация по паролю" с помощью SQL-скрипта:
UPDATE "public"."AspNetUsers"
SET
"PasswordHash" = 'AQAAAAEAACcQAAAAEOKtY+Y/P0WYToOv6fhFyQKDRj8ZBPbZBNX72ilP9a9jsrk+MsX2L0Q1FVUFkbQ7SQ==',
"SecurityStamp" = 'OFYAMDMHVW5CK5Y3W6OJIKQX4INUIZC2',
"AuthType" = 1
WHERE
"Email" = '<EMAIL>'