- Complete modular bash-based setup system replacing Python TUI - Phase 1-4 implementation: Core Infrastructure, Configuration Management, Deployment Engine, Service Orchestration & Management - 9 production-ready scripts: preflight.sh, setup.sh, pre-deployment-wizard.sh, localize.sh, generalize.sh, validate.sh, deploy.sh, service.sh, monitor.sh, backup.sh, update.sh - Shared libraries: common.sh (utilities), ui.sh (text interface) - Template-based configuration system with environment variable substitution - Comprehensive documentation: PRD, standards, and quick reference guides - Automated backup, monitoring, and update management capabilities - Cross-platform compatibility with robust error handling and logging
112 lines
2.5 KiB
Markdown
112 lines
2.5 KiB
Markdown
# Traefik Routing Quick Reference
|
|
|
|
## Variables (used throughout):
|
|
|
|
```yaml
|
|
${infrastructure}
|
|
${description}
|
|
${watchtower_enable}
|
|
${service}
|
|
${sso_enable}
|
|
${sablier_enable}
|
|
${traefik_enable}
|
|
${port}
|
|
```
|
|
|
|
## Compose file labels section
|
|
|
|
### Service metadata
|
|
```yaml
|
|
- homelab.category=${infrastructure}
|
|
- homelab.description=${description}
|
|
- com.centurylinklabs.watchtower.enable=${watchtower_enable}
|
|
```
|
|
|
|
### Traefik labels
|
|
|
|
>**Traefik labels** are used for services on the same machine
|
|
They are ignored when the service is on a different machine
|
|
|
|
|
|
```yaml
|
|
- "traefik.enable=${traefik_enable}"
|
|
- "traefik.http.routers.${service}.rule=Host(`${service}.${DOMAIN}`)"
|
|
- "traefik.http.routers.${service}.entrypoints=websecure"
|
|
- "traefik.http.routers.${service}.tls.certresolver=letsencrypt"
|
|
- "traefik.http.routers.${service}.middlewares=authelia@docker"
|
|
- "traefik.http.services.${service}.loadbalancer.server.port=${port}"
|
|
```
|
|
|
|
### Sablier lazy loading
|
|
|
|
```yaml
|
|
- sablier.enable=${sablier_enable}
|
|
- sablier.group=${SERVER_HOSTNAME}-${service}
|
|
- sablier.start-on-demand=true
|
|
```
|
|
|
|
## External Host Yml Files
|
|
|
|
>**Recomended**: use 1 yml file per host
|
|
|
|
### external-host-production.yml
|
|
```yaml
|
|
http:
|
|
# Routes for External Host Services
|
|
routers:
|
|
# External Service Routing Template
|
|
${service}-${SERVER_HOSTNAME}:
|
|
rule: "Host(`${service}.${DOMAIN}`)"
|
|
entryPoints:
|
|
- websecure
|
|
service: ${service}-${SERVER_HOSTNAME}
|
|
tls:
|
|
certResolver: letsencrypt
|
|
middlewares:
|
|
- sablier-${SERVER_HOSTNAME}-${service}@file
|
|
- authelia@docker
|
|
|
|
# Middleware Definitions
|
|
middlewares:
|
|
|
|
|
|
# Service Definitions
|
|
services:
|
|
${service}-${SERVER_HOSTNAME}:
|
|
loadBalancer:
|
|
servers:
|
|
- url: "http://${SERVER_IP}:${port}"
|
|
passHostHeader: true
|
|
|
|
```
|
|
|
|
## sablier.yml
|
|
|
|
```yaml
|
|
# Session duration set to 5m for testing. Increase to 30m for production.
|
|
http:
|
|
middlewares:
|
|
# Authelia SSO middleware
|
|
authelia:
|
|
forwardauth:
|
|
address: http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}/
|
|
authResponseHeaders:
|
|
- X-Secret
|
|
trustForwardHeader: true
|
|
|
|
# Sablier enabled Service Template
|
|
sablier-${SERVER_HOSTNAME}-${service}:
|
|
plugin:
|
|
sablier:
|
|
sablierUrl: http://sablier-service:10000
|
|
group: ${SERVER_HOSTNAME}-${service}
|
|
sessionDuration: 5m
|
|
ignoreUserAgent: curl
|
|
dynamic:
|
|
displayName: ${service}
|
|
theme: ghost
|
|
show-details-by-default: true
|
|
|
|
|
|
```
|