add docker-compose and traefik configurations for Authentik and NAS integration
This commit is contained in:
parent
4d07c78971
commit
127773c908
5 changed files with 160 additions and 66 deletions
|
|
@ -0,0 +1,90 @@
|
||||||
|
services:
|
||||||
|
postgresql:
|
||||||
|
image: docker.io/library/postgres:16-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
|
||||||
|
start_period: 20s
|
||||||
|
interval: 30s
|
||||||
|
retries: 5
|
||||||
|
timeout: 5s
|
||||||
|
volumes:
|
||||||
|
- database:/var/lib/postgresql/data
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: ${PG_PASS}
|
||||||
|
POSTGRES_USER: ${PG_USER:-authentik}
|
||||||
|
POSTGRES_DB: ${PG_DB:-authentik}
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
networks:
|
||||||
|
- internal
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: docker.io/library/redis:alpine
|
||||||
|
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
|
||||||
|
volumes:
|
||||||
|
- redis:/data
|
||||||
|
networks:
|
||||||
|
- internal
|
||||||
|
|
||||||
|
server:
|
||||||
|
image: ghcr.io/goauthentik/server:2024.10.1
|
||||||
|
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}
|
||||||
|
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
|
||||||
|
volumes:
|
||||||
|
- ./media:/media
|
||||||
|
- ./custom-templates:/templates
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
networks:
|
||||||
|
- internal
|
||||||
|
- proxy # Moet in proxy netwerk om door Traefik gezien te worden
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
# De URL waarop Authentik bereikbaar wordt:
|
||||||
|
- "traefik.http.routers.authentik.rule=Host(`authentik.stackbabber.nl`)"
|
||||||
|
- "traefik.http.routers.authentik.entrypoints=web"
|
||||||
|
- "traefik.http.services.authentik.loadbalancer.server.port=9000"
|
||||||
|
|
||||||
|
worker:
|
||||||
|
image: ghcr.io/goauthentik/server:2024.10.1
|
||||||
|
command: worker
|
||||||
|
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}
|
||||||
|
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
|
||||||
|
depends_on:
|
||||||
|
- postgresql
|
||||||
|
- redis
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
networks:
|
||||||
|
- internal
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
database:
|
||||||
|
driver: local
|
||||||
|
redis:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
internal:
|
||||||
|
driver: bridge
|
||||||
15
1. docker-stacks/traefik/data/rules/external.yml
Normal file
15
1. docker-stacks/traefik/data/rules/external.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
http:
|
||||||
|
routers:
|
||||||
|
# Router voor je NAS interface
|
||||||
|
nas-router:
|
||||||
|
rule: "Host(`nas.stackbabber.nl`)"
|
||||||
|
service: "nas-service"
|
||||||
|
entryPoints:
|
||||||
|
- "web"
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Service definitie (IP en Poort van de NAS)
|
||||||
|
nas-service:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://10.52.150.20:5000" # Pas poort aan indien nodig
|
||||||
|
|
@ -5,30 +5,21 @@ api:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
web:
|
web:
|
||||||
address: ":80"
|
address: ":80"
|
||||||
# BELANGRIJK: Omdat NPM de SSL doet, zetten we de automatische redirect hier UIT.
|
# Trusted IPs config (zodat Authentik straks de juiste IP's ziet via de NAS)
|
||||||
# Anders krijg je een "Too many redirects" loop.
|
|
||||||
# http:
|
|
||||||
# redirections:
|
|
||||||
# entryPoint:
|
|
||||||
# to: websecure
|
|
||||||
# scheme: https
|
|
||||||
|
|
||||||
# Hier vertellen we Traefik: "Vertrouw headers van de NAS"
|
|
||||||
forwardedHeaders:
|
|
||||||
trustedIPs:
|
|
||||||
- "127.0.0.1/32" # Localhost
|
|
||||||
- "10.0.0.0/8" # Intern netwerk (ruim)
|
|
||||||
- "192.168.0.0/16" # Intern netwerk (ruim)
|
|
||||||
- "172.16.0.0/12" # Docker intern
|
|
||||||
- "10.52.150.20/32" # <--- JOUW NAS IP (Cruciaal!)
|
|
||||||
|
|
||||||
websecure:
|
|
||||||
address: ":443"
|
|
||||||
# Ook voor HTTPS poort (voor het geval NPM via 443 doorstuurt)
|
|
||||||
forwardedHeaders:
|
forwardedHeaders:
|
||||||
trustedIPs:
|
trustedIPs:
|
||||||
- "127.0.0.1/32"
|
- "127.0.0.1/32"
|
||||||
- "10.52.150.20/32" # <--- JOUW NAS IP
|
- "10.0.0.0/8"
|
||||||
|
- "192.168.0.0/16"
|
||||||
|
- "172.16.0.0/12"
|
||||||
|
- "10.52.150.20/32" # Jouw NAS IP
|
||||||
|
|
||||||
|
websecure:
|
||||||
|
address: ":443"
|
||||||
|
forwardedHeaders:
|
||||||
|
trustedIPs:
|
||||||
|
- "127.0.0.1/32"
|
||||||
|
- "10.52.150.20/32" # Jouw NAS IP
|
||||||
|
|
||||||
providers:
|
providers:
|
||||||
docker:
|
docker:
|
||||||
|
|
@ -36,8 +27,12 @@ providers:
|
||||||
exposedByDefault: false
|
exposedByDefault: false
|
||||||
network: proxy
|
network: proxy
|
||||||
|
|
||||||
# We laten de certificaat-resolvers wel in de config staan voor de toekomst,
|
# --- NIEUW: FILE PROVIDER ---
|
||||||
# maar Traefik gebruikt ze nu nog niet omdat NPM de certificaten regelt.
|
# Hiermee kun je externe hosts (zoals je NAS zelf) koppelen
|
||||||
|
file:
|
||||||
|
directory: "/rules"
|
||||||
|
watch: true
|
||||||
|
|
||||||
certificatesResolvers:
|
certificatesResolvers:
|
||||||
letsencrypt:
|
letsencrypt:
|
||||||
acme:
|
acme:
|
||||||
|
|
|
||||||
|
|
@ -12,20 +12,19 @@ services:
|
||||||
- "443:443"
|
- "443:443"
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
environment:
|
environment:
|
||||||
# Deze leest hij uit je .env bestand op de server
|
|
||||||
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
|
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- ./data/traefik.yml:/traefik.yml:ro
|
- ./data/traefik.yml:/traefik.yml:ro
|
||||||
- ./data/acme.json:/acme.json
|
- ./data/acme.json:/acme.json
|
||||||
|
# Hier koppelen we de map met regels voor externe hosts (NAS etc.)
|
||||||
|
- ./data/rules:/rules
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
# We gebruiken nu je echte domein!
|
|
||||||
- "traefik.http.routers.traefik.rule=Host(`traefik.stackbabber.nl`)"
|
- "traefik.http.routers.traefik.rule=Host(`traefik.stackbabber.nl`)"
|
||||||
- "traefik.http.routers.traefik.entrypoints=websecure"
|
- "traefik.http.routers.traefik.entrypoints=web"
|
||||||
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.traefik.service=api@internal"
|
||||||
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
proxy:
|
proxy:
|
||||||
|
|
|
||||||
|
|
@ -1,71 +1,66 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Stop het script direct als er een error optreedt
|
# Stop direct bij errors
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# --- KLEUREN DEFINITIES (Voor mooie output) ---
|
# --- KLEUREN ---
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
BLUE='\033[0;34m'
|
BLUE='\033[0;34m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m'
|
||||||
|
|
||||||
# --- PADEN AUTOMATISCH BEPALEN ---
|
# --- PADEN ---
|
||||||
# Dit is de magie: We kijken waar DIT script staat, en gaan 1 map omhoog.
|
|
||||||
# Hierdoor werkt het script altijd, ongeacht hoe je hoofdmap heet.
|
|
||||||
SCRIPT_PATH=$(readlink -f "$0")
|
SCRIPT_PATH=$(readlink -f "$0")
|
||||||
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
|
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
|
||||||
REPO_DIR=$(dirname "$SCRIPT_DIR")
|
REPO_DIR=$(dirname "$SCRIPT_DIR")
|
||||||
STACKS_DIR="$REPO_DIR/1. docker-stacks"
|
STACKS_DIR="$REPO_DIR/1. docker-stacks" # Let op: kleine letters zoals op jouw server
|
||||||
|
|
||||||
echo -e "${BLUE}==========================================${NC}"
|
echo -e "${BLUE}==========================================${NC}"
|
||||||
echo -e "${BLUE}🚀 Start Docker Update Script - $(date)${NC}"
|
echo -e "${BLUE}🚀 Start Docker Update - $(date)${NC}"
|
||||||
echo -e "${BLUE}==========================================${NC}"
|
|
||||||
|
|
||||||
# 1. GIT UPDATE
|
# 1. GIT
|
||||||
echo -e "${YELLOW}📥 Pullen van Git...${NC}"
|
echo -e "${YELLOW}📥 Git Pull...${NC}"
|
||||||
echo -e " Locatie: $REPO_DIR"
|
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
git pull origin main
|
git fetch --all
|
||||||
|
git reset --hard origin/main
|
||||||
|
|
||||||
# 2. CONTAINERS UPDATEN
|
# 2. TRAEFIK VOORBEREIDING (Cruciaal!)
|
||||||
echo -e "${YELLOW}🔄 Containers bijwerken...${NC}"
|
# Traefik heeft specifieke mappen en lege bestanden nodig
|
||||||
|
TRAEFIK_DIR="$STACKS_DIR/traefik"
|
||||||
|
if [ -d "$TRAEFIK_DIR" ]; then
|
||||||
|
echo -e " 🔨 ${YELLOW}Traefik checks uitvoeren...${NC}"
|
||||||
|
mkdir -p "$TRAEFIK_DIR/data"
|
||||||
|
# Certificaten bestand (moet chmod 600 zijn)
|
||||||
|
if [ ! -f "$TRAEFIK_DIR/data/acme.json" ]; then
|
||||||
|
touch "$TRAEFIK_DIR/data/acme.json"
|
||||||
|
chmod 600 "$TRAEFIK_DIR/data/acme.json"
|
||||||
|
fi
|
||||||
|
# Externe regels bestand (voor je NAS/andere hosts)
|
||||||
|
if [ ! -f "$TRAEFIK_DIR/data/rules/external.yml" ]; then
|
||||||
|
mkdir -p "$TRAEFIK_DIR/data/rules"
|
||||||
|
touch "$TRAEFIK_DIR/data/rules/external.yml"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Zoek alle mappen die een docker-compose.yml bevatten (max 2 diep in 1. Docker-Stacks)
|
# 3. CONTAINERS STARTEN
|
||||||
|
echo -e "${YELLOW}🔄 Services starten...${NC}"
|
||||||
find "$STACKS_DIR" -maxdepth 2 -name "docker-compose.yml" | while read composefile; do
|
find "$STACKS_DIR" -maxdepth 2 -name "docker-compose.yml" | while read composefile; do
|
||||||
dir=$(dirname "$composefile")
|
dir=$(dirname "$composefile")
|
||||||
service_name=$(basename "$dir")
|
service_name=$(basename "$dir")
|
||||||
|
|
||||||
echo -e " 👉 Bezig met service: ${GREEN}$service_name${NC}"
|
echo -e " 👉 Service: ${GREEN}$service_name${NC}"
|
||||||
cd "$dir"
|
cd "$dir"
|
||||||
|
|
||||||
# --- SPECIAAL VOOR TRAEFIK ---
|
|
||||||
# Traefik crasht als acme.json niet bestaat of verkeerde rechten heeft.
|
|
||||||
# Dit script repareert dat automatisch.
|
|
||||||
if [ "$service_name" == "traefik" ]; then
|
|
||||||
if [ ! -f "./data/acme.json" ]; then
|
|
||||||
echo -e " 🔨 ${YELLOW}Traefik: acme.json aanmaken en rechten (600) zetten...${NC}"
|
|
||||||
mkdir -p ./data
|
|
||||||
touch ./data/acme.json
|
|
||||||
chmod 600 ./data/acme.json
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# -----------------------------
|
|
||||||
|
|
||||||
# Check of er een .env bestand is (informatief)
|
|
||||||
if [ -f .env ]; then
|
if [ -f .env ]; then
|
||||||
docker compose up -d --remove-orphans
|
docker compose up -d --remove-orphans
|
||||||
else
|
else
|
||||||
echo -e " ⚠️ ${RED}Let op: Geen .env bestand gevonden (check je secrets)!${NC}"
|
echo -e " ⚠️ ${RED}Geen .env gevonden! (Check je secrets op de server)${NC}"
|
||||||
# We proberen alsnog te starten, sommige containers hebben geen .env nodig
|
|
||||||
docker compose up -d --remove-orphans
|
docker compose up -d --remove-orphans
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# 3. OPRUIMEN
|
echo -e "${YELLOW}🧹 Opruimen...${NC}"
|
||||||
echo -e "${YELLOW}🧹 Oude images opruimen...${NC}"
|
|
||||||
docker image prune -f
|
docker image prune -f
|
||||||
|
|
||||||
echo -e "${BLUE}==========================================${NC}"
|
echo -e "${GREEN}✅ Klaar!${NC}"
|
||||||
echo -e "${GREEN}✅ Update compleet!${NC}"
|
|
||||||
echo -e "${BLUE}==========================================${NC}"
|
|
||||||
Loading…
Reference in a new issue