From dbbabb03d94e6d082208a9a95e26d657b50d8d6a Mon Sep 17 00:00:00 2001 From: deadcxap <36386824+deadcxap@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:41:10 +0300 Subject: [PATCH] docs: add auth portal usage guide --- .env | 12 +++--------- README.MD | 40 ++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 23 ++--------------------- users.json | 10 ++++++++++ 4 files changed, 55 insertions(+), 30 deletions(-) create mode 100644 README.MD create mode 100644 users.json diff --git a/.env b/.env index b612f38..fb39cb9 100644 --- a/.env +++ b/.env @@ -2,12 +2,6 @@ # для зоны nothing.help — не используйте глобальный API‑ключ!) CF_API_TOKEN=jRq98TKXi2rYYtG42x9w1M8EOElt5V5BOkA4TBoY -# Секрет для cookie (ровно 32 латинских буквы/цифры) -# openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32 -TINYAUTH_SECRET=TtbYjkb1ZfzyXG7D6Q3FR6Ri8Pw2K98i - -# Пользователи Tinyauth (формат для docker/compose!) -# Пример с одним юзером admin: -# admin:$2a$10$yVb0... (bcrypt) -# Если несколько — через запятую. -TINYAUTH_USERS='deadcxap:$$2a$$10$$5x5iG8uDD/A.zxTCr14iUuLS1d8FgEiH8oi1de6pF2Nl/iZNDBEvG' +# Пользователи для авторизации описываются в файле users.json +# рядом с docker-compose.yml. Хэши паролей можно получить +# командой `caddy hash-password --plaintext "пароль"`. diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..4bbd1f3 --- /dev/null +++ b/README.MD @@ -0,0 +1,40 @@ +# 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 'секрет' +``` + +После изменения файла нужно перезапустить контейнер `caddy`. + +## Защита контейнеров + +Чтобы ограничить доступ к какому-либо сервису, добавьте к контейнеру метку: + +``` +caddy.import: auth_portal_forwarder +``` + +и обычные метки для виртуального хоста и `reverse_proxy`. Пример для Portainer уже есть в `docker-compose.yml`. +После авторизации пользователь возвращается к запрошенному сервису. diff --git a/docker-compose.yml b/docker-compose.yml index d2f711f..edd390d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,29 +16,10 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro - caddy_data:/data - ./Caddyfile:/etc/caddy/Caddyfile:ro + - ./users.json:/data/users.json:ro networks: [proxy] command: ["caddy","docker-proxy","--caddyfile-path=/etc/caddy/Caddyfile","--docker-sockets","unix:///var/run/docker.sock"] - tinyauth: - image: ghcr.io/steveiliop56/tinyauth:v3 - container_name: tinyauth - restart: unless-stopped - environment: - - LOG_LEVEL=2 - - APP_URL=https://auth.realy.nothing.help - - SECRET=${TINYAUTH_SECRET} - - USERS=${TINYAUTH_USERS} - - COOKIE_SECURE=true - - DISABLE_CONTINUE=true - - APP_TITLE="Оставь надежду, всяк сюда входящий..." - - FORGOT_PASSWORD_MESSAGE="Штош, сочувствую, но нчием помочь не могу." - expose: ["3000"] - networks: [proxy] - labels: - caddy: auth.realy.nothing.help - caddy.encode: zstd gzip - caddy.reverse_proxy: "{{upstreams 3000}}" - portainer: image: portainer/portainer-ce:latest container_name: portainer @@ -53,7 +34,7 @@ services: labels: caddy: port.realy.nothing.help caddy.encode: zstd gzip - caddy.import: tinyauth_forwarder + caddy.import: auth_portal_forwarder caddy.reverse_proxy: "{{upstreams 9000}}" volumes: diff --git a/users.json b/users.json new file mode 100644 index 0000000..8dd6bc9 --- /dev/null +++ b/users.json @@ -0,0 +1,10 @@ +{ + "users": [ + { + "username": "deadcxap", + "email": "dead@cxap.space", + "password": "$2a$10$5x5iG8uDD/A.zxTCr14iUuLS1d8FgEiH8oi1de6pF2Nl/iZNDBEvG", + "roles": ["admin"] + } + ] +}