From deb50954f0776638e269211a512d361951ad48d2 Mon Sep 17 00:00:00 2001
From: Sascha Schulz <sschulz@dh-software.de>
Date: Mo, 25 Aug 2025 15:39:10 +0200
Subject: [PATCH] add chapter to mysql setup
---
index.html | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 272 insertions(+), 2 deletions(-)
diff --git a/index.html b/index.html
index 9152e52..93dc23f 100644
--- a/index.html
+++ b/index.html
@@ -4943,10 +4943,10 @@
ProxyRequests Off
# ProxyPass [Quelle] [Ziel] (auf Port achten) => Weiterleitung
- ProxyPass / http://127.0.0.1:9000
+ ProxyPass / http://127.0.0.1:9000/
# ProxyPassReverse [Quelle] [Ziel] (auf Port achten) => URL-Rewrite bei Redirects
- ProxyPassReverse / http://127.0.0.1:9000
+ ProxyPassReverse / http://127.0.0.1:9000/
</code>
</pre>
<p>Apache neu starten, um die Änderungen am vhost zu übernehmen</p>
@@ -4965,6 +4965,276 @@
</pre>
<p>Anschließend sollte die NodeJS-Anwendung unter der bereits bekannten Domain erreichbar sein.</p>
</section>
+ <section>
+ <h3>Wireshark</h3>
+ </section>
+ <section>
+ <p>Aufgabe</p>
+ <p>Installiere Wireshark und starte anschließend einen Paket-Mitschnitt auf dem WLAN-Adapter. Setze den Filter oben auf "<code>ip.dst == 123.123.123.123</code>" (IP eurer virtuellen Maschine eintragen),
+ besuche die in der VM eingerichtete Webseite in einem Browser und beobachte den Datenverkehr in Wireshark</p>
+ </section>
+ <section>
+ <h3>Aktivierung von HTTPS</h3>
+ </section>
+ <section>
+ <p>SSL-Zertifikat erstellen</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out cert.pem -keyout key.pem
+ </code>
+ </pre>
+ <p>Anschließend die Fragen beantworten.</p>
+ <p>Die eigentliche Domain für das Zertifikat ist bei "CN" (Common Name) einzutragen</p>
+ </section>
+ <section>
+ <p>Aktivierung des entsprechenden Apache-Moduls:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ sudo a2enmod ssl
+ </code>
+ </pre>
+ <p>Leserechte für den Rest der Welt an den Zertifikatsdateien setzen</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ chmod +r cert.pem key.pem
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Anpassung / Erstellung vhost in <code>sites-available</code></p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ sudo cp example.conf example-ssl.conf
+ </code>
+ </pre>
+ <p>Den vhost für HTTP / Port 80 so konfigurieren, dass dieser nach HTTPS / Port 443 weiterleitet:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # example.conf
+ # Sämtliche Proxy-Direktiven und andere Inhalt
+ # dienende Direktiven auskommentieren:
+ #ProxyPass ...
+ #ProxyPassReverse ...
+
+ # hinzufügen (auf Ziel-Domäne achten)
+ Redirect Permanent / https://example.com
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Den vhost für HTTPS / Port 443 anpassen</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # example-ssl.conf
+ # Port anpassen
+ <VirtualHost *:443>
+
+ # hinzufügen (auf korrekte Pfade achten)
+ SSLEngine on
+ SSLCertificateFile "/.../cert.pem"
+ SSLCertificateKeyFile "/.../key.pem"
+ </code>
+ </pre>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # neuen vhost für SSL aktivieren:
+ sudo a2ensite example-ssl.conf
+ </code>
+ </pre>
+ <p>Anschließend den Apache neu starten:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ sudo systemctl restart apache2
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Aufgabe</p>
+ <p>Inspiziere erneut den Datenverkehr zwischen eurem Browser und dem Server mittels Wireshark. Was fällt auf?</p>
+ </section>
+ <section>
+ <p>Datenverkehr eines Browser in Wireshark sichtbar machen:</p>
+ <p>CMD öffnen:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ REM Umgebungsvariable setzen:
+ set SSLKEYLOGFILE=%USERPROFILE%\Desktop\sslkey.log
+ REM Beliebigen Browser per Konsole starten (Ordner nach Bedarf vorher wechseln):
+ chromium.exe
+ REM oder
+ firefox.exe
+ </code>
+ </pre>
+ <p>Die TLS-Schlüssel werden nun vom Browser in der festgeleten Datei geloggt</p>
+ </section>
+ <section>
+ <p>Eben angegebene Datei in Wireshark einstellen:</p>
+ <p>Bearbeiten > Einstellungen > Protocols > TLS > (Pre)-Master-Secret log filename</p>
+ </section>
+ <section>
+ Einrichtung eines Datenbank-Servers (Beispiel MySql)
+ </section>
+ <section>
+ <p>Datenbank installieren:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # Paketquellen aktualisieren
+ sudo apt update
+
+ # MySql installieren
+ sudo apt install mysql-server
+
+ # systemd neuladen
+ sudo systemctl daemon-reload
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Der Server sollte nun laufen:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ sudo systemctl status mysql.service
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Root-Passwort setzen/ändern:</p>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # Login mit generischen Credentials
+ sudo mysql --defaults-file=/etc/mysql/debian.cnf
+ </code>
+ </pre>
+ <pre>
+ <code class="sql" data-trim data-line-numbers>
+ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
+ exit;
+ </code>
+ </pre>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # Server neustarten
+ sudo systemctl restart mysql.service
+ </code>
+ </pre>
+ <pre>
+ <code class="bash" data-trim data-line-numbers>
+ # Login mit neuen Credentials
+ mysql -uroot -p
+ </code>
+ </pre>
+ </section>
+ <section>
+ <pre>
+ <code class="sql" data-trim data-line-numbers>
+ CREATE DATABASE erp;
+
+ use erp;
+ </code>
+ </pre>
+ </section>
+ <section>
+ <pre>
+ <code class="sql" data-trim data-line-numbers>
+ create table stores
+ (
+ id int not null auto_increment primary key,
+ number varchar(5) not null
+ );
+ </code>
+ </pre>
+ </section>
+ <section>
+ <pre>
+ <code class="sql" data-trim data-line-numbers>
+ create table revenues
+ (
+ id int not null auto_increment primary key,
+ store int not null,
+ revenue int not null,
+ foreign key (store) references stores (id)
+ );
+ </code>
+ </pre>
+ </section>
+ <section>
+ <pre>
+ <code class="sql" data-trim data-line-numbers>
+insert into revenues (store, revenue)
+values (1, 10000),
+ (1, 20000),
+ (1, 15000),
+ (2, 13000);
+ </code>
+ </pre>
+ </section>
+ <section>
+ <pre>
+ <code class="sql" data-trim data-line-numbers>
+select stores.number, sum(revenues.revenue) as revenue
+from stores
+ inner join revenues on revenues.store = stores.id
+group by stores.id;
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Zugriff in NodeJS</p>
+ <pre>
+ <code class="js" data-trim data-line-numbers>
+const mysql = require("mysql");
+
+var connection = mysql.createConnection({
+ host: 'localhost', user: 'root', password: 'root', database: 'erp'
+});
+
+connection.connect();
+
+connection.query('select * from stores;', function (error, results, fields) {
+ if (error) throw error;
+
+ console.log(results);
+});
+
+connection.end();
+ </code>
+ </pre>
+ </section>
+ <section>
+ <p>Aufgabe</p>
+ <p>Implementiere das <code>GROUP BY</code>-Statement aus dem SQL-Beispiel im NodeJS-Beispiel und gebe pro Zeile die Filiale mit dem Umsatz aus</p>
+ </section>
+ <section>
+ <p>Lösung</p>
+ <pre>
+ <code class="js" data-trim data-line-numbers>
+const mysql = require("mysql");
+
+var connection = mysql.createConnection({
+ host: 'localhost', user: 'root', password : 'root', database : 'erp'
+});
+
+connection.connect();
+
+const query = `
+ select stores.number, sum(revenues.revenue) as revenue
+ from stores
+ inner join revenues on revenues.store = stores.id
+ group by stores.id;
+`;
+
+connection.query(query, function (error, results, fields) {
+ if (error) throw error;
+
+ for (const result of results) {
+ console.log(result.number + ": " + result.revenue);
+ }
+});
+
+connection.end();
+ </code>
+ </pre>
+ </section>
</section>
</div>
</div>
--
Gitblit v1.9.3