188 lines
3.3 KiB
Markdown
188 lines
3.3 KiB
Markdown
# 🎨 Customization Guide
|
|
|
|
## Overview
|
|
|
|
This guide covers how to customize and extend the homelab configuration to fit your specific needs.
|
|
|
|
---
|
|
|
|
## 🎯 Customization Areas
|
|
|
|
### 1. Theme & Branding
|
|
|
|
#### Heimdall/Homer Dashboard
|
|
```yaml
|
|
# homer/config.yml
|
|
title: "My Homelab"
|
|
subtitle: "Self-hosted services"
|
|
logo: "assets/logo.png"
|
|
|
|
colors:
|
|
light:
|
|
highlight-primary: "#3367d6"
|
|
highlight-secondary: "#4285f4"
|
|
dark:
|
|
highlight-primary: "#3367d6"
|
|
highlight-secondary: "#4285f4"
|
|
```
|
|
|
|
#### Grafana Theme
|
|
```ini
|
|
# grafana.ini
|
|
[users]
|
|
default_theme = dark
|
|
|
|
[panels]
|
|
disable_sanitize_html = true
|
|
```
|
|
|
|
### 2. Service Configuration
|
|
|
|
#### Environment Variables
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
myservice:
|
|
environment:
|
|
# Override default settings
|
|
- APP_NAME=My Custom Name
|
|
- TIMEZONE=America/Los_Angeles
|
|
- LANGUAGE=en_US
|
|
```
|
|
|
|
#### Custom Domains
|
|
```nginx
|
|
# In Nginx Proxy Manager:
|
|
# Add custom domain for any service
|
|
# yourservice.yourdomain.com -> container:port
|
|
```
|
|
|
|
### 3. Notification Customization
|
|
|
|
#### ntfy Topics
|
|
```yaml
|
|
# Customize alert channels
|
|
alerts:
|
|
critical: homelab-critical # High priority
|
|
warnings: homelab-warnings # Normal
|
|
info: homelab-info # Low priority
|
|
```
|
|
|
|
#### Alert Templates
|
|
```yaml
|
|
# alertmanager/templates/custom.tmpl
|
|
{{ define "custom.title" }}
|
|
[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}
|
|
{{ end }}
|
|
|
|
{{ define "custom.text" }}
|
|
{{ range .Alerts }}
|
|
*Alert:* {{ .Labels.alertname }}
|
|
*Instance:* {{ .Labels.instance }}
|
|
*Description:* {{ .Annotations.description }}
|
|
{{ end }}
|
|
{{ end }}
|
|
```
|
|
|
|
---
|
|
|
|
## 📁 Adding New Services
|
|
|
|
### Template docker-compose.yml
|
|
|
|
```yaml
|
|
# templates/new-service.yaml
|
|
version: "3.8"
|
|
|
|
services:
|
|
servicename:
|
|
image: image:tag
|
|
container_name: servicename
|
|
restart: unless-stopped
|
|
environment:
|
|
- TZ=America/Los_Angeles
|
|
- PUID=1000
|
|
- PGID=1000
|
|
volumes:
|
|
- ./config:/config
|
|
- ./data:/data
|
|
ports:
|
|
- "8080:8080"
|
|
networks:
|
|
- proxy
|
|
labels:
|
|
- "com.centurylinklabs.watchtower.enable=true"
|
|
|
|
networks:
|
|
proxy:
|
|
external: true
|
|
```
|
|
|
|
### Adding to Monitoring
|
|
|
|
```yaml
|
|
# prometheus/prometheus.yml
|
|
scrape_configs:
|
|
- job_name: 'new-service'
|
|
static_configs:
|
|
- targets: ['servicename:metrics_port']
|
|
```
|
|
|
|
### Adding to Uptime Kuma
|
|
1. Open Uptime Kuma dashboard
|
|
2. Add New Monitor
|
|
3. Configure HTTP/TCP check
|
|
4. Add to relevant status page
|
|
|
|
---
|
|
|
|
## 🔧 Advanced Customization
|
|
|
|
### Custom Docker Networks
|
|
```yaml
|
|
# Create isolated networks for service groups
|
|
networks:
|
|
media:
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: 172.20.0.0/16
|
|
|
|
monitoring:
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: 172.21.0.0/16
|
|
```
|
|
|
|
### Reverse Proxy Custom Headers
|
|
```nginx
|
|
# In NPM Advanced config
|
|
proxy_set_header X-Custom-Header "value";
|
|
proxy_hide_header X-Powered-By;
|
|
|
|
# Security headers
|
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
add_header X-Content-Type-Options "nosniff" always;
|
|
```
|
|
|
|
### Custom Health Checks
|
|
```yaml
|
|
services:
|
|
myservice:
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 Further Reading
|
|
|
|
- [Integrations Guide](integrations.md)
|
|
- [Scaling Guide](scaling.md)
|
|
- [Ansible Automation](ansible.md)
|