{"id":26,"date":"2026-04-15T09:06:11","date_gmt":"2026-04-15T09:06:11","guid":{"rendered":"https:\/\/bytekami.de\/it-wiki\/"},"modified":"2026-04-15T09:06:11","modified_gmt":"2026-04-15T09:06:11","slug":"it-wiki","status":"publish","type":"page","link":"https:\/\/bytekami.de\/?page_id=26","title":{"rendered":"IT-Wiki"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>ByteKami \u2014 IT-Wiki<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Mono:wght@400;500&#038;family=Syne:wght@700;800&#038;family=DM+Sans:wght@300;400;500&#038;display=swap\" rel=\"stylesheet\">\n<style>\n:root {\n  --bg:#0b0d10;--surface:#13161b;--s2:#1a1e26;\n  --border:rgba(255,255,255,0.07);--b2:rgba(255,255,255,0.13);\n  --text:#dde3ee;--muted:#5a6378;\n  --accent:#4f8ef7;--a2:#7c3aed;\n  --green:#22c55e;--red:#ef4444;--orange:#f97316;--yellow:#eab308;\n}\n*{margin:0;padding:0;box-sizing:border-box;}\nhtml{background:var(--bg);}\nbody{background:var(--bg);color:var(--text);font-family:'DM Sans',sans-serif;min-height:100vh;}\nbody::before{\n  content:'';position:fixed;inset:0;z-index:0;pointer-events:none;\n  background-image:linear-gradient(rgba(79,142,247,0.025) 1px,transparent 1px),\n    linear-gradient(90deg,rgba(79,142,247,0.025) 1px,transparent 1px);\n  background-size:48px 48px;\n}\n.page{position:relative;z-index:1;min-height:100vh;display:flex;flex-direction:column;}\nnav{\n  display:flex;align-items:center;justify-content:space-between;\n  padding:1rem 1.5rem;border-bottom:1px solid var(--border);\n  background:rgba(11,13,16,0.9);backdrop-filter:blur(12px);\n  position:sticky;top:0;z-index:50;gap:1rem;flex-wrap:wrap;\n}\n.nav-logo{font-family:'Syne',sans-serif;font-weight:800;font-size:1.1rem;letter-spacing:-0.02em;display:flex;align-items:center;gap:0.5rem;text-decoration:none;color:var(--text);}\n.nav-dot{width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,var(--accent),var(--a2));}\n.nav-links{display:flex;align-items:center;gap:0.5rem;flex-wrap:wrap;}\n.nav-link{font-family:'DM Mono',monospace;font-size:0.65rem;color:var(--muted);text-decoration:none;padding:0.3rem 0.6rem;border-radius:6px;border:1px solid var(--border);transition:all 0.15s;}\n.nav-link:hover{color:var(--text);border-color:var(--b2);background:var(--surface);}\n.wiki-hero{padding:2.5rem 1.5rem 2rem;border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--surface) 0%,transparent 100%);}\n.wiki-hero-inner{max-width:900px;margin:0 auto;}\n.wiki-tag{font-family:'DM Mono',monospace;font-size:0.65rem;color:var(--accent);letter-spacing:0.1em;text-transform:uppercase;margin-bottom:0.75rem;}\n.wiki-title{font-family:'Syne',sans-serif;font-weight:800;font-size:clamp(1.8rem,5vw,3rem);letter-spacing:-0.03em;margin-bottom:0.5rem;}\n.wiki-sub{font-size:0.9rem;color:var(--muted);line-height:1.6;}\n.search-wrap{margin-top:1.5rem;}\n.search-input{width:100%;padding:0.75rem 1rem;background:var(--s2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-family:'DM Mono',monospace;font-size:0.8rem;outline:none;transition:border-color 0.2s;}\n.search-input::placeholder{color:var(--muted);}\n.search-input:focus{border-color:var(--accent);}\n.main{max-width:900px;margin:0 auto;padding:2rem 1.5rem;flex:1;width:100%;}\n.category{margin-bottom:2.5rem;}\n.cat-header{display:flex;align-items:center;gap:0.75rem;margin-bottom:1rem;padding-bottom:0.75rem;border-bottom:1px solid var(--border);}\n.cat-icon{font-size:1.2rem;}\n.cat-title{font-family:'Syne',sans-serif;font-weight:700;font-size:1rem;letter-spacing:-0.01em;}\n.cat-count{font-family:'DM Mono',monospace;font-size:0.6rem;color:var(--muted);background:var(--s2);border:1px solid var(--border);border-radius:100px;padding:0.15rem 0.5rem;margin-left:auto;}\n.articles{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:0.75rem;}\n.article{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.1rem;cursor:pointer;transition:all 0.2s;text-decoration:none;color:inherit;display:block;position:relative;overflow:hidden;}\n.article::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;border-radius:10px 10px 0 0;opacity:0;transition:opacity 0.2s;}\n.article:hover{border-color:var(--b2);transform:translateY(-2px);}\n.article:hover::before{opacity:1;}\n.article.linux::before{background:var(--orange);}\n.article.docker::before{background:var(--accent);}\n.article.security::before{background:var(--red);}\n.article.homelab::before{background:var(--green);}\n.article.windows::before{background:var(--yellow);}\n.article-tag{font-family:'DM Mono',monospace;font-size:0.58rem;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:0.5rem;}\n.article.linux .article-tag{color:var(--orange);}\n.article.docker .article-tag{color:var(--accent);}\n.article.security .article-tag{color:var(--red);}\n.article.homelab .article-tag{color:var(--green);}\n.article.windows .article-tag{color:var(--yellow);}\n.article-title{font-family:'Syne',sans-serif;font-weight:700;font-size:0.9rem;letter-spacing:-0.01em;margin-bottom:0.4rem;line-height:1.3;}\n.article-desc{font-size:0.78rem;color:var(--muted);line-height:1.5;}\n.article-meta{display:flex;align-items:center;gap:0.5rem;margin-top:0.75rem;padding-top:0.75rem;border-top:1px solid var(--border);}\n.article-status{font-family:'DM Mono',monospace;font-size:0.58rem;padding:0.15rem 0.45rem;border-radius:4px;}\n.status-done{background:rgba(34,197,94,0.1);color:var(--green);border:1px solid rgba(34,197,94,0.2);}\n.status-wip{background:rgba(234,179,8,0.1);color:var(--yellow);border:1px solid rgba(234,179,8,0.2);}\n.status-planned{background:rgba(90,99,120,0.15);color:var(--muted);border:1px solid var(--border);}\n.article-date{font-family:'DM Mono',monospace;font-size:0.58rem;color:var(--muted);margin-left:auto;}\n.modal-overlay{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,0.8);backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;padding:1rem;}\n.modal-overlay.open{display:flex;}\n.modal{background:var(--surface);border:1px solid var(--b2);border-radius:12px;width:100%;max-width:640px;max-height:85vh;overflow-y:auto;}\n.modal-head{display:flex;align-items:flex-start;justify-content:space-between;padding:1.5rem;border-bottom:1px solid var(--border);gap:1rem;}\n.modal-close{background:var(--s2);border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:0.3rem 0.6rem;cursor:pointer;font-size:0.8rem;flex-shrink:0;transition:all 0.15s;}\n.modal-close:hover{color:var(--text);border-color:var(--b2);}\n.modal-body{padding:1.5rem;}\n.modal-title{font-family:'Syne',sans-serif;font-weight:800;font-size:1.3rem;letter-spacing:-0.02em;margin-bottom:0.25rem;}\n.modal-tag{font-family:'DM Mono',monospace;font-size:0.62rem;color:var(--muted);letter-spacing:0.08em;text-transform:uppercase;}\n.modal-content{font-size:0.85rem;line-height:1.7;color:var(--muted);}\n.modal-content h4{font-family:'Syne',sans-serif;font-weight:700;font-size:0.9rem;color:var(--text);margin:1.2rem 0 0.4rem;}\n.modal-content p{margin-bottom:0.5rem;}\n.modal-content code{font-family:'DM Mono',monospace;font-size:0.78rem;background:var(--s2);border:1px solid var(--border);border-radius:4px;padding:0.1rem 0.4rem;color:var(--accent);}\n.modal-content pre{font-family:'DM Mono',monospace;font-size:0.75rem;background:var(--s2);border:1px solid var(--border);border-radius:8px;padding:1rem;margin:0.75rem 0;overflow-x:auto;line-height:1.6;color:var(--green);}\n.modal-content ul{padding-left:1.2rem;margin:0.5rem 0;}\n.modal-content li{margin-bottom:0.3rem;}\n.modal-wip{background:rgba(234,179,8,0.08);border:1px solid rgba(234,179,8,0.2);border-radius:8px;padding:0.75rem 1rem;margin-bottom:1rem;font-family:'DM Mono',monospace;font-size:0.72rem;color:var(--yellow);}\nfooter{padding:1rem 1.5rem;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-family:'DM Mono',monospace;font-size:0.6rem;color:var(--muted);}\n@media(max-width:500px){.articles{grid-template-columns:1fr;}}\n<\/style>\n<\/head>\n<body>\n<div class=\"page\">\n<nav>\n  <a href=\"\/\" class=\"nav-logo\"><div class=\"nav-dot\"><\/div>ByteKami<\/a>\n  <div class=\"nav-links\">\n    <a href=\"\/?page_id=6\" class=\"nav-link\">\u26a1 Dashboard<\/a>\n    <a href=\"\/\" class=\"nav-link\">\u2190 Home<\/a>\n  <\/div>\n<\/nav>\n\n<div class=\"wiki-hero\">\n  <div class=\"wiki-hero-inner\">\n    <div class=\"wiki-tag\">\/\/ Pers\u00f6nliche Wissensdatenbank<\/div>\n    <div class=\"wiki-title\">IT-Wiki<\/div>\n    <div class=\"wiki-sub\">Guides, Configs und Notizen rund um Linux, Docker, Security und Homelab.<\/div>\n    <div class=\"search-wrap\">\n      <input class=\"search-input\" type=\"text\" placeholder=\"Artikel suchen\u2026\" id=\"search\" oninput=\"filterArticles()\">\n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"main\" id=\"main\">\n\n  <div class=\"category\" data-cat=\"linux\">\n    <div class=\"cat-header\">\n      <span class=\"cat-icon\">\ud83d\udc27<\/span>\n      <span class=\"cat-title\">Linux<\/span>\n      <span class=\"cat-count\">3 Artikel<\/span>\n    <\/div>\n    <div class=\"articles\">\n      <a class=\"article linux\" onclick=\"openModal('pacman')\">\n        <div class=\"article-tag\">Arch \/ CachyOS<\/div>\n        <div class=\"article-title\">pacman Cheatsheet<\/div>\n        <div class=\"article-desc\">Die wichtigsten pacman-Befehle f\u00fcr Arch-basierte Systeme auf einen Blick.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article linux\" onclick=\"openModal('ssh')\">\n        <div class=\"article-tag\">SSH<\/div>\n        <div class=\"article-title\">SSH Keys &#038; Config<\/div>\n        <div class=\"article-desc\">SSH-Keys generieren, auf Server kopieren und die SSH-Config f\u00fcr schnelle Verbindungen nutzen.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article linux\" onclick=\"openModal('systemd')\">\n        <div class=\"article-tag\">systemd<\/div>\n        <div class=\"article-title\">systemd Services verwalten<\/div>\n        <div class=\"article-desc\">Services starten, stoppen, aktivieren und Logs mit journalctl lesen.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n    <\/div>\n  <\/div>\n\n  <div class=\"category\" data-cat=\"docker\">\n    <div class=\"cat-header\">\n      <span class=\"cat-icon\">\ud83d\udc33<\/span>\n      <span class=\"cat-title\">Docker<\/span>\n      <span class=\"cat-count\">3 Artikel<\/span>\n    <\/div>\n    <div class=\"articles\">\n      <a class=\"article docker\" onclick=\"openModal('docker-basics')\">\n        <div class=\"article-tag\">Docker<\/div>\n        <div class=\"article-title\">Docker Grundbefehle<\/div>\n        <div class=\"article-desc\">Container starten, stoppen, logs lesen und Images verwalten.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article docker\" onclick=\"openModal('compose')\">\n        <div class=\"article-tag\">Docker Compose<\/div>\n        <div class=\"article-title\">docker-compose Cheatsheet<\/div>\n        <div class=\"article-desc\">Multi-Container Setups mit docker-compose verwalten und deployen.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article docker\" onclick=\"openModal('volumes')\">\n        <div class=\"article-tag\">Docker<\/div>\n        <div class=\"article-title\">Volumes &#038; Mounts<\/div>\n        <div class=\"article-desc\">Persistente Daten in Docker mit Volumes und Bind-Mounts richtig handhaben.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n    <\/div>\n  <\/div>\n\n  <div class=\"category\" data-cat=\"security\">\n    <div class=\"cat-header\">\n      <span class=\"cat-icon\">\ud83d\udd12<\/span>\n      <span class=\"cat-title\">Security<\/span>\n      <span class=\"cat-count\">3 Artikel<\/span>\n    <\/div>\n    <div class=\"articles\">\n      <a class=\"article security\" onclick=\"openModal('fail2ban')\">\n        <div class=\"article-tag\">fail2ban<\/div>\n        <div class=\"article-title\">fail2ban einrichten<\/div>\n        <div class=\"article-desc\">Brute-Force-Angriffe automatisch blockieren mit fail2ban Jails und Filtern.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article security\" onclick=\"openModal('nginx-sec')\">\n        <div class=\"article-tag\">nginx<\/div>\n        <div class=\"article-title\">nginx Hardening<\/div>\n        <div class=\"article-desc\">Security Headers, Rate Limiting, SSL-Config und Bad-Bot-Blocking f\u00fcr nginx.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article security\" onclick=\"openModal('ufw')\">\n        <div class=\"article-tag\">Firewall<\/div>\n        <div class=\"article-title\">UFW Firewall<\/div>\n        <div class=\"article-desc\">Einfache Firewall-Regeln mit UFW \u2013 der unkomplizierten Firewall f\u00fcr Ubuntu.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n    <\/div>\n  <\/div>\n\n  <div class=\"category\" data-cat=\"homelab\">\n    <div class=\"cat-header\">\n      <span class=\"cat-icon\">\ud83c\udfe0<\/span>\n      <span class=\"cat-title\">Homelab &#038; Self-Hosting<\/span>\n      <span class=\"cat-count\">3 Artikel<\/span>\n    <\/div>\n    <div class=\"articles\">\n      <a class=\"article homelab\" onclick=\"openModal('wordpress')\">\n        <div class=\"article-tag\">WordPress<\/div>\n        <div class=\"article-title\">WordPress mit Docker self-hosten<\/div>\n        <div class=\"article-desc\">Kompletter Stack mit nginx, PHP-FPM, MariaDB und SSL via certbot.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article homelab\" onclick=\"openModal('adguard')\">\n        <div class=\"article-tag\">DNS<\/div>\n        <div class=\"article-title\">AdGuard Home<\/div>\n        <div class=\"article-desc\">Werbung und Tracker netzwerkweit blockieren mit AdGuard Home als DNS-Server.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-done\">Fertig<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n      <a class=\"article homelab\" onclick=\"openModal('backup')\">\n        <div class=\"article-tag\">Backup<\/div>\n        <div class=\"article-title\">Server Backup-Strategie<\/div>\n        <div class=\"article-desc\">Datenbanken, Configs und Dateien automatisch sichern \u2013 3-2-1 Regel im Homelab.<\/div>\n        <div class=\"article-meta\"><span class=\"article-status status-wip\">In Arbeit<\/span><span class=\"article-date\">2026<\/span><\/div>\n      <\/a>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<div class=\"modal-overlay\" id=\"modal-overlay\">\n  <div class=\"modal\" id=\"modal\">\n    <div class=\"modal-head\">\n      <div>\n        <div class=\"modal-tag\" id=\"modal-tag\"><\/div>\n        <div class=\"modal-title\" id=\"modal-title\"><\/div>\n      <\/div>\n      <button class=\"modal-close\" onclick=\"closeModal()\">\u2715 Schlie\u00dfen<\/button>\n    <\/div>\n    <div class=\"modal-body\">\n      <div class=\"modal-content\" id=\"modal-content\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<footer>\n  <div>bytekami.de \/\/ IT-Wiki<\/div>\n  <div>12 Artikel<\/div>\n<\/footer>\n<\/div>\n\n<script>\nconst articles = {\n  'pacman': {\n    tag: 'Arch Linux \u00b7 Paketmanager',\n    title: 'pacman Cheatsheet',\n    content: `\n      <h4>System & Pakete aktualisieren<\/h4>\n      <pre>sudo pacman -Syu<\/pre>\n      <h4>Paket installieren \/ entfernen<\/h4>\n      <pre>sudo pacman -S paketname\nsudo pacman -R paketname\nsudo pacman -Rns paketname   # inkl. Abh\u00e4ngigkeiten<\/pre>\n      <h4>Paket suchen<\/h4>\n      <pre>pacman -Ss suchbegriff       # in Repos suchen\npacman -Qs suchbegriff       # installierte suchen<\/pre>\n      <h4>Cache aufr\u00e4umen<\/h4>\n      <pre>sudo pacman -Sc              # alten Cache l\u00f6schen\nsudo pacman -Scc             # kompletten Cache l\u00f6schen<\/pre>\n      <h4>AUR mit paru<\/h4>\n      <pre>paru -S aur-paketname\nparu -Sua                    # AUR Pakete updaten<\/pre>\n    `\n  },\n  'ssh': {\n    tag: 'Linux \u00b7 SSH',\n    title: 'SSH Keys & Config',\n    content: `\n      <h4>SSH-Key generieren<\/h4>\n      <pre>ssh-keygen -t ed25519 -C \"kommentar\"<\/pre>\n      <h4>Key auf Server kopieren<\/h4>\n      <pre>ssh-copy-id -i ~\/.ssh\/id_ed25519.pub user@server<\/pre>\n      <h4>SSH Config (~\/.ssh\/config)<\/h4>\n      <pre>Host meinserver\n    HostName 192.168.0.95\n    User kami\n    IdentityFile ~\/.ssh\/id_ed25519<\/pre>\n      <p>Danach einfach: <code>ssh meinserver<\/code><\/p>\n      <h4>Verbindung debuggen<\/h4>\n      <pre>ssh -v meinserver<\/pre>\n      <h4>Berechtigungen pr\u00fcfen<\/h4>\n      <pre>chmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/id_ed25519\nchmod 644 ~\/.ssh\/id_ed25519.pub<\/pre>\n    `\n  },\n  'systemd': {\n    tag: 'Linux \u00b7 systemd',\n    title: 'systemd Services verwalten',\n    content: `\n      <h4>Service starten \/ stoppen<\/h4>\n      <pre>sudo systemctl start servicename\nsudo systemctl stop servicename\nsudo systemctl restart servicename<\/pre>\n      <h4>Autostart aktivieren<\/h4>\n      <pre>sudo systemctl enable servicename\nsudo systemctl enable --now servicename   # + sofort starten<\/pre>\n      <h4>Status pr\u00fcfen<\/h4>\n      <pre>systemctl status servicename<\/pre>\n      <h4>Logs lesen<\/h4>\n      <pre>journalctl -u servicename\njournalctl -u servicename -f    # live folgen\njournalctl -xe                  # letzte Fehler<\/pre>\n      <h4>Alle Services anzeigen<\/h4>\n      <pre>systemctl list-units --type=service<\/pre>\n    `\n  },\n  'docker-basics': {\n    tag: 'Docker',\n    title: 'Docker Grundbefehle',\n    content: `\n      <h4>Container verwalten<\/h4>\n      <pre>docker ps              # laufende Container\ndocker ps -a           # alle Container\ndocker start name\ndocker stop name\ndocker restart name\ndocker rm name<\/pre>\n      <h4>Logs & Shell<\/h4>\n      <pre>docker logs name\ndocker logs name -f    # live folgen\ndocker exec -it name bash<\/pre>\n      <h4>Images<\/h4>\n      <pre>docker images\ndocker pull image:tag\ndocker rmi image:tag<\/pre>\n      <h4>Aufr\u00e4umen<\/h4>\n      <pre>docker system prune        # alles Ungenutzte l\u00f6schen\ndocker image prune -a      # alle ungenutzten Images<\/pre>\n    `\n  },\n  'compose': {\n    tag: 'Docker Compose',\n    title: 'docker-compose Cheatsheet',\n    content: `\n      <h4>Stack starten \/ stoppen<\/h4>\n      <pre>docker compose up -d          # im Hintergrund starten\ndocker compose down           # stoppen & entfernen\ndocker compose restart        # alle neu starten<\/pre>\n      <h4>Updates einspielen<\/h4>\n      <pre>docker compose pull           # neue Images holen\ndocker compose up -d          # neu deployen<\/pre>\n      <h4>Logs<\/h4>\n      <pre>docker compose logs\ndocker compose logs -f servicename<\/pre>\n      <h4>Einzelnen Service neu starten<\/h4>\n      <pre>docker compose restart nginx<\/pre>\n      <h4>Minimal docker-compose.yml<\/h4>\n      <pre>services:\n  app:\n    image: nginx:latest\n    ports:\n      - \"80:80\"\n    volumes:\n      - .\/html:\/usr\/share\/nginx\/html\n    restart: unless-stopped<\/pre>\n    `\n  },\n  'volumes': {\n    tag: 'Docker \u00b7 Volumes',\n    title: 'Volumes & Mounts',\n    content: `\n      <h4>Bind Mount (Host-Ordner)<\/h4>\n      <pre>volumes:\n  - \/host\/pfad:\/container\/pfad\n  - \/host\/pfad:\/container\/pfad:ro   # read-only<\/pre>\n      <h4>Named Volume<\/h4>\n      <pre>volumes:\n  - mydata:\/var\/lib\/data\n\nvolumes:\n  mydata:<\/pre>\n      <h4>Volumes auflisten & inspizieren<\/h4>\n      <pre>docker volume ls\ndocker volume inspect mydata<\/pre>\n      <h4>Volume l\u00f6schen<\/h4>\n      <pre>docker volume rm mydata\ndocker volume prune      # alle ungenutzten l\u00f6schen<\/pre>\n      <p>\u26a0\ufe0f Volumes werden bei <code>docker compose down<\/code> nicht automatisch gel\u00f6scht \u2013 Daten bleiben erhalten.<\/p>\n    `\n  },\n  'fail2ban': {\n    tag: 'Security \u00b7 fail2ban',\n    title: 'fail2ban einrichten',\n    content: `\n      <h4>Installation<\/h4>\n      <pre>sudo apt install fail2ban\nsudo systemctl enable --now fail2ban<\/pre>\n      <h4>Konfiguration<\/h4>\n      <p>Eigene Configs in <code>\/etc\/fail2ban\/jail.local<\/code> anlegen (nie jail.conf direkt bearbeiten).<\/p>\n      <pre>[DEFAULT]\nbantime  = 24h\nfindtime = 10m\nmaxretry = 3\nignoreip = 127.0.0.1\/8 192.168.0.0\/24\n\n[sshd]\nenabled = true\nport    = ssh\nbackend = systemd<\/pre>\n      <h4>Status pr\u00fcfen<\/h4>\n      <pre>sudo fail2ban-client status\nsudo fail2ban-client status sshd<\/pre>\n      <h4>IP entbannen<\/h4>\n      <pre>sudo fail2ban-client set sshd unbanip 1.2.3.4<\/pre>\n      <h4>Filter testen<\/h4>\n      <pre>sudo fail2ban-regex \/var\/log\/auth.log \/etc\/fail2ban\/filter.d\/sshd.conf<\/pre>\n    `\n  },\n  'nginx-sec': {\n    tag: 'nginx \u00b7 Security',\n    title: 'nginx Hardening',\n    content: `\n      <h4>Security Headers<\/h4>\n      <pre>add_header X-Frame-Options \"SAMEORIGIN\" always;\nadd_header X-Content-Type-Options \"nosniff\" always;\nadd_header X-XSS-Protection \"1; mode=block\" always;\nadd_header Referrer-Policy \"strict-origin-when-cross-origin\" always;\nadd_header Strict-Transport-Security \"max-age=31536000; includeSubDomains\" always;<\/pre>\n      <h4>Rate Limiting<\/h4>\n      <pre>limit_req_zone $binary_remote_addr zone=api:10m rate=10r\/s;\n\nlocation \/api\/ {\n    limit_req zone=api burst=20 nodelay;\n}<\/pre>\n      <h4>Bad Bots blockieren<\/h4>\n      <pre>if ($http_user_agent ~* \"(sqlmap|nikto|masscan|zgrab)\") {\n    return 403;\n}<\/pre>\n      <h4>Sensible Pfade sperren<\/h4>\n      <pre>location ~* \/\\.(env|git|htaccess)(\/|$) {\n    deny all;\n}<\/pre>\n    `\n  },\n  'ufw': {\n    tag: 'Firewall \u00b7 UFW',\n    title: 'UFW Firewall',\n    content: `\n      <h4>Grundsetup<\/h4>\n      <pre>sudo ufw default deny incoming\nsudo ufw default allow outgoing<\/pre>\n      <h4>Regeln hinzuf\u00fcgen<\/h4>\n      <pre>sudo ufw allow ssh\nsudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw allow from 192.168.0.0\/24   # LAN erlauben<\/pre>\n      <h4>Aktivieren & Status<\/h4>\n      <pre>sudo ufw enable\nsudo ufw status verbose<\/pre>\n      <h4>Regel l\u00f6schen<\/h4>\n      <pre>sudo ufw status numbered\nsudo ufw delete 3           # Regel Nr. 3 l\u00f6schen<\/pre>\n      <h4>Port blockieren<\/h4>\n      <pre>sudo ufw deny 3000\/tcp<\/pre>\n    `\n  },\n  'wordpress': {\n    tag: 'Self-Hosting \u00b7 WordPress',\n    title: 'WordPress mit Docker self-hosten',\n    content: `\n      <h4>Stack-\u00dcbersicht<\/h4>\n      <ul>\n        <li><code>nginx<\/code> \u2013 Reverse Proxy, SSL-Terminierung<\/li>\n        <li><code>wordpress:php-fpm<\/code> \u2013 PHP-FPM Backend<\/li>\n        <li><code>mariadb<\/code> \u2013 Datenbank<\/li>\n      <\/ul>\n      <h4>SSL mit certbot<\/h4>\n      <pre>sudo apt install certbot\nsudo certbot certonly --webroot -w \/var\/www\/html -d domain.de<\/pre>\n      <h4>Auto-Renewal<\/h4>\n      <pre>sudo certbot renew --dry-run<\/pre>\n      <p>certbot legt automatisch einen systemd-Timer an der die Zertifikate erneuert.<\/p>\n      <h4>nginx als Reverse Proxy<\/h4>\n      <pre>location ~ \\.php$ {\n    fastcgi_pass wordpress:9000;\n    include fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n}<\/pre>\n    `\n  },\n  'adguard': {\n    tag: 'DNS \u00b7 AdGuard',\n    title: 'AdGuard Home',\n    content: `\n      <h4>Was ist AdGuard Home?<\/h4>\n      <p>Ein netzwerkweiter DNS-basierter Ad- und Tracker-Blocker. Alternative zu Pi-hole, l\u00e4uft prima in Docker.<\/p>\n      <h4>Docker Compose<\/h4>\n      <pre>services:\n  adguardhome:\n    image: adguard\/adguardhome:latest\n    ports:\n      - \"53:53\/udp\"\n      - \"53:53\/tcp\"\n      - \"3000:80\/tcp\"    # Web-Interface\n    volumes:\n      - .\/adguard\/work:\/opt\/adguardhome\/work\n      - .\/adguard\/conf:\/opt\/adguardhome\/conf\n    restart: unless-stopped<\/pre>\n      <h4>Ersteinrichtung<\/h4>\n      <p>Nach dem Start das Web-Interface unter <code>http:\/\/server-ip:3000<\/code> aufrufen und den Setup-Wizard durchlaufen.<\/p>\n      <h4>Im Router eintragen<\/h4>\n      <p>DNS-Server im Router auf die Server-IP setzen \u2013 dann profitiert das gesamte Netzwerk.<\/p>\n    `\n  },\n  'backup': {\n    tag: 'Backup \u00b7 Homelab',\n    title: 'Server Backup-Strategie',\n    content: `\n      <div class=\"modal-wip\">\u26a0\ufe0f Dieser Artikel ist noch in Arbeit.<\/div>\n      <h4>3-2-1 Regel<\/h4>\n      <ul>\n        <li>3 Kopien der Daten<\/li>\n        <li>2 verschiedene Speichermedien<\/li>\n        <li>1 Kopie Off-Site<\/li>\n      <\/ul>\n      <h4>Was gesichert werden sollte<\/h4>\n      <ul>\n        <li>Datenbank-Dumps (mysqldump)<\/li>\n        <li>Docker Compose Files & .env<\/li>\n        <li>nginx & fail2ban Configs<\/li>\n        <li>SSL-Zertifikate<\/li>\n        <li>Uploads \/ Media-Dateien<\/li>\n      <\/ul>\n      <h4>Datenbank sichern<\/h4>\n      <pre>docker exec db mysqldump -u user -p dbname > backup.sql<\/pre>\n    `\n  }\n};\n\nfunction openModal(id) {\n  const a = articles[id];\n  if (!a) return;\n  document.getElementById('modal-tag').textContent = a.tag;\n  document.getElementById('modal-title').textContent = a.title;\n  document.getElementById('modal-content').innerHTML = a.content;\n  document.getElementById('modal-overlay').classList.add('open');\n  document.body.style.overflow = 'hidden';\n}\n\nfunction closeModal() {\n  document.getElementById('modal-overlay').classList.remove('open');\n  document.body.style.overflow = '';\n}\n\ndocument.getElementById('modal-overlay').addEventListener('click', function(e) {\n  if (e.target === this) closeModal();\n});\n\nfunction filterArticles() {\n  const q = document.getElementById('search').value.toLowerCase();\n  document.querySelectorAll('.article').forEach(a => {\n    a.style.display = a.textContent.toLowerCase().includes(q) ? '' : 'none';\n  });\n  document.querySelectorAll('.category').forEach(cat => {\n    const visible = [...cat.querySelectorAll('.article')].some(a => a.style.display !== 'none');\n    cat.style.display = visible ? '' : 'none';\n  });\n}\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>ByteKami \u2014 IT-Wiki ByteKami \u26a1 Dashboard \u2190 Home \/\/ Pers\u00f6nliche Wissensdatenbank IT-Wiki Guides, Configs und Notizen rund um Linux, Docker, Security und Homelab. \ud83d\udc27 Linux 3 Artikel Arch \/ CachyOS pacman Cheatsheet Die wichtigsten pacman-Befehle f\u00fcr Arch-basierte Systeme auf einen Blick. Fertig2026 SSH SSH Keys &#038; Config SSH-Keys generieren, auf Server kopieren und die SSH-Config [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-26","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bytekami.de\/index.php?rest_route=\/wp\/v2\/pages\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bytekami.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bytekami.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bytekami.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bytekami.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=26"}],"version-history":[{"count":0,"href":"https:\/\/bytekami.de\/index.php?rest_route=\/wp\/v2\/pages\/26\/revisions"}],"wp:attachment":[{"href":"https:\/\/bytekami.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}