Traefik (Reverse Proxy)

Purpose: SSL termination, routing, and load balancingStack: traefikImage: traefik:v3.5Placement: Manager node (p0)

Key Configuration:

command:
  - --api.dashboard=true
  - --entrypoints.web.address=:80
  - --entrypoints.websecure.address=:443
  - --providers.swarm=true
  - --certificatesresolvers.cloudflare.acme.dnschallenge=true

Features:

  • Automatic service discovery
  • Cloudflare DNS challenge for SSL
  • HTTP to HTTPS redirection
  • Dashboard at port 8081

Storage Requirements:

  • SSL certificates:/mnt/swarm-data/traefik/certificates
  • Dynamic configuration:/mnt/swarm-data/traefik/dynamic

Portainer (Container Management)

Purpose: Docker Swarm management interfaceStack: portainerImage: portainer/portainer-ce:latestPlacement: Manager node (p0)

Architecture:

  • Server: Single instance on manager node
  • Agents: Global deployment on all nodes

Key Configuration:

command: -H tcp://tasks.agent:9001 --tlsskipverify
networks: [portainer_portainer_agent]

Access:https://portainer.bitfrost.me

Features:

  • Complete swarm management
  • Stack deployment
  • Service monitoring
  • Volume management

PostgreSQL (Primary Database)

Purpose: Primary relational databaseStack: postgresql17Image: postgres:17Placement: Manager node (p0)

Databases Hosted:

  • authentik: User authentication
  • paperless: Document management
  • vikunja: Task management
  • nextcloud: File metadata

Key Configuration:

environment:
  POSTGRES_USER: admin
  POSTGRES_PASSWORD: [SECRET]
ports: ["5432:5432"]

Clients:

# Standard connection pattern
POSTGRES_HOST: postgres
POSTGRES_USER: admin
POSTGRES_PASSWORD: [SECRET]

MariaDB (Secondary Database)

Purpose: BookStack wiki databaseStack: mariadbImage: lscr.io/linuxserver/mariadb:latestPlacement: Manager node (p0)

Key Configuration:

environment:
  MYSQL_ROOT_PASSWORD: [SECRET]
  MYSQL_USER: admin
  PUID: 1000
  PGID: 1000

Database: bookstackappPort: 3306 (externally accessible)