Zum Inhalt

📁 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 sollen
  • networks: → ü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

⚡ 6. Container Logs prüfen

Übersicht der laufenden Container:

docker ps
aus der Liste die CONTAINER ID heraussuchen

sudo docker logs <CONTAINER ID>

✅ Nächste Schritte

  1. 🔧 Portainer im Browser aufrufen: http://<dein-server>:9000
  2. 🌐 Nginx Proxy Manager öffnen: http://<dein-server>:81
  3. 🔐 Login einrichten, SSL-Zertifikate beantragen, Subdomains konfigurieren