Sascha Schulz
2025-03-10 8a7804348b82ca8d2f5a74585b19d330f8b6da84
index.html
@@ -4678,6 +4678,15 @@
                  <p>Beispiele für eine Domain: localhost, www.example.com, 127.0.0.1, [0:0:0:0:0:0:0:1], [::1]</p>
               </section>
               <section>
                  <p>Es kann auch der bei der Installation des Servers angegebene Host-Name verwendet werden, z.B.</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # "vm-ubuntu-server"
                        ssh user@vm-ubuntu-server
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>Pakete aktualisieren</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
@@ -4686,6 +4695,12 @@
                        
                        # Pakete updaten
                        sudo apt upgrade
                     </code>
                  </pre>
                  <p>sonstige Werkzeuge installieren</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        sudo apt install vim git curl build-essential
                     </code>
                  </pre>
               </section>
@@ -4727,14 +4742,229 @@
                  </pre>
               </section>
               <section>
                  <h3>Ordner und Dateien kopieren und verschieben</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Ordner kopieren
                        cp -r quelle ziel
                        # Datei kopieren
                        cp quelle ziel
                        # Ordner und Dateien verschieben
                        mv quelle ziel
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>Eigenen User anlegen</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # User anlegen
                        # -m => Home Ordner anlegen
                        # -G => zur angegeben Gruppe hinzufügen
                        # -s => Pfad zur Shell, in diesem Fall /bin/bash
                        useradd [user] -m -G sudo -s /bin/bash
                        # Passwort setzen
                        passwd [user]
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>Authentifizierung per SSH-Key-Pair</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Schlüsselpaar lokal erzeugen, falls nicht vorhanden
                        ssh-keygen
                        # Inhalt aus Datei kopieren:
                        cat ~/.ssh/id_rsa.pub
                     </code>
                  </pre>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Auf dem Server in folgenden Datei einfügen (Public Key pro Zeile):
                        ~/.ssh/authorized_keys
                     </code>
                  </pre>
                  <p>anschließend wird kein Passwort mehr beim Login benötigt</p>
               </section>
               <section>
                  <h3>Apache einrichten</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        sudo apt install apache2
                     </code>
                  </pre>
                  <p>Einrichtung überprüfen</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Oder im Browser aufrufen:
                        curl http://vm-ubuntu-server
                     </code>
                  </pre>
               </section>
               <section>
                  <p>Aufbau der Apache-Konfiguration</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Hauptdatei, selten gebraucht
                        /etc/apache2/apache2.conf
                        # Verfügbare vhosts
                        /etc/apache2/sites-available/*.conf
                        # Aktivierte vhosts, Symlinks auf obige verfügbare
                        /etc/apache2/sites-enabled/*.conf
                        # Standard HTML Pfad bei Apache
                        /var/www/html
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>vhost (virtual host) einrichten</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        cd /etc/apache/sites-available
                        # 000-default.conf als Vorlage nutzen
                        # vm-ubuntu-server durch eigenen Host ersetzen
                        sudo cp 000-default.conf www.vm-ubuntu-server.conf
                        # 'ServerName' einkommentieren und mit eigenem Host anpassen
                        # Weitere Optionen je nach Fall anpassen, z.B. 'DocumentRoot'
                        sudo vim www.vm-ubuntu-server.conf
                        # vhost / Site aktivieren
                        sudo a2ensite www.vm-ubuntu-server.conf
                     </code>
                  </pre>
               </section>
               <section>
                  <p>Domains lokal auf dem Entwicklungssystem bekannt machen:</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Windows
                        # z.B. mit Notepadd++ editieren. Benötigt Administrator-Rechte
                        C:\Windows\System32\drivers\etc\hosts
                        # Unix
                        # z.B. mit vim editieren. Benötigt Administrator-Rechte
                        /etc/hosts
                     </code>
                  </pre>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # unten hinzufügen
                        [IP des Servers] www.vm-ubuntu-server
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>Dateien zum Server kopieren</h3>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # scp [Quelle] [Ziel]
                        scp . user@domain:/ziel
                        # scp [Quelle] [Ziel], z.B.
                        scp index.html user@domain:~/
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>Aufgabe</h3>
                  <p>Richte die Sub-Domain <code>www.vm-ubuntu-server</code> ein und liefere unter dieser Adresse eine beliebige HTML-Seite aus. Dies kann eine minimale selbstgeschriebene oder eine beliebige komplexere aus den vergangenen Veranstaltungen sein, z.B. aus den CSS-Themen (jedoch keine NodeJS-Projekte).</p>
               </section>
               <section>
                  <h3>NodeJS und PM2 einrichten</h3>
               </section>
               <section>
                  <p>Installation mittels fnm (<code>fast node manager</code>)</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Abhängigkeit 'unzip' installieren
                        sudo apt install unzip
                        # https://github.com/Schniz/fnm
                        curl -fsSL https://fnm.vercel.app/install | bash
                        # Anschließend die .bashrc neuladen
                        . ~/.bashrc
                        # Aktuelle NodeJS LTS installieren
                        fnm install --lts
                        # Test
                        node -v
                     </code>
                  </pre>
               </section>
               <section>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # PM2
                        npm install -g pm2
                     </code>
                  </pre>
               </section>
               <section>
                  <h3>Aufgabe</h3>
                  <p>Richte auf dem Server ein kleines NodeJS-Projekt ein, welches eine beliebige Website zur Verfügung stellt (selber implementieren oder ein bestehendes kopieren). Kopiere das Projekt mit den bekannten Befehlen auf den Server an einen beliebigen Ort. Teste anschließend die Lauffähigkeit im Browser per IP und Port der Anwendung.</p>
               </section>
               <section>
                  <h3>Einrichten eines Reverse-Proxy</h3>
               </section>
               <section>
                  <img data-src="/assets/images/proxy-types.svg">
               </section>
               <section>
                  <p>Aktivieren des benötigten Moduls</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # Apache 2 enable module
                        sudo a2enmod proxy
                     </code>
                  </pre>
                  <p>Neue Direktiven</p>
                  <ul>
                     <li>ProxyPass</li>
                     <li>ProxyPassReverse</li>
                     <li>ProxyRequests</li>
                  </ul>
               </section>
               <section>
                  <p>Notwendige Anpassungen am vhost</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        # DocumentRoot entfernen / auskommentieren
                        #DocumentRoot /var/www/html
                        # Aus Sicherheitsgründen Forward Proxy deaktivieren
                        ProxyRequests Off
                        # ProxyPass [Quelle] [Ziel] (auf Port achten) => Weiterleitung
                        ProxyPass / http://127.0.0.1:9000
                        # ProxyPassReverse [Quelle] [Ziel] (auf Port achten) => URL-Rewrite bei Redirects
                        ProxyPassReverse / http://127.0.0.1:9000
                     </code>
                  </pre>
                  <p>Apache neu starten, um die Änderungen am vhost zu übernehmen</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        sudo systemctl reload apache2
                     </code>
                  </pre>
               </section>
               <section>
                  <p>In das Verzeichnis der NodeJS-Anwendung wechseln und per PM2 starten</p>
                  <pre>
                     <code class="bash" data-trim data-line-numbers>
                        pm2 start --name my-super-app index.js
                     </code>
                  </pre>
                  <p>Anschließend sollte die NodeJS-Anwendung unter der bereits bekannten Domain erreichbar sein.</p>
               </section>
            </section>
         </div>
      </div>