# Verständnis-Frage zu Apache24



## Zvoni (10. April 2020)

Hallo Leute,
Szenario:
FritzBox7490 als Router in die böse Internet-Welt.

Wir haben DynDNS bei einem Anbieter, welcher alle externen Anfragen für "server01.ddnss.de" an unseren "server01" weiterleitet (entsprechende Ports z.B. FTP usw. sind auf der Fritzbox eingerichtet). Funktioniert auch alles (FTP, SSH).

In Vorbereitung auf eine Umstellung, welcher unser Software-Provider angekündigt hat (Umstellung von IIS auf Apache), gehe ich gerade diverse Manuals, Foren u.ä. durch.

Mein Plan ist, auf unserem Server01 den Apache zu installieren (Läuft auf FreeBSD). Dazu werde ich das MONO-Paket sowie mod_mono auch installieren müssen.
Die Webanwendung ist ASP.NET (mit MONO-Core lauffähig)
Die grundlegende Config des Apachen ist mir klar (Handler etc.).
Diese "Webseite" sind sogenannte "Online-Tools" unseres Software-Herstellers, und sollen auch nur im LAN erreichbar sein (http auf 80 reicht also).

Da ich ja momentan auch in Vorbereitung bin, Nextcloud bei uns zu installieren, laufe ich jetzt in folgende Situation:
Für NC brauche ich ja auch Apache, PHP und MySQL (Config soweit klar mit Handler etc.), Aber: Wie bringe ich jetzt unserem Netzwerk bei, welche Seite wann aufgerufen werden soll?
Ich hab in den Manuals zu Apache das Thema "VirtualHosts" gefunden, welches mein Szenario ja genau beschreibt.
Soweit so gut!

Aber: Wie läuft das mit der Namens-Auflösung? Die FritzBox ist ja unser DNS, und dort kann ich nur einen Rechnernamen per IP eintragen (Server hat nur eine NIC/IP).
Ursprünglicher Plan sind Subdomains (tools.server01.local und cloud.server01.local)

Eine Idee wäre, verschiedene Ports zu nutzen. Machbar? Port 80 --> OnlineTools, Port 90 --> Nextcloud.
Zusätzlich kommt hinzu, dass die "Nextcloud" dann auch von "aussen" erreichbar sein soll (Portforwarding vorausgesetzt).

Ideen?

EDIT: Alle Rechner haben keine FQDN's in ihren jeweiligen HostName-Directive's!


----------



## Technipion (11. April 2020)

Hallo Zvoni,
wie du schon herausgefunden hast, sind Virtuelle Hosts hier das Mittel der Wahl:

https://httpd.apache.org/docs/2.4/vhosts/examples.html
Allerdings habe ich den Eindruck, dass du das alles ziemlich "hart" konfiguriert hast. Ich denke jetzt könnte es sich für dich lohnen, dir doch einmal Docker anzuschauen.

https://docs.docker.com/engine/install/fedora/
Die Docker CE (Community Edition) ist OpenSource. Als nächstes könntest du mit Docker einen Apache Webserver starten:

https://hub.docker.com/_/httpd
Kurz zum Prinzip:
Docker downloaded ein vorgefertigtes Image, das einen fertig verpackten Apache-Webserver in einer virtuellen Umgebung enthält. Von diesem Image wird eine Instanz angelegt und auf deinem Host-System ausgeführt (allerdings in einer Sandbox-Umgebung). Diese laufende Instanz ist der Container. Beim Anlegen des Containers übergibst du außerdem einige Einstellungsparameter. So bietet es sich z.B. an, einen Ordner auf deiner Host-Maschine in ein Verzeichnis innerhalb des Containers einzuhängen - z.B. nach /var/www. Alle Nutzdaten verbleiben also auf deinem Host wo sie sicher sind, auch weil Container z.B. bei Udates überschrieben werden können.
Beim Anlegen der Container kannst du außerdem Port-Mappings definieren. So könntest du z.B. Port 8080 auf dem Host an Port 80 im Container weiterleiten, dann würde alles von außen unter :8080 erreichbar sein.

Zum Verwalten der Container bietet sich außerdem ein kleines Webinterface an. Hier würde ich zu Portainer raten:

https://www.portainer.io/installation/
Und natürlich möchtest du auch gerne eine NextCloud-Instanz hosten, also startest du davon auch noch einen Container:

https://hub.docker.com/_/nextcloud/
Auch hier dient der Container wieder ausschließlich der Verwaltung deiner Laufzeitumgebung, alle Nutzdaten werden wieder nur in den Container eingehängt und somit auf dem Host belassen.

Schließlich musst du das ganze dann zusammenkleben. Dazu bietet sich ein Reverse Proxy an. Ich verwende dafür am liebsten diesen hier:

https://hub.docker.com/r/jwilder/nginx-proxy/
Der Reverse-Proxy ist letztlich das, womit sich Clients von außen verbinden. Er leitet dann Anfragen (z.B. zugehörig zur Subdomain) an die jeweiligen Container weiter.
Wichtig: Falls sehr große Up-/Downloads erfolgen musst du kurz in den Container (einfach eine Bash starten) und das _file size limit_ erhöhen. Das ist per default nur auf einige MB begrenzt.

Du kannst die Container so einrichten, dass sie sich nach einem Neustart selbst wieder starten (empfohlen).

Und natürlich war es das noch nicht, da geht noch viel viel mehr. Aber für den Anfang sollte das ja mal reichen. Und natürlich kannst du auch erst mal an einem Zweitrechner "üben" bevor du gleich an den Hauptserver gehst. Hauptsache alle Nutzdaten liegen außerhalb der Container, wo sie sicher sind.

Ahja: Natürlich kannst du auch für alle gängigen Datenbanken Container hosten, falls die Situation es erfordert. Und falls ihr noch exotische Programme nutzt: Selbst Images für Container zu erstellen ist tatsächlich gar nicht so schwer.

Ich hoffe ich habe dich jetzt nicht erschlagen 

Gruß Technipion


----------



## Zvoni (12. April 2020)

Hallo Technipion.

nein, du hast mich nicht (so ganz *g*) erschlagen.

Danke erstmal für die ausführliche Antwort.
Nur das mit Docker ist eben keine Lösung für mich, weil das OS FreeBSD ist, und da ist Docker *glaub* noch nicht mal Beta-Phase.
Ergo: Bin (mehr oder weniger) gezwungen das ganze direkt auf bare-metal zu knallen.
Eine Alternative zu Docker wären "Jails" aber da grätscht mir unsere Fritzbox dazwischen (Nur ein DNS-Eintrag pro IP bzw. MAC-Adresse).

Nachdem ich jedoch eine Nacht darüber geschlafen habe, bin ich zu folgender "Lösung" gekommen:
Wir haben ja zwei identische Server auf FreeBSD laufen (siehe andere Threads), die nur einen Unterschied haben: Den MySQL-Server.
Auf S01 ist der MySQL read/write, weil er in einer Master-Master-Replikation mit dem MySQL-Server auf dem Boss-Laptop ist.
Der MySQL-Server auf S02 ist ein reiner Slave von S01 (Backup).
Die ASP.NET Anwendung brauch aber Schreibzugriff auf den MySQL-Server.
"Lösung": Auf beide Server den Apache drauf, auf S01 die ASP.NET-Anwendung, auf S02 kommt Nextcloud mit PHP und eigener DB auf dem MySQL auf S02.
Auf S02 wäre also das Backup von S01 UND die DB für Nextcloud.

Unabhängig von meiner "Lösung" wäre ich dennoch interessiert, wie sowas auf einem einzigen Server zu implementieren wäre.


----------

