# 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`. И наоборот, аналогично можно закрыть авторизацией только нужный путь.