This repository contains all Docker Compose configurations for the bryanwills.dev infrastructure.
- Traefik (
traefik/) - Reverse proxy with SSL termination and automatic certificate management - Keycloak (
keycloak/) - Identity and access management - Authentik (
authentik/) - Alternative identity provider (backup) - HashiCorp Vault (
hashicorp/) - Secrets management and encryption
- Pi-hole (
dns-adblock/) - Ad-blocking DNS server with local zone management - BIND9 (
dns-authoritative/) - Authoritative DNS server (optional)
- Code Server (
code-server/) - VS Code in the browser - n8n (
n8n/) - Workflow automation platform - Excalidraw (
draw/) - Collaborative drawing tool - Linkwarden (
linkwarden/) - Bookmark and link management - Tooljet (
tooljet/) - Low-code platform for building internal tools - Gist (
gist/) - Self-hosted code snippet and gist service
- Uptime Kuma (
uptime-kuma/) - Uptime monitoring - Grafana Monitoring (
Grafana-Monitoring/) - Metrics visualization - Syslog Server (
syslog-server/) - Centralized logging
- Vaultwarden (
vaultwarden/) - Password manager - Homepage (
Homepage/) - Dashboard for all services - IT Tools (
IT-Tools/) - IT utilities collection - Affine (
affine/) - Self-hosted knowledge management with PostgreSQL storage - Nginx (
nginx/) - Web server
-
Clone the repository
git clone <your-repo-url> cd docker
-
Create the proxy network
docker network create proxy
-
Set up environment variables
- Copy
.env.examplefiles to.envin each service directory - Update passwords and secrets
- Copy
-
Start Traefik first
cd traefik docker compose up -d cd ..
-
Start other services
# Start DNS services cd dns-adblock docker compose up -d cd .. # Start authentication cd keycloak docker compose up -d cd .. # Start secrets management cd hashicorp docker compose up -d cd .. # Start other services as needed
All services are configured with the following domain pattern:
auth.bryanwills.dev- Keycloakdns.bryanwills.dev- Pi-holedraw.bryanwills.dev- Excalidrawcode.bryanwills.dev- Code Servern8n.bryanwills.dev- n8nlink.bryanwills.dev- Linkwardenuptime.bryanwills.dev- Uptime Kumadocs.bryanwills.dev- Affine Knowledge Managementtooljet.bryanwills.dev- Tooljet Low-code Platformgist.bryanwills.dev- Gist Code Snippetskeys.bryanwills.dev- HashiCorp Vault Secrets Managementtraefik.bryanwills.dev- Traefik Dashboard
- All services use HTTPS with Let's Encrypt certificates
- Traefik handles SSL termination
- Services are isolated in Docker networks
- Environment files contain sensitive data (not committed to git)
- Traefik Dashboard:
https://traefik.bryanwills.dev - Pi-hole Admin:
https://dns.bryanwills.dev/admin - Uptime Kuma:
https://uptime.bryanwills.dev - Affine Admin:
https://docs.bryanwills.dev/admin - Vault Dashboard:
https://keys.bryanwills.dev
# Affine database is automatically backed up daily at midnight
# Backups are stored in: ~/.affine/self-host/backups/
# Manual backup: cd affine && ./backup_affine.sh
# Restore backup: gunzip -c backups/affine_backup_YYYYMMDD_HHMMSS.sql.gz | docker exec -i affine_postgres psql -U affine -d affine# Whitelist a domain in Pi-hole
cd dns-adblock
./whitelist.sh example.com# Update a specific service
cd <service-directory>
docker compose pull
docker compose up -d# View service logs
docker compose logs -f <service-name>docker/
βββ traefik/ # Reverse proxy
βββ keycloak/ # Authentication
βββ authentik/ # Alternative auth
βββ hashicorp/ # HashiCorp Vault secrets management
βββ dns-adblock/ # Pi-hole DNS
βββ dns-authoritative/ # BIND9 DNS
βββ draw/ # Excalidraw
βββ code-server/ # VS Code in browser
βββ n8n/ # Workflow automation
βββ linkwarden/ # Bookmark manager
βββ uptime-kuma/ # Uptime monitoring
βββ vaultwarden/ # Password manager
βββ Homepage/ # Dashboard
βββ IT-Tools/ # IT utilities
βββ affine/ # Knowledge management
βββ tooljet/ # Low-code platform
βββ gist/ # Code snippets and gists
βββ nginx/ # Web server
βββ syslog-server/ # Centralized logging
βββ Grafana-Monitoring/ # Metrics visualization
# Affine database is automatically backed up daily at midnight
# Backups are stored in: ~/.affine/self-host/backups/
# Manual backup: cd affine && ./backup_affine.sh
# Restore backup: gunzip -c backups/affine_backup_YYYYMMDD_HHMMSS.sql.gz | docker exec -i affine_postgres psql -U affine -d affine# Whitelist a domain in Pi-hole
cd dns-adblock
./whitelist.sh example.comEach service directory contains a .env file with service-specific variables. Key variables include:
POSTGRES_PASSWORD- Database passwordsWEBPASSWORD- Pi-hole admin passwordKEYCLOAK_ADMIN_PASSWORD- Keycloak admin passwordCODE_SERVER_PASSWORD- Code Server passwordN8N_PASSWORD- n8n admin passwordAFFINE_SERVER_STORAGE_TYPE- Affine storage type (postgres)AFFINE_SERVER_STORAGE_POSTGRES_URL- Affine database connectionGITHUB_CLIENT_ID&GITHUB_SECRET_ID- GitHub OAuth for AffinePG_DB&TOOLJET_DB- Tooljet database names (app database and internal database)PG_HOST&PG_USER&PG_PASS- Tooljet database connection credentialsGITHUB_CLIENT_ID&GITHUB_CLIENT_SECRET- GitHub OAuth for Gist authenticationSECRET_KEY&SESSION_SECRET- Gist security keysGITHUB_OAUTH_CLIENT_ID&GITHUB_OAUTH_CLIENT_SECRET- GitHub OAuth for Vault authenticationGITHUB_ORGANIZATION&GITHUB_USERNAME- GitHub organization and username for Vault auth
- All services use the external
proxynetwork for Traefik integration - DNS services expose port 53 for external access
- Sensitive data is stored in
.envfiles (not committed) - Docker volumes persist data across container restarts
- Vault runs in production mode with GitHub OAuth authentication