Files
init_scripts/admin/bootstrap

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