- Updated architecture diagram with actual disk sizes (100GB/200GB) - Added Storage section with NVMe layout and snapshot commands - Added VM/Storage troubleshooting section: - Snapshot feature not available (Raw Device fix) - Storage overview and disk migration - Thin pool warnings explanation - Updated changelog with storage optimization 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Proxmox Infrastruktur
Self-Hosted Services auf Proxmox VE mit Docker.
Architektur
Internet
|
v
[Windows VPS: 217.154.65.205]
- nginx Reverse Proxy
- SSL (Let's Encrypt via win-acme)
- WireGuard Server
|
| WireGuard Tunnel (10.0.0.0/24)
v
[Proxmox: 192.168.178.111]
- Hypervisor
|
v
[VM 100 "docker-services": 192.168.178.200 / 10.0.0.2]
- Docker Host
- Alle Services als Container
- 100GB System (local-lvm/NVMe1)
- 200GB Data (nvme-data/NVMe2)
Services
| Service | Port | URL (Extern) | Beschreibung |
|---|---|---|---|
| Nextcloud | 8081 | eckardt-cloud.duckdns.org | Cloud Storage |
| Vaultwarden | 8083 | eckardt-vault.duckdns.org/vault/ | Passwort Manager |
| n8n | 5678 | eckardt-vault.duckdns.org/n8n/ | Workflow Automation |
| Gitea | 3000 | eckardt-git.duckdns.org | Git Repository |
| Websites | 8082 | eckardt-vault.duckdns.org | Statische Websites |
| API | 8000 | eckardt-vault.duckdns.org/api/ | FastAPI Backend |
| Netdata | 19999 | eckardt-monitoring.duckdns.org | System Monitoring |
| Audiobookshelf | 13378 | (intern) | Audiobook Server |
Quick Start
Voraussetzungen
- Proxmox VE oder Debian/Ubuntu mit Docker
- WireGuard fuer externen Zugriff
- Min. 4GB RAM, 50GB Speicher
Installation
# Repository klonen
git clone https://eckardt-git.duckdns.org/Martin/proxmox-infrastruktur.git
cd proxmox-infrastruktur
# Environment-Variablen konfigurieren
cp docker/.env.template docker/.env
nano docker/.env # Passwoerter anpassen!
# Deployment starten
sudo ./scripts/deploy.sh
Verzeichnisstruktur
proxmox-infrastruktur/
├── docker/
│ ├── docker-compose.yml # Haupt-Konfiguration
│ ├── .env.template # Environment Template
│ └── .gitignore # Secrets ausschliessen
├── configs/
│ ├── nginx/
│ │ └── nginx.conf # VPS Reverse Proxy
│ └── wireguard/
│ └── wg0.conf.template # WireGuard Template
├── scripts/
│ ├── deploy.sh # Installations-Script
│ ├── backup.sh # Backup-Script
│ └── health-check.sh # Health-Check Script
├── docs/
│ ├── INSTALL.md # Detaillierte Installation
│ └── TROUBLESHOOTING.md # Problemloesungen
└── README.md # Diese Datei
Wartung
Health Check
# Alle Services pruefen
/opt/scripts/health-check.sh
# Einzelnen Container pruefen
docker inspect --format='{{.State.Health.Status}}' nextcloud
Backup
# Vollstaendiges Backup
/opt/scripts/backup.sh all
# Einzelner Service
/opt/scripts/backup.sh nextcloud
# Automatisches Backup (crontab -e)
0 3 * * * /opt/scripts/backup.sh all >> /var/log/backup.log 2>&1
Updates
cd /opt/docker
# Alle Container aktualisieren
docker compose pull
docker compose up -d
# Einzelnen Container aktualisieren
docker compose pull nextcloud
docker compose up -d nextcloud
Logs
# Alle Container
docker compose logs -f
# Einzelner Container
docker logs -f nextcloud
# Letzte 100 Zeilen
docker logs --tail 100 nextcloud
Sicherheit
Implementierte Massnahmen
- Isolierte Netzwerke: Jeder Service hat sein eigenes Docker-Netzwerk
- Resource Limits: CPU und Memory Limits pro Container
- Health Checks: Automatische Ueberwachung aller Services
- Rate Limiting: nginx begrenzt Anfragen pro IP
- TLS 1.2+: Nur sichere Verschluesselung
- Security Headers: X-Frame-Options, X-Content-Type-Options, etc.
Zu beachten
.envDatei NIEMALS committen- Admin-Tokens regelmaessig rotieren
- Backups extern speichern
- Updates zeitnah einspielen
Netzwerk
WireGuard Tunnel
VPS (Server) Proxmox (Client)
10.0.0.1 <--> 10.0.0.2
217.154.65.205 192.168.178.111
Ports
| Port | Service | Zugriff |
|---|---|---|
| 51820/UDP | WireGuard | VPS extern |
| 80 | nginx HTTP | VPS extern |
| 443 | nginx HTTPS | VPS extern |
| 3000 | Gitea Web | Proxmox intern |
| 2222 | Gitea SSH | Proxmox intern |
Troubleshooting
Siehe docs/TROUBLESHOOTING.md fuer:
- Container startet nicht
- Permission denied Fehler
- Netzwerk-Probleme
- SSL-Zertifikat Fehler
- Backup-Probleme
- VT-x/KVM nicht verfuegbar
- VM Snapshots funktionieren nicht
- Storage-Migration zwischen NVMes
Storage
Proxmox Storage Layout
| Storage | NVMe | Modell | Verwendung | Kapazitaet |
|---|---|---|---|---|
local-lvm |
nvme0n1 | WDC 476GB | VM System Disks | ~350GB Thin Pool |
nvme-data |
nvme1n1 | SKHynix 476GB | Data Volumes | ~450GB Thin Pool |
VM 100 Disk-Konfiguration
| Disk | Storage | Groesse | Mountpoint |
|---|---|---|---|
| scsi0 | local-lvm | 100GB | / (System) |
| scsi1 | nvme-data | 200GB | /data |
Snapshots
# Snapshot erstellen
qm snapshot 100 <name> --description "Beschreibung"
# Snapshots auflisten
qm listsnapshot 100
# Zu Snapshot zurueckkehren
qm rollback 100 <name>
# Snapshot loeschen
qm delsnapshot 100 <name>
Changelog
2025-12-28
- Initial Setup mit allen Services
- Gitea auf eigener Subdomain (eckardt-git.duckdns.org)
- Security Hardening:
- Fail2Ban (SSH: 3 Versuche = 24h Ban)
- SSH Key-Only Authentication
- UFW Firewall
- Automatische Security Updates
- Docker no-new-privileges
- nginx Rate Limiting
- Vaultwarden Registration disabled
- Gitea Registration disabled
- Isolierte Docker-Netzwerke pro Service
- Resource Limits (CPU/Memory) pro Container
- Logging mit Rotation (10MB, 3 Files)
- Netdata Monitoring hinzugefuegt (eckardt-monitoring.duckdns.org)
- Host + Docker Container Monitoring
- WireGuard + Fail2Ban Integration
- Separates Git-Repository: proxmox-netdata
- VT-x im BIOS aktiviert fuer VM-Support
- Docker Container Migration zu VM 100:
- VM erstellt: 10GB RAM, 6 Cores, 100GB System Disk
- Separates 200GB Data Volume fuer Nextcloud/Services
- WireGuard auf VM konfiguriert (10.0.0.2)
- Alle Container erfolgreich migriert
- Alte Container auf Host gestoppt
- Storage-Optimierung:
- Zweite NVMe (SKHynix 476GB) als nvme-data Storage aktiviert
- Data Volume auf nvme-data migriert (Live-Migration)
- Snapshots aktiviert (Raw Device zu Proxmox-managed konvertiert)
- NVMe 1 (WDC): VM System Disks
- NVMe 2 (SKHynix): Nextcloud/Data Volumes
Description
Languages
Python
49.6%
Shell
47.6%
Dockerfile
2.8%