Skip to content
algolia

Authentik

Кол-во слов
243 words
Время чтения
2 минуты

WARNING

Текст не отформатирован

Единая точка входа

В компанию могут поступать новые сотрудники, в случае их найма/увальнения придётся добавлять/лишать доступа. Также бывают визитеры, люди которым нужен временный доступ к ресурсам компании. Речь идёт не только про доступ к wifi (freeradius мы не будем рассматривать), а возможность получить по одному логину/паролю ко всем сервисам компании.

Создайте в portainer сеть:

Networks->Add network+

  • Name: intra_net
  • Driver: Bridge

Мы будем размещать остальные ресурсы в отдельных стэках, для общения назначаем общую внешнию сеть у каждого контейнера.

yaml
networks:
      - intra_net

А в конце добавляем

yaml
networks:
  intra_net:
    external: true

В данном файле все контейнеры находятся в одной сети, поэтому используем depends_on:

Когда будем делать другой стэк, будем уже использовать

yaml
    external_links:
      - postgresql:postgresql

Создайте новые стэк в окружение portainer agent под названием intra. Перейдите в редактор и поместите код докер компоуз, и содержимое env файла (при редактировании переменных окружения выберите advanced)

assets/docker/s1/docker-compose.yml
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 можно почитать в cloudflared
  • AUTHENTIK_SECRET_KEY можно создать утилитой pwgen или openssl. Описано в ориг. доке
  • прикрепление почты и связка gmail почты с доменом cloudflare, описано пошагово в комментариях
/assets/docker/s1/env.txt
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]

Как добавить нормальную авторизацию и кнопку "Восстановление пароля"

Contributors

shalotts

Changelog

Last updated: