Authentik
WARNING
Текст не отформатирован
Единая точка входа
В компанию могут поступать новые сотрудники, в случае их найма/увальнения придётся добавлять/лишать доступа. Также бывают визитеры, люди которым нужен временный доступ к ресурсам компании. Речь идёт не только про доступ к wifi (freeradius мы не будем рассматривать), а возможность получить по одному логину/паролю ко всем сервисам компании.
Создайте в portainer
сеть:
Networks->Add network+
- Name:
intra_net
- Driver:
Bridge
Мы будем размещать остальные ресурсы в отдельных стэках, для общения назначаем общую внешнию сеть у каждого контейнера.
networks:
- intra_net
А в конце добавляем
networks:
intra_net:
external: true
В данном файле все контейнеры находятся в одной сети, поэтому используем depends_on:
Когда будем делать другой стэк, будем уже использовать
external_links:
- postgresql:postgresql
Создайте новые стэк в окружение portainer agent под названием intra
. Перейдите в редактор и поместите код докер компоуз, и содержимое env файла (при редактировании переменных окружения выберите advanced)
assets/docker/s1/docker-compose.yml
version: "3.8"
services:
postgresql:
image: postgres:16.2-alpine
container_name: postgres
healthcheck:
test: [ "CMD-SHELL", "pg_isready -d $${PG_DB} -U $${PG_USER}" ]
start_period: 20s
interval: 30s
retries: 5
timeout: 5s
ports:
- "5432:5432"
environment:
- POSTGRES_USER=${PG_USER:-authentik}
- POSTGRES_PASSWORD=${PG_PASS}
env_file:
- stack.env
volumes:
- postgres:/var/lib/postgresql/data
- entry_db:/docker-entrypoint-initdb.d
networks:
- intra_net
mongodb:
image: docker.io/bitnami/mongodb:5.0
container_name: mongodb
restart: unless-stopped
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
ports:
- "27017:27017"
volumes:
- mongo_data:/bitnami/mongodb
env_file:
- stack.env
environment:
MONGODB_REPLICA_SET_MODE: primary
MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
MONGODB_INITIAL_PRIMARY_HOST: ${MONGODB_INITIAL_PRIMARY_HOST:-mongodb}
MONGODB_INITIAL_PRIMARY_PORT_NUMBER: ${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}
MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
MONGODB_ENABLE_JOURNAL: ${MONGODB_ENABLE_JOURNAL:-true}
ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}
networks:
- intra_net
redis:
image: redis:alpine
container_name: redis
command: --save 60 1 --loglevel warning
restart: unless-stopped
healthcheck:
test: [ "CMD-SHELL", "redis-cli ping | grep PONG" ]
start_period: 20s
interval: 30s
retries: 5
timeout: 3s
env_file:
- stack.env
volumes:
- redis:/data
networks:
- intra_net
authentik:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.1}
container_name: 'authentik'
restart: unless-stopped
command: server
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
env_file:
- stack.env
volumes:
- ./media:/media
- ./custom-templates:/templates
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
depends_on:
- postgresql
- redis
networks:
- intra_net
- authentik
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.1}
container_name: 'authentik-worker'
restart: unless-stopped
command: worker
healthcheck:
test: ak healthcheck
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: ${PG_HOST:-postgresql}
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
env_file:
- stack.env
# `user: root` and the docker socket volume are optional.
# See more for the docker socket integration here:
# https://goauthentik.io/docs/outposts/integrations/docker
# Removing `user: root` also prevents the worker from fixing the permissions
# on the mounted folders, so when removing this make sure the folders have the correct UID/GID
# (1000:1000 by default)
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./media:/media
- ./certs:/certs
- ./custom-templates:/templates
depends_on:
- postgresql
- redis
networks:
- intra_net
tunnel:
container_name: s1-cloudflared-tunnel
image: cloudflare/cloudflared
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
networks:
- authentik
volumes:
mongo_data:
driver: local
entry_db:
driver: local
postgres:
driver: local
database:
driver: local
redis:
driver: local
networks:
authentik:
external: true
intra_net:
external: true
TUNNEL_TOKEN
можно почитать в cloudflaredAUTHENTIK_SECRET_KEY
можно создать утилитойpwgen
илиopenssl
. Описано в ориг. доке- прикрепление почты и связка gmail почты с доменом cloudflare, описано пошагово в комментариях
/assets/docker/s1/env.txt
PG_DB=intra
PG_USER=docker
PG_PASS=docker
MONGO_USERNAME=docker
MONGO_PASSWORD=docker
TUNNEL_TOKEN=*******************************************************************************************
COMPOSE_PORT_HTTP=3001
COMPOSE_PORT_HTTPS=3002
AUTHENTIK_SECRET_KEY=*************************************************
AUTHENTIK_ERROR_REPORTING__ENABLED=true
AUTHENTIK_EMAIL__HOST=smtp.gmail.com
AUTHENTIK_EMAIL__PORT=25
AUTHENTIK_EMAIL__USERNAME=***@gmail.com
AUTHENTIK_EMAIL__PASSWORD=*************
AUTHENTIK_EMAIL__USE_TLS=true
AUTHENTIK_EMAIL__TIMEOUT=10
[email protected]