diff --git a/crumbforest-admin-vektor.md b/crumbforest-admin-vektor.md index 7f5c4dd..bb3ffca 100644 --- a/crumbforest-admin-vektor.md +++ b/crumbforest-admin-vektor.md @@ -1,6 +1,6 @@ # 🧭 Crumbforest Admin-Vektor: Der Pfad des WaldhĂŒters -**Subtitle:** *Die 8 Pfade der System-Meisterschaft* +**Subtitle:** *Die 25 Pfade der System-Meisterschaft* **Version:** 1.0 **Audience:** Angehende Systemadministratoren & WaldlĂ€ufer @@ -20,7 +20,7 @@ Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du l --- -## đŸ—ș Die 23 Pfade (Übersicht) +## đŸ—ș Die 26 Pfade (Übersicht) | Pfad | Thema | Kern-Konzepte | Status | |------|-------|---------------|--------| @@ -48,6 +48,8 @@ Jede **Crumbpage** behandelt ein Kernthema und baut auf dem vorherigen auf. Du l | **22** | Hallo Nullfeld | `#philosophie #crew #resonanz #nullfeld` | 🆕 Neu | | **23** | AI, Vektor & Philosophie | `#ai #ki #vektor #emergenz #samurai-shaolin` | 🆕 Neu | | **24** | **Docker - Der Wal** | `#container #compose #images #tupperware` | 🆕 Neu | +| **25** | **Postfix** | `#mta #smtp #mail #virtual-domains` | 🆕 Neu | +| **26** | **Datenbanken** | `#sql #mariadb #mysql #backup` | 🆕 Neu | --- @@ -628,7 +630,54 @@ Container = Eine Tupperdose fĂŒr die Pizza. --- +## 📚 Pfad 25: Postfix - Der digitale Postbote +**Was du lernst:** +- Was ist ein MTA? (Postverteilzentrum) +- Wie installiere ich Postfix? +- Virtuelle Domains & Benutzer +- Telnet/Netcat fĂŒr manuellen Mailversand ("Hands on") + +**Warum das wichtig ist:** +- E-Mail ist das RĂŒckgrat der Kommunikation. +- "Der Server sendet keine Mails" ist ein Klassiker. +- Du verstehst endlich, warum Spam-Filter dich hassen. + +**Die Postverteilzentrum-Theorie:** +``` +MTA = Pförtner, der Briefe annimmt. +Mailbox = Das Fach fĂŒr den Bewohner. +SMTP = Die Sprache der Postboten. +``` + +**→ [Zur Crumbpage: Postfix](crumbpage-25-postfix.md)** + +--- + + + +## 📚 Pfad 26: Datenbanken - Das GedĂ€chtnis des Waldes + +**Was du lernst:** +- MySQL vs. MariaDB vs. PostgreSQL +- Installation & Security (`mysql_secure_installation`) +- SQL Basics (Die Sprache der Daten) +- Backup & Restore + +**Warum das wichtig ist:** +- Jede Web-App braucht eine DB. +- Datenverluste sind tödlich. +- Du lernst, Daten strukturiert zu sehen. + +**Die Zettelkasten-Theorie:** +``` +Textdatei = Langsames Suchen im Haufen. +Datenbank = Blitzschnelles Finden im Index. +``` + +**→ [Zur Crumbpage: Datenbanken](crumbpage-26-databases.md)** + +--- ## 🎯 Wie du den Vektor durchlĂ€ufst @@ -684,6 +733,10 @@ START: Absolute Basics ├─ Pfad 23: AI & Philosophie ──────→ SAMURAI ⟡ SHAOLIN │ └─ Pfad 24: Docker ────────────────→ MODERN ERA +│ +└─ Pfad 25: Postfix ───────────────→ COMMUNICATION +│ +└─ Pfad 26: Datenbanken ───────────→ PERSISTENCE ``` @@ -701,6 +754,8 @@ Pfad 21: ~3-4 Stunden (Backup & Automatisierung) Pfad 22: ~1 Stunde (Reflexion & Philosophie) Pfad 23: ~2-3 Stunden (AI, Vektor & Philosophie - oder ein Leben lang?) Pfad 24: ~2-3 Stunden (Docker Basics) +Pfad 25: ~3-4 Stunden (Postfix & SMTP) +Pfad 26: ~2 Stunden (SQL & MariaDB) Total: ~34-42 Stunden aktives Lernen ``` @@ -766,7 +821,9 @@ wsl --install ├── 22-nullfeld-willkommen.md ├── 22-nullfeld-willkommen.md ├── 23-ai-vektor-philosophie.md -└── 24-docker.md +├── 24-docker.md +├── 25-postfix.md +├── 26-databases.md ``` ### Externe Ressourcen @@ -894,8 +951,12 @@ Die Eule erinnert dich: - [ ] Pfad 21: Backup, RAID & Cron (0%) - [ ] Pfad 22: Hallo Nullfeld (0%) - [ ] Pfad 23: AI, Vektor & Philosophie (0%) +- [ ] Pfad 24: Docker (0%) +- [ ] Pfad 25: Postfix (0%) +- [ ] Pfad 26: Datenbanken (0%) + +**Gesamtfortschritt:** 0/26 Pfade -**Gesamtfortschritt:** 0/23 Pfade **Startdatum:** YYYY-MM-DD **GeschĂ€tzte Completion:** YYYY-MM-DD ``` @@ -957,7 +1018,7 @@ Systemadministration ist ein **Handwerk**, das Zeit und Übung braucht. Die 8 Pf --- -**Version:** 3.0 (23 Pfade: Samurai ⟡ Shaolin + OZM⟡NEXUS Integration) +**Version:** 3.2 (26 Pfade: Samurai ⟡ Shaolin + OZM⟡NEXUS Integration) **Letzte Änderung:** 2025-12-13 **Maintainer:** Crumbforest Core Team **Custodian:** OZM - Open Futures Museum (in transition) diff --git a/crumbpage-24-docker.md b/crumbpage-24-docker.md index fdc0601..e7d82a8 100644 --- a/crumbpage-24-docker.md +++ b/crumbpage-24-docker.md @@ -264,4 +264,4 @@ Nutze sie weise. --- **Navigation:** -[← ZurĂŒck: Philosophie](crumbpage-23-ai-vektor-philosophie.md) | [ZurĂŒck zur Übersicht](crumbforest-admin-vektor.md) +[← ZurĂŒck: Philosophie](crumbpage-23-ai-vektor-philosophie.md) | [Weiter: Postfix →](crumbpage-25-postfix.md) diff --git a/crumbpage-25-postfix.md b/crumbpage-25-postfix.md new file mode 100644 index 0000000..8e3838e --- /dev/null +++ b/crumbpage-25-postfix.md @@ -0,0 +1,244 @@ +# 🧭 Crumbpage 25: Postfix - Der digitale Postbote + +**Subtitle:** *Warum E-Mails auch nur Postkarten sind* +**Pfad:** 25 von X (Kommunikation) +**Schwierigkeit:** ⭐⭐⭐⭐ (4/5) +**Zeit:** ~3-4 Stunden +**Voraussetzungen:** [Pfad 10: Services](crumbpage-10-services-ports.md), [Pfad 15: DNS](crumbpage-15-dns.md) + +> *"Email is wonderful. It allows you to communicate with people you don't want to talk to."* 🩉 + +--- + +## 📋 Was du in diesem Pfad lernst + +``` +✓ Was ist ein MTA? (Postverteilzentrum-Theorie) +✓ Installation von Postfix +✓ Die wichtigste Datei: main.cf +✓ Virtuelle Domains (BriefkĂ€sten ohne Hausbewohner) +✓ Debugging mit Telnet/Netcat (Manuelles Post-Einwerfen) +✓ Troubleshooting & Warteschlangen +``` + +--- + +## 🎯 Lernziele + +Nach diesem Pfad kannst du: + +- [ ] Einen Mailserver grundlegend konfigurieren +- [ ] Verstehen, wie eine E-Mail von A nach B kommt +- [ ] Virtuelle Domains und Benutzer einrichten +- [ ] SMTP manuell sprechen (ja, wirklich!) + +--- + +## 📼 Die Postverteilzentrum-Theorie (Konzepte) + +Stell dir vor, dein Server ist ein großes Mietshaus. + +**Ohne Postfix:** +Niemand nimmt Post an. Briefe werden zurĂŒck an den Absender geschickt ("Return to Sender"). + +**Mit Postfix (Der MTA):** +Du stellst einen Pförtner (MTA - Mail Transfer Agent) ein. +- Er nimmt Briefe an (**SMTP**). +- Er schaut auf die Adresse. +- Wohnt der EmpfĂ€nger hier? -> Ab ins Fach (**Local Delivery**). +- Wohnt der EmpfĂ€nger woanders? -> Weiterleiten (**Relaying**). + +**Der Unterschied zwischen System-User und Virtuellem User:** +- **System-User:** Hat eine Wohnung im Haus (Linux Account, `/etc/passwd`). Er hat einen SchlĂŒssel zur HaustĂŒr (SSH). +- **Virtueller User:** Hat nur ein Postfach im Flur. Er darf nicht im Haus wohnen (kein SSH), aber er bekommt Post. Das ist, was wir meistens wollen (z.B. fĂŒr `info@example.com`). + +--- + +## đŸ—ïž Installation & Erster Start + +Wie immer bei Debian/Ubuntu, ist der erste Schritt einfach: + +```bash +sudo apt update +sudo apt install postfix +``` + +WĂ€hrend der Installation wirst du gefragt, welche Art von Konfiguration du willst. +WĂ€hle: **"Internet Site"**. +System Mail Name: Dein Hostname (z.B. `mail.deinedomain.de`). + +PrĂŒfen, ob der Pförtner wach ist: +```bash +systemctl status postfix +``` + +--- + +## ⚙ Die Schaltzentrale: main.cf + +Die Datei `/etc/postfix/main.cf` ist das Gehirn deines Postboten. Hier stehen die Regeln. + +```bash +nano /etc/postfix/main.cf +``` + +### Wichtige Parameter + +| Parameter | Bedeutung | +|-----------|-----------| +| `myhostname` | Wie heißt der Server selbst? (z.B. `srv01.example.com`) | +| `mydomain` | Die Haupt-Domain (z.B. `example.com`) | +| `mydestination` | FĂŒr welche Domains fĂŒhlen wir uns *lokal* zustĂ€ndig? (Hier landen Mails fĂŒr System-User) | +| `inet_interfaces` | Wo lauschen wir? (`all` = ĂŒberall) | +| `mynetworks` | Wer darf ĂŒber uns senden, ohne sich auszuweisen? (Eigene IPs, Localhost) | + +**Beispiel-Snippet:** +```conf +myhostname = mail.kruemel-forest.de +mydomain = kruemel-forest.de +inet_interfaces = all +mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 +``` + +--- + +## đŸ‘» Virtuelle DomĂ€nen & Benutzer + +Jetzt wird es spannend. Wir wollen Mailadressen, ohne Linux-User anzulegen. Wir bauen "Schein-BriefkĂ€sten". + +### 1. Die Struktur +Wir legen Maps (Tabellen) an unter `/etc/postfix/virtual/`: + +- `virtual_mailbox_domains`: Welche Domains gehören uns? +- `virtual_mailbox_maps`: Welcher User hat welchen Ordner? +- `virtual_alias_maps`: Weiterleitungen (z.B. `info` -> `admin`). + +### 2. Die Dateien anlegen + +```bash +mkdir -p /etc/postfix/virtual +cd /etc/postfix/virtual +``` + +**virtual_mailbox_domains:** +```text +example.com +kruemel-forest.de +``` + +**virtual_mailbox_maps:** +```text +# User # Pfad zum Maildir (endet mit /) +alice@example.com example.com/alice/Maildir/ +bob@kruemel-forest.de kruemel-forest.de/bob/Maildir/ +``` + +**virtual_alias_maps:** +```text +info@example.com alice@example.com +postmaster@example.com alice@example.com +``` + +### 3. Hashen & Konfigurieren + +Postfix liest keine Textdateien, er will Datenbanken (`.db`). +```bash +postmap /etc/postfix/virtual/virtual_mailbox_domains +postmap /etc/postfix/virtual/virtual_mailbox_maps +postmap /etc/postfix/virtual/virtual_alias_maps +``` + +Und in der `main.cf` bekannt machen: +```conf +virtual_mailbox_domains = hash:/etc/postfix/virtual/virtual_mailbox_domains +virtual_mailbox_maps = hash:/etc/postfix/virtual/virtual_mailbox_maps +virtual_alias_maps = hash:/etc/postfix/virtual/virtual_alias_maps +``` + +Nach jeder Änderung: `systemctl reload postfix`. + +--- + +## đŸ•”ïž Hands-On: Postbote spielen (Telnet/Netcat) + +Wirf die GUI weg. Wir stellen jetzt eine Mail von Hand zu, um zu sehen, ob der Server reagiert. + +**Werkzeug:** `telnet` oder `nc` (Netcat). + +**Szenario:** Du bist ein fremder Server und willst eine Mail an `alice@example.com` abgeben. + +```bash +# 1. Verbindung aufbauen (Port 25) +nc -v localhost 25 + +# Server sagt: 220 mail.kruemel-forest.de ESMTP Postfix... + +# 2. BegrĂŒĂŸen (Höflichkeit ist wichtig) +EHLO mein-test-pc.local + +# Server antwortet mit Features... + +# 3. Absender angeben +MAIL FROM: + +# 4. EmpfĂ€nger angeben (Hier prĂŒft Postfix, ob er zustĂ€ndig ist!) +RCPT TO: + +# Server: 250 2.1.5 Ok + +# 5. Inhalt senden +DATA +Subject: Manuelle Testmail + +Hallo Alice, +dies ist eine handgetippte E-Mail. +GrĂŒĂŸe aus dem Terminal! +. +# (Der Punkt am Ende einer Zeile beendet die Mail) + +# 6. TschĂŒss +QUIT +``` + +Wenn du ein `250 2.0.0 Ok: queued as ...` bekommst, hast du gewonnen! Die Mail ist im System. + +--- + +## 🔍 Troubleshooting + +Wenn nichts ankommt, schau in die Logs. Postfix ist geschwĂ€tzig. + +**1. Logfile lesen (Live):** +```bash +tail -f /var/log/mail.log +# oder +journalctl -u postfix -f +``` + +**2. Die Warteschlange (Queue):** +Ist die Tasche des Postboten voll? +```bash +mailq +``` +- `Deferred`: Versuchen wir spĂ€ter nochmal (EmpfĂ€nger nicht da?). +- `Bounced`: ZurĂŒck an Absender (Adresse falsch?). +- `Active`: Wird gerade verarbeitet. + +**3. Queue leeren (Flush):** +"Versuch es JETZT sofort nochmal!" +```bash +postqueue -f +``` + +--- + +## 💭 Reflexion + +E-Mail fĂŒhlt sich alt an. Ist es auch. Das Protokoll (SMTP) stammt aus den 80ern. Aber genau deshalb ist es so robust. Es ist dezentral, föderiert und textbasiert. + +Mit Postfix hast du einen der mĂ€chtigsten Server-Dienste ĂŒberhaupt gebĂ€ndigt. Du bist nicht mehr auf GMail oder Web.de angewiesen. Du bist jetzt dein eigener Provider. (Zumindest fĂŒr den Empfang – Senden ist wegen Spam-Filtern eine andere Geschichte, Stichwort DKIM/SPF, aber das ist ein Thema fĂŒr einen anderen Keks). + +--- + +**Navigation:** +[← ZurĂŒck: Docker](crumbpage-24-docker.md) | [Weiter: Datenbanken →](crumbpage-26-databases.md) diff --git a/crumbpage-26-databases.md b/crumbpage-26-databases.md new file mode 100644 index 0000000..0df0224 --- /dev/null +++ b/crumbpage-26-databases.md @@ -0,0 +1,201 @@ +# 🧭 Crumbpage 26: Datenbanken - Das GedĂ€chtnis des Waldes + +**Subtitle:** *Warum Excel keine Datenbank ist* +**Pfad:** 26 von X (Datenhaltung) +**Schwierigkeit:** ⭐⭐⭐ (3/5) +**Zeit:** ~2 Stunden +**Voraussetzungen:** [Pfad 10: Services](crumbpage-10-services-ports.md) + +> *"Daten sind das neue Öl. Aber ohne Motor (Datenbank) sind sie nur klebriger Schlamm."* đŸ›ąïž + +--- + +## 📋 Was du in diesem Pfad lernst + +``` +✓ Was ist eine relationale Datenbank? (Tabellen-Theorie) +✓ Der große Krieg: MySQL vs. MariaDB vs. PostgreSQL +✓ Installation von MariaDB (Der offene Standard) +✓ SQL Basics: CREATE, INSERT, SELECT +✓ Sicherheit: mysql_secure_installation +✓ Backup: mysqldump +``` + +--- + +## 🎯 Lernziele + +Nach diesem Pfad kannst du: + +- [ ] Einen Datenbank-Server installieren und absichern +- [ ] Verstehen, warum wir MariaDB statt MySQL nutzen +- [ ] Eine Datenbank fĂŒr eine Web-App anlegen +- [ ] Einfache SQL-Abfragen schreiben + +--- + +## đŸ—„ïž Die Zettelkasten-Theorie (Konzepte) + +Stell dir vor, du hast 1000 Keks-Rezepte. + +**Ohne Datenbank (Textdateien):** +Du schreibst alles in eine riesige `rezepte.txt`. Wenn du "Schoko" suchst, musst du die ganze Datei lesen. Langsam. + +**Mit Datenbank (SQL):** +Du hast einen riesigen Aktenschrank mit Schubladen (Tabellen). +- Jedes Rezept ist eine Karteikarte (Row). +- Jede Karte hat feste Felder: Name, Zutaten, Backzeit (Columns). +- Der Bibliothekar (SQL-Server) findet "Alle Kekse mit Schoko unter 20 Min Backzeit" in Millisekunden. + +### Die drei großen HĂ€user + +Laut deinem Dossier gibt es drei Hauptakteure: + +1. **MySQL 🐬:** Der alte König. Stabil, Industriestandard, gehört aber Oracle. Das macht manche nervös. +2. **MariaDB 🩭:** Die Rebellion. Erstellt von den ursprĂŒnglichen MySQL-Erfindern. Komplett Open Source, schneller, wilder. **Unsere Wahl fĂŒr den Standard-Stack.** +3. **PostgreSQL 🐘:** Der Professor. Akademisch, extrem strikt (ACID), kann alles (sogar Geodaten und JSON perfekt). Wenn DatenintegritĂ€t wichtiger ist als roher Speed. + +--- + +## đŸ—ïž Installation & Absicherung + +Wir installieren **MariaDB**, weil es im Herzen von Debian/Ubuntu wohnt und "echtes" Open Source ist. + +```bash +sudo apt update +sudo apt install mariadb-server +``` + +**Der TĂŒrsteher-Check:** +LĂ€uft der Dienst? +```bash +systemctl status mariadb +``` + +**Sicherheit zuerst!** +Installierte Datenbanken sind offen wie ein Scheunentor. Wir schließen es ab. +```bash +sudo mysql_secure_installation +``` +- Root Passwort setzen? -> Ja. +- Anonyme User entfernen? -> Ja. +- Remote Root Login verbieten? -> Ja. +- Test-DB löschen? -> Ja. +- Tables reloaden? -> Ja. + +--- + +## 🔑 Der Erste Eintritt (`mysql` Shell) + +Logge dich als Root in die Datenbank ein: + +```bash +sudo mysql -u root -p +``` +*(Das `-u` steht fĂŒr User, das `-p` fragt nach dem Passwort)* + +Du bist jetzt in der MariaDB-Shell (`MariaDB [(none)]>`). Hier sprichst du **SQL**. + +--- + +## 🎓 Hands-On: Das Keks-Inventar + +Wir bauen eine Datenbank fĂŒr unsere Keks-VorrĂ€te. + +**1. Datenbank erstellen** +```sql +CREATE DATABASE keks_lager; +USE keks_lager; +``` +*(Achte auf das Semikolon `;` am Ende jedes Befehls! Das ist wie der Punkt im Satz.)* + +**2. Tabelle anlegen (Der Bauplan)** +Wir brauchen eine Tabelle fĂŒr Kekse. +```sql +CREATE TABLE kekse ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(50), + typ VARCHAR(30), + anzahl INT, + bewertung INT +); +``` + +**3. Kekse einlagern (INSERT)** +```sql +INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Schoko-Kruste', 'Schokolade', 42, 5); +INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Hafer-GlĂŒck', 'Gesund', 10, 3); +INSERT INTO kekse (name, typ, anzahl, bewertung) VALUES ('Zimt-Stern', 'Weihnachten', 100, 4); +``` + +**4. Kekse suchen (SELECT)** +```sql +-- Zeig mir alles! +SELECT * FROM kekse; + +-- Zeig mir nur die guten Sachen +SELECT name, anzahl FROM kekse WHERE bewertung >= 4; +``` + +**5. Kekse essen (UPDATE)** +Jemand hat 2 Schoko-Krusten gegessen. +```sql +UPDATE kekse SET anzahl = anzahl - 2 WHERE name = 'Schoko-Kruste'; +``` + +**6. User fĂŒr Apps anlegen** +Sicherheitsregel: **Niemals** den `root` User in einer Web-App (z.B. WordPress/CrumbForest) benutzen! + +```sql +CREATE USER 'baekker'@'localhost' IDENTIFIED BY 'geheimes_passwort'; +GRANT ALL PRIVILEGES ON keks_lager.* TO 'baekker'@'localhost'; +FLUSH PRIVILEGES; +``` + +**7. Raus hier** +```sql +EXIT; +``` + +--- + +## 📩 Backup & Restore (Die Versicherung) + +Datenbanken liegen nicht einfach als Datei herum (technisch schon, in `/var/lib/mysql`, aber fass die niemals an!). +Wir nutzen Tools zum Exportieren. + +**Backup (Der Dump):** +```bash +mysqldump -u root -p keks_lager > mein_backup.sql +``` +Dies erzeugt eine Textdatei mit allen SQL-Befehlen, um die Datenbank wiederherzustellen. + +**Restore (Das Einspielen):** +```bash +mysql -u root -p keks_lager < mein_backup.sql +``` + +--- + +## 🚀 Advanced: Cluster & Replikation (Ausblick) + +In deinem Dossier (`db_overview.md`) standen spannende Dinge ĂŒber **Galera Cluster**. +Das ist fĂŒr Profis: Wenn ein Server ausfĂ€llt, ĂŒbernimmt der andere sofort. +Bei MySQL/MariaDB Standard-Replikation gibt es einen "Master" (Schreibt) und "Slaves" (Lesen). +Galera ist "Multi-Master" (Alle schreiben). + +FĂŒr den Anfang reicht uns ein einzelner Server. Aber wisse: Der Wald kann wachsen. đŸŒ± + +--- + +## 💭 Reflexion + +Eine Datenbank ist das Herz fast jeder modernen Anwendung. Ob WordPress, Nextcloud oder deine eigene App – irgendwo lĂ€uft immer ein `SELECT * FROM`. +Du hast jetzt gelernt, wie man dieses Herz zum Schlagen bringt und Daten sicher speichert. + +Vergiss nie: **Kein Backup, kein Mitleid.** Ein `DROP DATABASE` fragt nicht "Bist du sicher?". Es löscht einfach. + +--- + +**Navigation:** +[← ZurĂŒck: Postfix](crumbpage-25-postfix.md) | [ZurĂŒck zur Übersicht](crumbforest-admin-vektor.md)