Compare commits

...

2 Commits

6 changed files with 84 additions and 64 deletions

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
.env
traefik/acme.json traefik/acme.json
traefik/certs/ traefik/certs/
traefik/traefik.log traefik/traefik.log

View File

@ -1,42 +1,38 @@
host: 0.0.0.0 # log:
port: 9091 # level: debug
logs_level: trace
jwt_secret: {{ env.Getenv "PRIVATE_DOMAIN" }}-jwt-secret theme: auto
authentication_backend: authentication_backend:
file: file:
path: /opt/authelia/users_database.yml path: /config/users_database.yml
session: session:
name: authelia_session # domain: SET BY ENV VARIABLE AUTHELIA_SESSION_DOMAIN
secret: {{ env.Getenv "PRIVATE_DOMAIN" }}-token-secret # secret: SET BY ENV VARIABLE AUTHELIA_SESSION_SECRET
domain: {{ env.Getenv "PRIVATE_DOMAIN" }}
expiration: 604800
inactivity: 172800
storage: storage:
local: local:
path: /opt/authelia/db.sqlite3 path: /config/db.sqlite3
totp:
issuer: {{ env.Getenv "PRIVATE_DOMAIN" }}
access_control: access_control:
default_policy: one_factor default_policy: two_factor
networks:
- name: internal
networks:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/18
rules: rules:
# Allow free access from local network # Allow free access from local network
- domain: "*" - domain:
- "*.se"
- "*.com"
networks: networks:
- 192.168.1.0/23 - internal
policy: bypass policy: bypass
regulation:
max_retries: 5
find_time: 120
ban_time: 180
notifier: notifier:
filesystem: filesystem:
filename: /opt/authelia/notification.txt filename: /config/notification.txt

View File

@ -25,8 +25,10 @@ services:
- EMAIL - EMAIL
- PRIVATE_DOMAIN - PRIVATE_DOMAIN
- PUBLIC_DOMAIN - PUBLIC_DOMAIN
- TRAEFIK_CERTIFICATERESOLVERS_LE_ACME_EMAIL
networks: networks:
web: web:
ipv4_address: 172.18.1.2
command: command:
- "--configFile=/data/traefik.yaml" - "--configFile=/data/traefik.yaml"
ports: ports:
@ -48,29 +50,20 @@ services:
traefik.http.routers.traefik.tls.certResolver: le traefik.http.routers.traefik.tls.certResolver: le
autoheal: "true" autoheal: "true"
authelia-config:
# Preprocess authelia configuration through gomplate
image: hairyhenderson/gomplate
environment:
- PRIVATE_DOMAIN
- PUBLIC_DOMAIN
volumes:
- ./authelia/configuration.yml:/data/input:ro
- authelia-config:/data/output
command: '--file=/data/input --out=/data/output/configuration.yml'
authelia: authelia:
container_name: authelia container_name: authelia
image: authelia/authelia image: authelia/authelia
restart: always restart: always
depends_on:
# config preprocessor should run first
- authelia-config
volumes: volumes:
- ./authelia:/opt/authelia - ./authelia:/config
- authelia-config:/etc/authelia/
environment: environment:
- ENVIRONMENT=dev # - ENVIRONMENT=dev
- NODE_TLS_REJECT_UNAUTHORIZED=1 - NODE_TLS_REJECT_UNAUTHORIZED=1
- AUTHELIA_JWT_SECRET
- AUTHELIA_SESSION_SECRET
- AUTHELIA_SESSION_DOMAIN
- AUTHELIA_TOTP_ISSUER
- TZ=Europe/Stockholm
networks: networks:
web: web:
healthcheck: healthcheck:
@ -95,26 +88,41 @@ services:
web: web:
labels: labels:
traefik.enable: true traefik.enable: true
traefik.http.routers.homer.rule: Host(`${PRIVATE_DOMAIN}`) traefik.http.routers.homer.rule: Host(`${PRIVATE_DOMAIN}`) || Host(`www.${PRIVATE_DOMAIN}`)
traefik.http.routers.homer.tls.certResolver: le traefik.http.routers.homer.tls.certResolver: le
traefik.http.routers.homer.entrypoints: websecure
# whoami-https: dozzle:
# image: containous/whoami image: amir20/dozzle
# networks: restart: always
# web: volumes:
# labels: - /var/run/docker.sock:/var/run/docker.sock
# traefik.enable: true networks:
# traefik.http.routers.wait-https.rule: Host(`wai-https.${PRIVATE_DOMAIN}`) web:
# traefik.http.routers.wait-https.tls.certResolver: le labels:
traefik.enable: true
traefik.http.routers.dozzle.rule: Host(`logs.${PRIVATE_DOMAIN}`)
traefik.http.routers.dozzle.tls.certResolver: le
traefik.http.routers.dozzle.middlewares: auth@file
# whoami-auth:
# image: containous/whoami # labels:
# networks: # The following three labels are always needed. Make sure to replace <SERVICE> with a unique name
# web: # traefik.enable: true
# macvlan: # traefik.http.routers.<SERVICE>.tls.certResolver: le
# labels: # traefik.http.routers.<SERVICE>.rule: Host(`<SERVICE>.${PRIVATE_DOMAIN}`)
# traefik.enable: true
# traefik.http.routers.wai-auth.rule: Host(`wai-auth.${PRIVATE_DOMAIN}`) # Alternatives:
# traefik.http.routers.wai-auth.tls.certResolver: le # traefik.http.routers.<SERVICE>.rule: Host(`<SERVICE>.${PUBLIC_DOMAIN}`)
# traefik.http.routers.wai-auth.middlewares: auth@file # traefik.http.routers.<SERVICE>.rule: Host(`<SERVICE>.${PRIVATE_DOMAIN}`) || HOST(`<SERVICE>.${PUBLIC_DOMAIN}`)
# Require authentication:
# traefik.http.routers.<SERVICE>.middlewares: auth@file
# If more than one port is exposed by the container:
# traefik.http.services.<SERVICE>.loadbalancer.server.port: <PORT>
# If container uses more than one network:
# traefik.docker.network: web
# Restart automatically if healthchech fails:
# autoheal: "true"

View File

@ -9,7 +9,12 @@ http:
proxmox: proxmox:
loadBalancer: loadBalancer:
servers: servers:
- url: http://192.168.0.10:8006 - url: https://192.168.0.10:8006
prusa:
loadBalancer:
servers:
- url: http://192.168.0.14
routers: routers:
pfsense: pfsense:
@ -26,4 +31,11 @@ http:
- auth - auth
tls: tls:
certResolver: le certResolver: le
prusa:
service: prusa
rule: Host(`prusa.{{env "PRIVATE_DOMAIN"}}`)
middlewares:
- auth
tls:
certResolver: le

View File

@ -13,7 +13,8 @@ http:
# Catch all requests to the http entrypoint and redirect them to https # Catch all requests to the http entrypoint and redirect them to https
service: http-catchall service: http-catchall
rule: hostregexp(`{host:.+}`) rule: hostregexp(`{host:.+}`)
entrypoint: web entryPoints:
- web
middlewares: middlewares:
- redir - redir

View File

@ -12,7 +12,7 @@ providers:
log: log:
filePath: /data/traefik.log filePath: /data/traefik.log
level: DEBUG level: INFO
entryPoints: entryPoints:
web: web:
@ -23,7 +23,8 @@ entryPoints:
certificatesResolvers: certificatesResolvers:
le: le:
acme: acme:
email: '{{ env "EMAIL" }}' # caServer: https://acme-staging-v02.api.letsencrypt.org/directory
# email: SET BY ENV VARIABLE TRAEFIK_CERTIFICATERESOLVERS_LE_ACME_EMAIL
storage: /data/acme.json storage: /data/acme.json
httpChallenge: httpChallenge:
entrypoint: web entrypoint: web