📁 Core Setup¶
Das Core Setup schafft die Grundlage für ein einfach zu verwaltendes Docker-System.
🔧 Portainer und 🌐 Nginx Proxy Manager (NPM) bilden die zentrale Basis: - Portainer bietet eine benutzerfreundliche Weboberfläche zur Verwaltung aller Container, Volumes, Netzwerke und Images. . - Nginx Proxy Manager sorgt für die zentrale Steuerung aller Webzugriffe über Subdomains und verwaltet automatisch SSL-Zertifikate über Let's Encrypt.
➡️ Dieses Setup ist der Grundbaustein für alle weiteren Dienste wie Nextcloud, Immich, Plex oder SearXNG.
🔧 1. Verzeichnisstruktur¶
/data/
├── core_config/ # Verzeichnis für alle .yml-Dateien
├── portainer/
│ └── daten/ # Daten für Portainer
└── nginx-proxy/
└── daten/ # Daten für Nginx Proxy Manager
Verzeichnisse erstellen:
sudo mkdir -p /data/core_config
sudo mkdir -p /data/portainer/daten
sudo mkdir -p /data/nginx-proxy/daten
sudo mkdir -p /data/nginx-proxy/letsencrypt
🔗 2. Docker-Netzwerk einrichten¶
Das Docker-Netzwerk muss vor der Containereinrichtung existieren.
Ein Docker-Netzwerk verbindet Container wie ein internes virtuelles LAN. Es sorgt dafür, dass sich Dienste wie Nginx Proxy Manager, MkDocs, Portainer, Nextcloud usw. untereinander erkennen und sicher miteinander kommunizieren können – ganz ohne IP-Adressen oder manuelle Freigaben. Nur Container im gleichen Netzwerk können miteinander kommunizieren.
Nginx Proxy Manager (NPM) muss mit internen Container-Diensten sprechen können, z. B.:\
nextcloud:80
, portainer:9000
, mkdocs:8000
\
Dafür müssen alle im gleichen Docker-Netzwerk sein.
✅ Vorteile:
- Container finden sich per Name (z. B.
mkdocs
) - Kein offener Zugriff nötig – alles bleibt intern
- Wartung und Skalierung werden einfacher
- Nginx Proxy Manager funktioniert nur mit gemeinsamem Netzwerk
⚠️ Docker-Netzwerk erstellen:
sudo docker network create meinDockerNetzwerk
✅ Prüfen, ob es erfolgreich war:
docker network ls
📄 3. docker-compose.yml
erstellen¶
Die docker-compose.yml
ist die zentrale Konfigurationsdatei, mit der ein oder mehrere Docker-Container einfach, wiederholbar und sauber gemeinsam erstellt und verwaltet werden.
Für unser Projekt sollen zunächst die Container für Portainer und Nginx Proxy Manager (NPM) als Basis für die Verwaltung der weiteren App-Container eingerichtet werden.
Datei erstellen:
sudo nano /data/core_config/docker-compose-core.yml
Einfügen:
version: "3.8"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/portainer/daten:/data
networks:
- homelab
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: always
ports:
- "80:80"
- "443:443"
- "81:81"
environment:
DB_SQLITE_FILE: "/data/database.sqlite"
volumes:
- /data/nginx-proxy/daten:/data
- /data/nginx-proxy/letsencrypt:/etc/letsencrypt
networks:
- homelab
networks:
homelab:
external: true
📘 4. Elemente der docker-compose.yml
¶
services:
→ definiert die Container, die gleichzeitig erstellt werden sollennetworks:
→ übergreifendes Netzwerk, das für alle Container genutzt wird
Beispielstruktur:
services:
portainer:
...
nginx-proxy-manager:
...
networks:
homelab:
external: true
Abschnitt portainer
im Detail:¶
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/portainer/daten:/data
networks:
- homelab
Zeile | Bedeutung |
---|---|
image: |
Verwendetes Container-Image |
container_name: |
Fester Name für den Container |
restart: |
Automatischer Neustart bei Fehler oder Reboot |
ports: |
Portweiterleitung: Host → Container |
volumes: |
Datenverzeichnis auf dem Host → im Container (Bind Mount) |
networks: |
Zugeordnetes Docker-Netzwerk (hier: homelab ) |
Abschnitt nginx-proxy-manager
:¶
Definiert den Container für den Nginx Proxy Manager. Es können beliebig viele weitere Container definiert werden, die gemeinsam als sogenannter Stack verwaltet werden.
Abschnitt networks:
¶
Definiert das gemeinsame Netzwerk, über das sich alle Container gegenseitig erreichen können:
networks:
homelab:
external: true
⚡ 5. Container erstellen und starten¶
Um die Container zu erstellen und zu starten, wird der Befehl docker compose
verwendet.
- Standard-Dateiname ist
docker-compose.yml
- Der Befehl muss im Verzeichnis dieser Datei ausgeführt werden
📁 Anderen Dateinamen verwenden:
docker compose -f docker-compose-core.yml up -d
📁 Anderer Pfad und Dateiname:
docker compose -f /data/core_config/docker-compose-core.yml up -d
Befehlsteil | Bedeutung |
---|---|
up |
Erstellt (falls nötig) und startet die Container |
-d |
Startet die Container im Hintergrund („detached mode“) |
✅ Projekt starten (Beispiel):
cd /data/core_config
sudo docker compose -f docker-compose-core.yml up -d
¶
cd /data/core_config
sudo docker compose -f docker-compose-core.yml up -d
⚡ 6. Container Logs prüfen¶
Übersicht der laufenden Container:
docker ps
sudo docker logs <CONTAINER ID>
¶
sudo docker logs <CONTAINER ID>
✅ Nächste Schritte¶
- 🔧 Portainer im Browser aufrufen:
http://<dein-server>:9000
- 🌐 Nginx Proxy Manager öffnen:
http://<dein-server>:81
- 🔐 Login einrichten, SSL-Zertifikate beantragen, Subdomains konfigurieren