Ein moderner Web Stack lässt sich effizient mit Docker und Docker Compose auf Linux betreiben. Durch Containerisierung können Nginx als Reverse Proxy, die Anwendungslogik (PHP, Node.js, Python etc.) und die Datenbank isoliert, portabel und einfach orchestriert werden. In diesem Tutorial zeigen wir, wie ein kompletter Web Stack mit Docker Compose aufgebaut, konfiguriert und betrieben wird.
Voraussetzungen
- Linux-Distribution: Ubuntu 22.04 LTS oder CentOS 9
- Root- oder sudo-Zugriff
- Docker installiert:
sudo apt install docker.io -y - Docker Compose installiert:
sudo apt install docker-compose -y - Grundlegende Kenntnisse von Linux CLI und Netzwerkkonzepten
Projektstruktur
Für eine saubere Orchestrierung empfiehlt sich folgende Verzeichnisstruktur:
/var/www/docker-webstack/
├─ app/
│ └─ Dockerfile
├─ nginx/
│ └─ default.conf
├─ db/
│ └─ init.sql
└─ docker-compose.yml
Dockerfile für die App
Die Anwendungslogik kann z. B. PHP-FPM, Node.js oder Python sein. Beispiel: PHP-FPM Laravel App.
# app/Dockerfile
FROM php:8.1-fpm
WORKDIR /var/www/html
# Abhängigkeiten installieren
RUN apt-get update && apt-get install -y
libpq-dev
libonig-dev
zip
unzip
git
&& docker-php-ext-install pdo pdo_pgsql mbstring
COPY . .
RUN chown -R www-data:www-data /var/www/html
Nginx konfigurieren
Nginx wird als Reverse Proxy eingesetzt und leitet Anfragen an die App-Container weiter.
# nginx/default.conf
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://app:9000;
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;
}
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
}
}
Datenbank initialisieren
PostgreSQL oder MySQL können via Container betrieben werden, inklusive Initialisierungsskripten.
# db/init.sql
CREATE DATABASE webapp;
CREATE USER webuser WITH PASSWORD 'Str0ngP@ss';
GRANT ALL PRIVILEGES ON DATABASE webapp TO webuser;
Docker Compose Datei
Docker Compose orchestriert alle Services und stellt Netzwerke, Volumes und Abhängigkeiten bereit.
# docker-compose.yml
version: "3.9"
services:
app:
build: ./app
container_name: app
restart: always
networks:
- webnet
depends_on:
- db
environment:
DB_HOST: db
DB_PORT: 5432
DB_NAME: webapp
DB_USER: webuser
DB_PASSWORD: Str0ngP@ss
nginx:
image: nginx:stable
container_name: nginx
restart: always
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
networks:
- webnet
db:
image: postgres:15
container_name: db
restart: always
environment:
POSTGRES_DB: webapp
POSTGRES_USER: webuser
POSTGRES_PASSWORD: Str0ngP@ss
volumes:
- db-data:/var/lib/postgresql/data
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
networks:
- webnet
volumes:
db-data:
networks:
webnet:
Starten des Stacks
cd /var/www/docker-webstack
docker-compose up -d
docker-compose ps
Monitoring und Logs
- App Logs anzeigen:
docker-compose logs -f app - Nginx Logs prüfen:
docker-compose logs -f nginx - Datenbank Logs prüfen:
docker-compose logs -f db
Netzwerkplanung
Alle Container befinden sich im selben Docker-Bridge-Netzwerk webnet. Für größere Deployments können Subnetze definiert werden.
Beispiel IPv4 Subnetz
<math>
App-IP = 172.20.0.2/24
DB-IP = 172.20.0.3/24
Nginx-IP = 172.20.0.4/24
Subnetzadresse = 172.20.0.0
Broadcastadresse = 172.20.0.255
</math>
IPv6 Subnetz (optional)
<math>
App-IP = fd00:abcd:1::2/64
DB-IP = fd00:abcd:1::3/64
Nginx-IP = fd00:abcd:1::4/64
Subnetzadresse = fd00:abcd:1::0
Broadcastadresse = fd00:abcd:1::ffff:ffff:ffff:ffff
</math>
Best Practices
- Volatile Daten und Logs in Docker Volumes auslagern
- Datenbank-Passwörter sicher in Environment-Variablen oder Secrets speichern
- Statische Assets und Caching über Nginx optimieren
- SSL/TLS via Reverse Proxy oder Let’s Encrypt einrichten
- Prozessmanagement und Health Checks für Container einrichten
- Backups regelmäßig durchführen, besonders für Datenbanken
- Test- und Produktionsumgebung trennen
- Firewall auf Host und Container-Ebene konfigurieren
- Container-Updates kontrolliert durchführen, um Ausfälle zu vermeiden
- Monitoring-Lösungen wie Prometheus oder Grafana für Logs und Performance nutzen
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.











