Zum Inhalt springen

Docker-compose: Unterschied zwischen den Versionen

Aus Eddys Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 224: Zeile 224:
echo "✅ iptables-Regeln erfolgreich gesetzt & conntrack optimiert!"
echo "✅ iptables-Regeln erfolgreich gesetzt & conntrack optimiert!"


</pre>
<pre>
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
sudo netfilter-persistent reload
</pre>
</pre>

Version vom 15. März 2025, 15:25 Uhr

version: "3.8"

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: always
    command:
      - "--api.dashboard=true"
      - "--providers.file.directory=/traefik/dynamic"
      - "--providers.file.watch=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.letsencrypt.acme.email=${EMAIL_LETSENCRYPT}"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--serverstransport.insecureSkipVerify=false"  # Verhindert SSL-Warnungen
      - "--global.sendAnonymousUsage=false"  # Verhindert, dass Traefik Telemetrie sendet
      - "--accesslog=true"
      - "--accesslog.filepath=/logs/access.log"
    ports:
      - "80:80"
      - "443:443"
    networks:
      - traefik_default
    env_file:
      - .env
    volumes:
      - "./traefik/dynamic:/traefik/dynamic:ro"
      - "./traefik/letsencrypt:/letsencrypt"
      - "./logs:/logs"

  # 🔹 PostgreSQL als Hauptdatenbank
  postgres:
    image: postgres:15
    container_name: postgres
    restart: always
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    networks:
      - traefik_default
    volumes:
      - postgres_data:/var/lib/postgresql/data

  # 🔹 ClickHouse für OLAP-Abfragen
  clickhouse:
    image: clickhouse/clickhouse-server
    container_name: clickhouse
    restart: always
    environment:
      CLICKHOUSE_DB: "ssd_analytics"
    networks:
      - traefik_default
    volumes:
      - clickhouse_data:/var/lib/clickhouse

  # 🔹 Airflow Webserver & Scheduler
  airflow:
    image: apache/airflow:2.6.3
    container_name: airflow
    restart: always
    depends_on:
      - postgres
      - clickhouse
    environment:
      - LOAD_EXAMPLES=False
      - AIRFLOW__CORE__EXECUTOR=SequentialExecutor
    volumes:
      - ./airflow/dags:/opt/airflow/dags
    networks:
      - traefik_default
    command: >
      bash -c "airflow db init &&
      airflow users create --username ${AIRFLOW_USER} --password ${AIRFLOW_PASSWORD} --firstname Admin --lastname User --role Admin --email ${EMAIL_LETSENCRYPT} &&
      airflow standalone"

  # 🔹 Metabase für OLAP-Analysen & Dashboards
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    restart: always
    depends_on:
      - postgres
      - clickhouse
    networks:
      - traefik_default
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: ${POSTGRES_DB}
      MB_DB_HOST: postgres
    MB_DB_USER: ${POSTGRES_USER}
      MB_DB_PASS: ${POSTGRES_PASSWORD}
    volumes:
      - ./metabase-data:/metabase-data


  # 🔹 pgAdmin für PostgreSQL-Administration
  pgadmin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
    networks:
      - traefik_default
    depends_on:
      - postgres

  # 🔹 Jupyter Notebook für Machine Learning
  jupyter:
    image: jupyter/tensorflow-notebook
    container_name: jupyter
    restart: always
    environment:
      JUPYTER_TOKEN: ${JUPYTER_TOKEN}
      JUPYTER_PASSWORD: ${JUPYTER_PASSWORD}
    volumes:
      - ./jupyter:/home/jovyan/work
    networks:
      - traefik_default
    command: >
      start-notebook.sh --NotebookApp.token='' --NotebookApp.password="${JUPYTER_HASH_PASSWORD}"

  mediawiki:
    image: mediawiki
    container_name: mediawiki
    restart: always
    networks:
      - traefik_default  # Traefik-Netzwerk
    environment:
      MEDIAWIKI_DB_TYPE: "sqlite"
    dns:
      - 8.8.8.8
      - 1.1.1.1
    volumes:
      - mediawiki_data:/var/www/html
      - mediawiki_db:/var/www/data

networks:
  traefik_default:
    external: true

volumes:
  postgres_data:
  clickhouse_data:
  metabase_data:
  mediawiki_data:
  mediawiki_db:

#!/bin/bash

echo "🔧 Setze iptables-Regeln und optimiere conntrack..."

# **Aktive Netzwerkschnittstelle automatisch ermitteln**
IFACE=$(ip route | grep default | awk '{print $5}')
if [[ -z "$IFACE" ]]; then
    echo "⚠️ Keine aktive Netzwerkschnittstelle gefunden. Bitte manuell prüfen!"
    exit 1
fi
echo "🌍 Gefundene Netzwerkschnittstelle: $IFACE"

# Standardrichtlinien setzen (sollte nur gemacht werden, wenn gewünscht)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Bestehende Regeln leeren
iptables -F
iptables -X

# Loopback-Schnittstelle zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Verbindungen erlauben, die zu einer bestehenden Verbindung gehören
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# **DNS erlauben** (damit `apt-get update` funktioniert)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT

# **HTTP und HTTPS erlauben** (für `apt-get update` und Web-Anfragen)
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

# **SSH-Zugang erlauben** (wichtig, falls du über SSH auf den Server zugreifst)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# **Traefik-Ports erlauben (nur falls nötig)**
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# **Docker-Netzwerkverkehr zulassen**
iptables -A INPUT -i docker0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o docker0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i docker0 -o $IFACE -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IFACE -o docker0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

echo "🚀 Bereinige conntrack-Tabelle..."
conntrack -F
conntrack -D --state INVALID

echo "📌 Setze `conntrack`-Maximalwert auf 1.048.576..."
echo 1048576 > /proc/sys/net/netfilter/nf_conntrack_max
sysctl -w net.netfilter.nf_conntrack_max=1048576

# **Regeln dauerhaft speichern (falls iptables-persistent installiert ist)**
if command -v iptables-save &> /dev/null; then
    iptables-save > /etc/iptables.rules
    echo "📌 iptables-Regeln gespeichert unter /etc/iptables.rules"
fi

echo "✅ iptables-Regeln erfolgreich gesetzt & conntrack optimiert!"

sudo apt install iptables-persistent -y
sudo netfilter-persistent save
sudo netfilter-persistent reload