# Toppyr Stack Docker Compose Stack fΓΌr **toppyr.de** β€” Self-Hosted Collaboration Suite. ## πŸ—οΈ Architektur ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Traefik (Reverse Proxy) β”‚ β”‚ Let's Encrypt SSL Termination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Keycloak SSO β”‚ β”‚ sso.toppyr.de β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β–Όβ”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ Gitea β”‚ β”‚OpenProj.β”‚ β”‚ XWiki β”‚ β”‚ Postiz β”‚ β”‚ Monitoring β”‚ β”‚ repo. β”‚ β”‚ project.β”‚ β”‚ wiki. β”‚ β”‚ postiz. β”‚ β”‚ status./netd. β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ“¦ Services | Service | URL | Beschreibung | |---------|-----|--------------| | **Keycloak** | sso.toppyr.de | Single Sign-On, Identity Provider | | **OpenProject** | project.toppyr.de | Projektmanagement, Tasks | | **XWiki** | wiki.toppyr.de | Dokumentation, Wiki | | **Gitea** | repo.toppyr.de | Git Repositories, CI/CD | | **Postiz** | postiz.toppyr.de | Social Media Scheduler | | **EspoCRM** | crm.toppyr.de | CRM System | | **Mautic** | marketing.toppyr.de | Marketing Automation | | **FreeScout** | support.toppyr.de | Helpdesk, Ticketing | | **Nextcloud** | cloud.toppyr.de | Dateiverwaltung | | **Uptime Kuma** | status.toppyr.de | Monitoring, Alerts | | **Netdata** | netdata.toppyr.de | System Metrics | | **lldap** | ldap.toppyr.de | LDAP Directory | ## πŸš€ Deployment ### Voraussetzungen - Docker & Docker Compose v2 - Domain mit DNS-EintrΓ€gen auf Server-IP - Ports 80, 443, 2222 (SSH fΓΌr Gitea) offen ### Installation ```bash # Repository klonen git clone https://repo.toppyr.de/tobias/toppyr-stack.git cd toppyr-stack # Environment konfigurieren cp .env.example .env # PasswΓΆrter generieren und eintragen openssl rand -base64 32 # FΓΌr jedes Passwort-Feld # Stack starten docker compose up -d ``` ### DNS-EintrΓ€ge Alle Subdomains als A-Record auf die Server-IP: ``` @, www, sso, wiki, project, status, crm, marketing, support, postiz, ldap, netdata, gruen, cloud, repo β†’ ``` ## πŸ” Authentifizierung - **SSO via Keycloak** fΓΌr: OpenProject, XWiki, Postiz, Gitea, Netdata - **LDAP via lldap** fΓΌr: OpenProject (read-only) - **Standalone** fΓΌr: EspoCRM, Mautic, FreeScout, Uptime Kuma ## πŸ“ Verzeichnisstruktur ``` toppyr-stack/ β”œβ”€β”€ docker-compose.yml # Hauptkonfiguration β”œβ”€β”€ .env.example # Umgebungsvariablen-Template β”œβ”€β”€ .env # Echte Secrets (nicht committed!) β”œβ”€β”€ landing/ β”‚ └── index.html # Landing Page toppyr.de └── webhooks/ └── gitea-openproject-webhook.py # Gitβ†’OpenProject Integration ``` ## πŸ”— Integrationen ### Gitea β†’ OpenProject Webhook Commits mit `WP-123` im Message werden automatisch als Kommentar im Work Package gepostet. ```bash # Beispiel Commit git commit -m "WP-42: Feature implementiert" ``` ### XWiki Git Macro Code aus Gitea-Repos direkt im Wiki einbetten: ```wiki {{git repository="https://repo.toppyr.de/tobias/toppyr-stack.git" file="docker-compose.yml" branch="main"}} ``` ## 🧹 Wartung ```bash # Logs anzeigen docker compose logs -f # Service neustarten docker compose restart # Updates docker compose pull docker compose up -d # Backup Volumes docker run --rm -v toppyr-stack_:/data -v $(pwd):/backup \ alpine tar czf /backup/.tar.gz /data ``` ## πŸ“Š Ressourcen Getestete RAM-Limits (gesamt ~8-10 GB): | Service | RAM Limit | |---------|-----------| | Keycloak | 2 GB | | OpenProject | 4 GB | | XWiki | 4 GB | | Gitea | 512 MB | | Postiz | 4 GB | | Elasticsearch (Temporal) | 1 GB | | Andere | 64-512 MB | ## πŸ“ Lizenz Private Konfiguration fΓΌr toppyr.de. --- *Erstellt: MΓ€rz 2026*