Files
init_scripts/README.MD
2025-08-27 15:33:28 +03:00

61 lines
2.0 KiB
Markdown

# Bootstrap
Роль поднимает Portainer и настраивает аутентификацию через модуль [caddy-security](https://github.com/greenpau/caddy-security).
Портал авторизации доступен на `auth.realy.nothing.help`, а настройки пользователей находятся в файле `users.json`.
## Пользователи
Файл `users.json` содержит массив пользователей. Пример:
```json
{
"users": [
{
"username": "deadcxap",
"email": "dead@cxap.space",
"password": "$2a$10$5x5iG8uDD/A.zxTCr14iUuLS1d8FgEiH8oi1de6pF2Nl/iZNDBEvG",
"roles": ["admin"]
}
]
}
```
Хэш пароля можно получить командой:
```bash
caddy hash-password --plaintext 'секрет'
```
Или на python:
```bash
pip install bcrypt
```
```bash
python -c "import bcrypt,sys; print(bcrypt.hashpw(sys.argv[1].encode(), bcrypt.gensalt(rounds=12)).decode())" 'секрет'
```
После изменения файла нужно перезапустить контейнер `caddy`.
## Защита контейнеров
Чтобы ограничить доступ к какому-либо сервису, добавьте к контейнеру метку:
```
caddy.import: auth_forward
```
и обычные метки для виртуального хоста и `reverse_proxy`. Пример для Portainer уже есть в `docker-compose.yml`.
После авторизации пользователь возвращается к запрошенному сервису.
### Открытие пути для API
Чтобы открыть некий путь без авторизации, добавить лейблы:
```
caddy.handle_path: /api/*
caddy.handle_path.0_reverse_proxy: "{{upstreams 9000}}"
```
и не прописывать им `caddy.import: auth_forward`.
И наоборот, аналогично можно закрыть авторизацией только нужный путь.