Bootstrap
Роль поднимает Portainer и настраивает аутентификацию через модуль caddy-security.
Портал авторизации доступен на auth.realy.nothing.help, а настройки пользователей находятся в файле users.json.
Пользователи
Файл users.json содержит массив пользователей. Пример:
{
"users": [
{
"username": "deadcxap",
"email": "dead@cxap.space",
"password": "$2a$10$5x5iG8uDD/A.zxTCr14iUuLS1d8FgEiH8oi1de6pF2Nl/iZNDBEvG",
"roles": ["admin"]
}
]
}
Хэш пароля можно получить командой:
caddy hash-password --plaintext 'секрет'
Или на python:
pip install bcrypt
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.
И наоборот, аналогично можно закрыть авторизацией только нужный путь.