docs: add auth portal usage guide

This commit is contained in:
deadcxap
2025-08-27 13:41:10 +03:00
parent 42cdd36c81
commit dbbabb03d9
4 changed files with 55 additions and 30 deletions
+3 -9
View File
@@ -2,12 +2,6 @@
# для зоны nothing.help — не используйте глобальный API‑ключ!) # для зоны nothing.help — не используйте глобальный API‑ключ!)
CF_API_TOKEN=jRq98TKXi2rYYtG42x9w1M8EOElt5V5BOkA4TBoY CF_API_TOKEN=jRq98TKXi2rYYtG42x9w1M8EOElt5V5BOkA4TBoY
# Секрет для cookie (ровно 32 латинских буквы/цифры) # Пользователи для авторизации описываются в файле users.json
# openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32 # рядом с docker-compose.yml. Хэши паролей можно получить
TINYAUTH_SECRET=TtbYjkb1ZfzyXG7D6Q3FR6Ri8Pw2K98i # командой `caddy hash-password --plaintext "пароль"`.
# Пользователи Tinyauth (формат для docker/compose!)
# Пример с одним юзером admin:
# admin:$2a$10$yVb0... (bcrypt)
# Если несколько — через запятую.
TINYAUTH_USERS='deadcxap:$$2a$$10$$5x5iG8uDD/A.zxTCr14iUuLS1d8FgEiH8oi1de6pF2Nl/iZNDBEvG'
+40
View File
@@ -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`.
После авторизации пользователь возвращается к запрошенному сервису.
+2 -21
View File
@@ -16,29 +16,10 @@ services:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
- caddy_data:/data - caddy_data:/data
- ./Caddyfile:/etc/caddy/Caddyfile:ro - ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./users.json:/data/users.json:ro
networks: [proxy] networks: [proxy]
command: ["caddy","docker-proxy","--caddyfile-path=/etc/caddy/Caddyfile","--docker-sockets","unix:///var/run/docker.sock"] 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: portainer:
image: portainer/portainer-ce:latest image: portainer/portainer-ce:latest
container_name: portainer container_name: portainer
@@ -53,7 +34,7 @@ services:
labels: labels:
caddy: port.realy.nothing.help caddy: port.realy.nothing.help
caddy.encode: zstd gzip caddy.encode: zstd gzip
caddy.import: tinyauth_forwarder caddy.import: auth_portal_forwarder
caddy.reverse_proxy: "{{upstreams 9000}}" caddy.reverse_proxy: "{{upstreams 9000}}"
volumes: volumes:
+10
View File
@@ -0,0 +1,10 @@
{
"users": [
{
"username": "deadcxap",
"email": "dead@cxap.space",
"password": "$2a$10$5x5iG8uDD/A.zxTCr14iUuLS1d8FgEiH8oi1de6pF2Nl/iZNDBEvG",
"roles": ["admin"]
}
]
}