Site icon bintorosoft.com

Docker Web Stack: Nginx + App + DB mit Docker Compose

Desktop PC monitor photo JavaScript functions variables objects Project

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

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

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

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:

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Exit mobile version