Skip to content

Commit

Permalink
Simplified docker-compose. Readme updated. Closes #239.
Browse files Browse the repository at this point in the history
  • Loading branch information
impworks committed Dec 15, 2023
1 parent 0be2e4b commit 8e28924
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 42 deletions.
27 changes: 15 additions & 12 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,35 +28,38 @@ A family wiki and photoalbum engine (in Russian).
<a href="https://user-images.githubusercontent.com/604496/46574268-43443680-c9a9-11e8-974f-f8a60fbeaa74.png"><img src="https://user-images.githubusercontent.com/604496/46574297-a504a080-c9a9-11e8-8612-d3e5cd1592a4.png" /></a>

## Installation via Docker
1. Download the [docker-compose](docker-compose.yml).
1. Download the [docker-compose.lite.yml](docker-compose.lite.yml).

2. _Optional_:

Configure your Bonsai instance to use HTTPS and external auth for better security.
This requires a bit of work, so if you are just playing around you can skip this step.
Configure your Bonsai instance to use HTTPS for better security.

You can use any vendor-specific options: e.g. Cloudflare Tunnel (free, fairly easy to configure, but requires a domain), Synology DDNS (free, very easy, requires a Synology NAS device), etc.

This requires a bit of work, so if you just want to give Bonsai a quick spin - feel free to skip or postpone this one and the next.

3. _Optional_:

Create a [Google Authorization app](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins?view=aspnetcore-6.0) (or Yandex / VK.com).

Modify `docker-compose.yml`:
Modify `docker-compose.lite.yml`:

* Save Google authorization credentials to `Auth__Google__ClientId` and `Auth__Google__ClientSecret` config properties
* Set `Auth__AllowPasswordAuth=false` if you want to disable the less-secure password authorization
* Replace `@@YOUR_EMAIL@@` with your email address (for LetsEncrypt auto-SSL)
* Replace `@@DOMAIN@@` with the domain name to use (or you can use your IP with nip.io, like `192.168.1.1.nip.io`)
* Uncomment two lines with ``Host(`@@DOMAIN@@`)``
* Comment two lines with ``PathPrefix(`/`)``

3. Bring everything up using `docker compose`:


4. Bring everything up using `docker compose`:
```
docker-compose up -d
```
4. After everything is brought up Bonsai will listen on ports 80 and 443.
5. After everything is brought up Bonsai will listen on port `8080`.

## Development (on Windows)

For development, you will need the following:

* [.NET 7](https://dotnet.microsoft.com/en-us/download/dotnet/7.0): the main runtime for Bonsai
* [.NET 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0): the main runtime for Bonsai

1. Install [NodeJS 14](https://nodejs.org/en/)
2. Install [PostgreSQL server 9.6](https://www.openscg.com/bigsql/postgresql/installers.jsp/)
Expand Down Expand Up @@ -144,4 +147,4 @@ Please keep the following facts in mind:
* Any user account can only have one authorization method: password, or Facebook, or Google, etc.
* It is not possible to change the authorization type for an account once it has been created.
* Password-based accounts can be locked out if there are too many consecutive failed login attempts.
* Account password can only be reset by an administrator manually. If you only have one admin account, it is password-based, and the password is lost - there's no way to regain access besides direct database manipulation!
* Account password can only be reset by an administrator manually. If you only have one admin account, it is password-based, and the password is lost - there's no way to regain access besides direct database manipulation!
44 changes: 14 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,35 +28,36 @@
<a href="https://user-images.githubusercontent.com/604496/46574268-43443680-c9a9-11e8-974f-f8a60fbeaa74.png"><img src="https://user-images.githubusercontent.com/604496/46574297-a504a080-c9a9-11e8-8612-d3e5cd1592a4.png" /></a>

## Установка с помощью Docker
1. Скачайте файл [docker-compose](docker-compose.yml).
1. Скачайте файл [docker-compose.lite.yml](docker-compose.lite.yml).

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

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

Вы можете использовать любые доступные сервисы, например [Cloudflare Tunnel](https://github.com/impworks/bonsai/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D1%8F-Cloudflare) (бесплатно, несложно, нужен домен), Synology DDNS (бесплатно, просто, нужен Synology NAS), или другие.

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

3. _Опционально_:

Создайте [приложение авторизации Google](https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins?view=aspnetcore-6.0) (или Yandex, Вконтакте).

Отредактируйте файл `docker-compose.yml`:
Отредактируйте файл `docker-compose.lite.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(`/`)``
* Задайте настройку `Auth__AllowPasswordAuth=false`, если хотите отключить менее безопасную авторизацию по паролю

3. Запустите все контейнеры с помощью `docker compose`:
4. Запустите все контейнеры с помощью `docker compose`:
```
docker-compose up -d
```
4. После старта Bonsai будет доступен на портах 80 и 443.
5. После старта Bonsai будет доступен на порту `8080`.

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

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

* [.NET 7](https://dotnet.microsoft.com/download/dotnet/7.0): основной рантайм для Bonsai
* [.NET 8](https://dotnet.microsoft.com/download/dotnet/8.0): основной рантайм для Bonsai

1. Установите [NodeJS 14](https://nodejs.org/en/)
2. Установите [PostgreSQL server 9.6](https://www.openscg.com/bigsql/postgresql/installers.jsp/)
Expand Down Expand Up @@ -145,21 +146,4 @@ OAuth является предпочтительным: он проще для
* У одной учетной записи может быть только один способ авторизации: или пароль, или 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>'
```

* Пароль может сменить только администратор вручную. Если у вас только одна учетная запись администратора и вы забыли от нее пароль - восстановить доступ можно только с помощью манипуляций с базой данных!
30 changes: 30 additions & 0 deletions docker-compose.lite.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
version: "3.3"
services:
bonsai:
image: impworks/bonsai:latest
restart: unless-stopped
volumes:
- images:/app/wwwroot/media
ports:
- "8080:80"
environment:
- ConnectionStrings__Database=Server=postgres;Port=5432;Database=bonsai;User Id=bonsai;Password=test;Persist Security Info=true
- Auth__AllowPasswordAuth=true
- ASPNETCORE_ENVIRONMENT=Production
stop_signal: SIGKILL
links:
- postgres

postgres:
image: postgres:12.4
restart: unless-stopped
volumes:
- database:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: test
POSTGRES_USER: bonsai
POSTGRES_DB: bonsai

volumes:
database: {}
images: {}

0 comments on commit 8e28924

Please sign in to comment.