Arama Yap Mesaj Senden
Rückruf anfordern
+90
X
X

Wählen Sie Ihre Währung

Türkische Lira $ US Dollar Euro
X
X

Wählen Sie Ihre Währung

Türkische Lira $ US Dollar Euro

Kontaktieren Sie uns

Standort Halkali Merkez Viertel Fatih Str. Ozgur Apt. No. 46, Kucukcekmece, Istanbul, 34303, TR
Ubuntu 24.04 Docker & Portainer: Nginx, SSL und sicherer Port 9443
Docker, Portainer, Nginx, Let's Encrypt und Ubuntu 24.04

Docker, Docker Compose und Portainer auf Ubuntu 24.04: Kompletter Nginx- und SSL-Ratgeber mit Bildern

Diese Anleitung dokumentiert eine reale Ubuntu-24.04.4-LTS-Installation: Docker Engine aus dem offiziellen Repository, Compose- und Buildx-Prüfung, hello-world-Container-Test, Portainer CE LTS mit persistentem Volume, Nginx Reverse Proxy und Let's Encrypt für portainer.ekasunucu.com, einen realen Certbot-Snap-Timeout sowie die finale Bindung von Port 9443 ausschließlich an 127.0.0.1.

Ubuntu 24.04DockerDocker EngineDocker ComposePortainerPortainer CENginxLet's EncryptCertbotReverse ProxyDocker VPSLinux VPSSelf HostedEKA Server
Docker / Portainer / Ubuntu 24.04
Ubuntu 24.04.4 LTS
   ↓ Docker Engine + Compose
Docker socket /var/run/docker.sock
   ↓
Portainer CE LTS :9443
   ↓ nur localhost
Nginx :443 + Let's Encrypt
   ↓
portainer.ekasunucu.com
Docker29.7.2Portainer2.39.5 LTS
15echte WebP-Screenshots
3TR · EN · DE Inhalt
443öffentliches HTTPS
127.0.0.1Portainer Loopback
01Offizielles Docker-Repo + Engine + Compose
02hello-world und docker info prüfen
03Portainer CE LTS + persistentes portainer_data
04Nginx + SSL + 9443 nur localhost
00
Inhaltsverzeichnis

Ubuntu 24.04 Docker- und Portainer-Installationsschritte

  1. 01Wie wurde die Docker- und Portainer-Architektur auf Ubuntu 24.04 aufgebaut?
  2. 02Betriebssystem, Ressourcen und mögliche Docker-Paketkonflikte prüfen
  3. 03Offizielles Docker-Repository für Ubuntu Noble mit Keyring hinzufügen
  4. 04Docker Engine, Docker Compose und Buildx installieren
  5. 05Exit Code 141 durch head unter set -o pipefail richtig einordnen
  6. 06Docker-Daemon mit hello-world und docker info vollständig testen
  7. 07portainer_data erstellen und Portainer CE LTS starten
  8. 08Erstes Administratorkonto erstellen und Setup-Token geheim halten
  9. 09Nginx installieren, DNS prüfen und Portainer hinter die Domain setzen
  10. 10Bei Certbot-Snap-Timeout die Netzwerkschicht getrennt diagnostizieren
  11. 11APT- und Snap-Certbot nicht parallel aktiv lassen
  12. 12Let's-Encrypt-Zertifikat für portainer.ekasunucu.com ausstellen
  13. 13Öffentlichen Port 9443 schließen und nur an 127.0.0.1 binden
  14. 14Certbot-Timer und renew --dry-run testen
  15. 15Über die HTTPS-Domain anmelden und lokale Umgebung öffnen
  16. 16Docker, Nginx, Portainer, TLS und Ports getrennt final prüfen
01
Reale Testumgebung

Wie wurde die Docker- und Portainer-Architektur auf Ubuntu 24.04 aufgebaut?

Diese Anleitung dokumentiert eine reale Installation auf einem Ubuntu-24.04.4-LTS-VPS. In der Testumgebung liefen Docker Engine 29.7.2, Docker Compose v5.4.0 und Portainer Community Edition 2.39.5 LTS; diese Versionsnummern beschreiben den Test und sind keine dauerhafte Mindestanforderung.

Ziel war nicht nur eine erreichbare Portainer-Oberfläche. Docker wurde aus dem offiziellen Repository installiert, Portainer-Daten liegen in einem Named Volume, Nginx arbeitet als Reverse Proxy, Let's Encrypt liefert TLS und Port 9443 wurde final ausschließlich an 127.0.0.1 gebunden.

Befehl 1
Internet :443
     ↓
Nginx + Let's Encrypt
     ↓
https://127.0.0.1:9443
     ↓
Portainer CE LTS
     ↓
/var/run/docker.sock → Docker Engine
02
Vorprüfungen

Betriebssystem, Ressourcen und mögliche Docker-Paketkonflikte prüfen

Vor der Installation sollten Ubuntu-Version, Kernel, Architektur, RAM und Speicherplatz dokumentiert werden. Der Test-VPS lief mit Ubuntu 24.04.4 LTS Noble, Kernel 6.8.0-137-generic und x86-64.

Vor der Nutzung offizieller Docker-Pakete vorhandene Pakete wie docker.io, docker-compose, containerd, runc oder podman-docker prüfen. Auf Produktivsystemen keine Pakete ohne Prüfung laufender Workloads entfernen.

Befehl 1
cat /etc/os-release | grep -E 'PRETTY_NAME|VERSION_ID|VERSION_CODENAME'
uname -r
dpkg --print-architecture
Befehl 2
free -h
df -h /
Befehl 3
dpkg --get-selections | grep -E 'docker|containerd|runc|podman' || true
03
Offizielles Docker-APT-Repository

Offizielles Docker-Repository für Ubuntu Noble mit Keyring hinzufügen

Docker Engine wurde aus dem offiziellen Ubuntu-Repository von Docker installiert. ca-certificates und curl wurden vorbereitet, der Signaturschlüssel unter /etc/apt/keyrings/docker.asc gespeichert und docker.sources im deb822-Format erstellt.

Ein docker-ce-Kandidat aus Noble stable in apt-cache policy bestätigt die Repository-Verbindung. Im Test war Docker CE 29.7.2 der Kandidat.

Befehl 1
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
Befehl 2
cat >/etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt-get update
apt-cache policy docker-ce
04
Engine und Compose

Docker Engine, Docker Compose und Buildx installieren

Nach der Repository-Prüfung wurden docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin und docker-compose-plugin installiert. Im Test wurden 102 MB geladen; dieser Wert ist versionsabhängig.

Der Docker-Dienst wurde über systemd aktiviert und gestartet. Danach wurden Docker-, Compose- und Buildx-Versionen separat geprüft.

Befehl 1
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Befehl 2
systemctl enable --now docker
systemctl is-active docker
Befehl 3
docker --version
docker compose version
docker buildx version
05
Reales Fehlerprotokoll

Exit Code 141 durch head unter set -o pipefail richtig einordnen

Das erste Automatisierungsskript stoppte trotz funktionierendem Docker-Repository bei head -n 20 mit Exit Code 141. head schloss die Pipe früh, der vorherige Prozess erhielt SIGPIPE und set -o pipefail wertete dies als Fehler.

Für reine Anzeige-Pipelines kann sed -n genutzt werden. || true sollte nur bei eindeutig harmlosen Anzeigeoperationen eingesetzt werden; echte Installationsfehler dürfen nicht verborgen werden.

Befehl 1
apt-cache policy docker-ce | sed -n '1,20p'
Befehl 2
apt-cache policy docker-ce | head -n 20 || true
06
Docker-End-to-End-Test

Docker-Daemon mit hello-world und docker info vollständig testen

docker --version bestätigt nur den Client. Deshalb wurde hello-world heruntergeladen und als Container ausgeführt. 'Hello from Docker!' bestätigte Client, Daemon, Image-Pull und Container-Ausführung gemeinsam.

Mit docker info wurden Storage Driver, Cgroup-Modus, Sicherheitsoptionen, Docker Root Dir und Ressourcen kontrolliert. Der Test zeigte overlayfs, cgroup v2, AppArmor und seccomp.

Befehl 1
docker run --rm hello-world
Befehl 2
docker info
Befehl 3
systemctl --failed
07
Portainer CE LTS

portainer_data erstellen und Portainer CE LTS starten

Für dauerhafte Portainer-Konfiguration wurde das Named Volume portainer_data erstellt. Danach wurde portainer/portainer-ce:lts geladen und der lokale Docker-Socket in den Container eingebunden.

Für die erste reale Prüfung war 9443 kurz auf dem Host veröffentlicht. Nach Einrichtung von Nginx und Domain wurde Portainer final nur mit 127.0.0.1:9443 neu erstellt.

Befehl 1
docker volume create portainer_data
docker pull portainer/portainer-ce:lts
Befehl 2
docker run -d --name portainer --restart=always -p 9443:9443 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
Befehl 3
docker ps --filter name='^/portainer$'
curl -k -sS -o /dev/null -w '%{http_code}\n' https://127.0.0.1:9443/
08
Erstes Administratorkonto

Erstes Administratorkonto erstellen und Setup-Token geheim halten

Eine frische Portainer-Datenbank zeigt beim ersten Start die Einrichtung des Administratorkontos. Im Test erzeugten die Logs zusätzlich ein temporäres Setup-Token. Dieses Token wie Passwort oder API-Key behandeln und niemals veröffentlichen.

Nach dem Admin-Setup erkennt der Environment Wizard die lokale Docker-Umgebung. Läuft die initiale Einrichtung wegen Inaktivität ab, kann der Container neu gestartet werden.

Befehl 1
docker logs portainer --tail 100
Befehl 2
docker restart portainer
09
Domain und Reverse Proxy

Nginx installieren, DNS prüfen und Portainer hinter die Domain setzen

Für portainer.ekasunucu.com wurden Nginx und dnsutils installiert. Erst nachdem Cloudflare DNS und Google DNS auf den erwarteten Origin zeigten, wurde der Reverse Proxy aktiviert.

Nginx leitet zu https://127.0.0.1:9443 weiter. Da Portainer lokal ein selbstsigniertes Zertifikat nutzt, wird proxy_ssl_verify off nur für diesen localhost-Upstream verwendet; öffentliches TLS terminiert Nginx mit Let's Encrypt.

Befehl 1
apt-get update
apt-get install -y nginx dnsutils
systemctl enable --now nginx
Befehl 2
dig +short A portainer.ekasunucu.com @1.1.1.1
dig +short A portainer.ekasunucu.com @8.8.8.8
Befehl 3
cat >/etc/nginx/conf.d/portainer-websocket.conf <<'EOF'
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
EOF
Befehl 4
cat >/etc/nginx/sites-available/portainer.ekasunucu.com <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name portainer.ekasunucu.com;

    location / {
        proxy_pass https://127.0.0.1:9443;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_ssl_verify off;
    }
}
EOF
ln -sfn /etc/nginx/sites-available/portainer.ekasunucu.com /etc/nginx/sites-enabled/portainer.ekasunucu.com
nginx -t
systemctl reload nginx
Befehl 5
curl -sS -o /dev/null -w '%{http_code}\n' -H 'Host: portainer.ekasunucu.com' http://127.0.0.1/
10
Certbot-Fehleranalyse

Bei Certbot-Snap-Timeout die Netzwerkschicht getrennt diagnostizieren

Der erste snap-install-Versuch für Certbot lief beim Download von core24 über Canonicals CDN in einen TCP-443-Timeout. Nginx und Portainer waren dabei weiterhin funktionsfähig; die Ursache lag im Snap-Downloadpfad.

snap changes und snapd-Status bestätigten dies. Ein späterer Versuch installierte Certbot 5.7.0 erfolgreich. Bei temporären CDN-/Netzwerkfehlern nicht vorschnell die Reverse-Proxy-Konfiguration ändern.

Befehl 1
snap changes
systemctl is-active snapd
Befehl 2
snap install --classic certbot
Befehl 3
snap list certbot
/snap/bin/certbot --version
11
Eine Certbot-Quelle

APT- und Snap-Certbot nicht parallel aktiv lassen

Während der Fehlersuche wurden kurzzeitig auch Ubuntu-APT-Pakete von Certbot getestet. Final wurden certbot, python3-certbot und python3-certbot-nginx aus APT entfernt und ausschließlich Certbot 5.7.0 als Snap genutzt.

Eine einzige Binary und ein Renewal-Mechanismus vereinfachen Diagnose und Wartung. Auf bestehenden Produktivsystemen vorher Zertifikats- und Renewal-Konfiguration prüfen.

Befehl 1
apt-get remove -y certbot python3-certbot python3-certbot-nginx python3-certbot || true
Befehl 2
snap install --classic certbot
ln -sfn /snap/bin/certbot /usr/local/bin/certbot
certbot --version
12
Let's Encrypt TLS

Let's-Encrypt-Zertifikat für portainer.ekasunucu.com ausstellen

Nachdem der HTTP-Reverse-Proxy 200 lieferte, wurde das Let's-Encrypt-Zertifikat ausgestellt. Certbot speicherte es unter /etc/letsencrypt/live/portainer.ekasunucu.com und konfigurierte Nginx für HTTPS.

Nach der Ausstellung wurden nginx -t, HTTPS-Antwort sowie Subject, Issuer und Gültigkeitsdaten mit openssl geprüft.

Befehl 1
certbot --nginx -d portainer.ekasunucu.com -m [email protected] --agree-tos --no-eff-email --redirect
Befehl 2
nginx -t
systemctl is-active nginx
Befehl 3
curl -I https://portainer.ekasunucu.com/
Befehl 4
openssl s_client -connect portainer.ekasunucu.com:443 -servername portainer.ekasunucu.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates
13
Verwaltungsport absichern

Öffentlichen Port 9443 schließen und nur an 127.0.0.1 binden

Nach erfolgreichem Domain-/TLS-Pfad wurde Portainer mit demselben portainer_data-Volume neu erstellt und die Host-Zuordnung auf 127.0.0.1:9443:9443 geändert. Der Verwaltungsport lauscht damit nicht mehr auf öffentlichen Interfaces.

Das Named Volume erhält die Portainer-Datenbank beim Container-Neustart. Final sollte 9443 nur auf Loopback und 80/443 über Nginx sichtbar sein.

Befehl 1
docker stop portainer
docker rm portainer
Befehl 2
docker run -d --name portainer --restart=always -p 127.0.0.1:9443:9443 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
Befehl 3
docker ps --filter name='^/portainer$'
ss -lntp | grep -E ':(80|443|9443)\b'
Befehl 4
curl -k -sS -o /dev/null -w '%{http_code}\n' https://127.0.0.1:9443/
curl -sS -o /dev/null -w '%{http_code}\n' https://portainer.ekasunucu.com/
14
Automatische Erneuerung

Certbot-Timer und renew --dry-run testen

Ein heute gültiges Zertifikat braucht einen überprüften Erneuerungsweg. Daher wurde der snap.certbot.renew-Timer kontrolliert und certbot renew --dry-run ausgeführt.

Die simulierte Erneuerung war erfolgreich. Zusammen mit nginx -t ist dies ein wichtiger Test vor dem unbeaufsichtigten Betrieb.

Befehl 1
systemctl list-timers --all | grep -i certbot || true
Befehl 2
certbot renew --dry-run
Befehl 3
nginx -t
15
Weboberfläche

Über die HTTPS-Domain anmelden und lokale Umgebung öffnen

Die finale Portainer-Anmeldung erfolgte nur über https://portainer.ekasunucu.com. Nach dem Login erkannte der Environment Wizard den lokalen Docker-Socket und bot die lokale Umgebung an.

Auf der Startseite erschien local als Up; Container, Volume, Images sowie CPU/RAM wurden angezeigt. Damit war auch die tatsächliche Docker-Verwaltung über Portainer bestätigt.

Befehl 1
https://portainer.ekasunucu.com
16
Produktionscheck

Docker, Nginx, Portainer, TLS und Ports getrennt final prüfen

Zum Abschluss Docker- und Nginx-Dienste, Portainer-Container, Named Volume, Docker-Speicher, HTTPS-Status und fehlgeschlagene systemd-Units getrennt prüfen. Der Test endete mit HTTP 200 und null failed units.

Diese Prüfungen nach einem Reboot wiederholen. Docker-Restart-Policy, Nginx-Autostart, Portainer und Domain-TLS dürfen nicht von einer interaktiven SSH-Sitzung abhängen.

Befehl 1
systemctl is-active docker nginx
docker ps
docker volume ls
Befehl 2
docker system df
Befehl 3
curl -sS -o /dev/null -w 'HTTPS %{http_code}\n' https://portainer.ekasunucu.com/
Befehl 4
ss -lntp | grep -E ':(80|443|9443)\b'
systemctl --failed
Production checklist

Produktions-Sicherheitscheck für Docker + Portainer

Portainer 9443 nicht auf der öffentlichen IP belassen; bei Reverse Proxy an Loopback binden.
Docker-Daemon-TCP-Socket niemals ohne Authentifizierung öffentlich freigeben.
Starkes eindeutiges Portainer-Admin-Passwort nutzen und Setup-Token sowie Backups schützen.
portainer_data und kritische Containerdaten regelmäßig sichern.
Auswirkungen von Docker-published-Ports auf Host-Firewall-Regeln prüfen.
In Nginx nur benötigte Domains veröffentlichen und vor Reload immer nginx -t ausführen.
Certbot-Renewal-Timer und renew --dry-run prüfen.
Vor Docker-/Portainer-Updates Versionen, Volumes und Rollback dokumentieren.
Nach Reboot Docker, Nginx, Portainer und HTTPS erneut testen.
R
Offizielle Quellen

Offizielle Docker-, Portainer-, Nginx- und Certbot-Dokumentation

+
EKA Sunucu

Weitere EKA Server Linux- und Self-Hosted-Ratgeber

?
FAQ

Häufige Fragen zu Docker und Portainer auf Ubuntu 24.04

Läuft Docker auf Ubuntu 24.04 LTS?

Ja. Diese Anleitung dokumentiert Docker Engine 29.7.2 auf Ubuntu 24.04.4 LTS Noble. Für neue Installationen die aktuell unterstützten Versionen der offiziellen Docker-Dokumentation verwenden.

Warum das offizielle Docker-Repository?

Damit Docker CE, Compose und Buildx aus dem Ubuntu-Paketkanal von Docker mit zusammenpassenden Plugins installiert werden.

Warum docker run hello-world?

docker --version prüft nur den Client. hello-world testet Daemon-Verbindung, Image-Pull, Container-Erstellung und Ausgabe gemeinsam.

Welchen Port nutzt Portainer?

Portainer stellt HTTPS auf 9443 bereit. Final lauscht der Host hier nur auf 127.0.0.1:9443; öffentlich wird Portainer über Nginx auf 443 erreicht.

Ist das selbstsignierte Portainer-Zertifikat problematisch?

In dieser Architektur wird es nur für den lokalen Upstream verwendet. Öffentliches TLS wird durch Nginx mit Let's Encrypt bereitgestellt.

Gehen Einstellungen beim Neuerstellen des Containers verloren?

Nicht wenn das Named Volume portainer_data erhalten bleibt. Das Volume beim Container-Austausch nicht löschen.

Was ist das Portainer Setup-Token?

Ein sensibles temporäres Token für die erste Administration einer frischen Installation. Wie ein Passwort behandeln und nicht veröffentlichen.

Was tun bei Certbot-Snap-Timeout?

snap changes, snapd und ausgehendes HTTPS prüfen. Im Test lief ein Canonical-CDN-Download in einen Timeout; ein späterer Versuch war erfolgreich.

APT Certbot und Snap Certbot gleichzeitig?

Nicht in der finalen Konfiguration dieser Anleitung. APT-Certbot-Pakete wurden entfernt und Snap Certbot verwendet.

Warum Port 9443 öffentlich schließen?

Nginx bietet bereits sicheren Domainzugriff auf 443. Der rohe Portainer-Verwaltungsport muss deshalb nicht zusätzlich auf der öffentlichen IP lauschen.

Wie teste ich die automatische Zertifikatserneuerung?

certbot renew --dry-run simuliert die Erneuerung ohne das aktive Zertifikat zu ersetzen. Unser Test war erfolgreich.

Wie wird die lokale Portainer-Umgebung hinzugefügt?

Wenn /var/run/docker.sock in Portainer eingebunden ist, kann der Environment Wizard den lokalen Docker-Host erkennen und über Get Started anbieten.

Welche Ports sollten final lauschen?

In dieser Architektur lauscht Nginx öffentlich auf 80/443; Portainer 9443 bleibt nur auf Loopback. SSH und weitere Dienste separat absichern.

Kann ich das auf einem EKA-Server-VPS betreiben?

Auf einem geeigneten Ubuntu-VPS mit Root/SSH, genügend RAM/SSD und passender Sicherheitsrichtlinie kann dieselbe Architektur eingesetzt werden. Der Ressourcenbedarf hängt von den Containern ab.

EKA YAZILIM VE BİLİŞİM SİSTEMLERİ

Ubuntu VPS für Docker und Portainer gesucht?

Docker Engine, Portainer, Nginx, Ollama, Open WebUI, n8n und weitere Self-Hosted-Dienste auf eigener Infrastruktur mit EKA Server Linux VPS betreiben.

Aktualisiert: 10.08.2026
Linux-VPS-Pakete ansehenLinux- & VPS-Ratgeber
Top