Aufbau einer Serverumgebung

vished

Member
Hallo,
ich möchte eine JAVA Applikation im Internet zugänglich machen und brauche hierzu einen Server.
Ich bin eher der Programmierer und kenne mich mit dem Aufsetzen von Server etc. nicht gut aus, möchte hier aber entsprechend KnowHow mir aufbauen.

Hier ein paar Fakten:
- Applikationsserver: Wildfly
- Datenbank: MySQL
- Keycloak als Authentifizierungsprovider

Wie gehe ich hier vor?
Linux wird wohl am Besten sein als OS.

Ebenfalls möchte ich Emails versenden. Gerade dadurch, dass ich auch Benachrichtungsemails versenden möchte, reicht ein Limit von bpsw. 200 Email / Stunde nicht aus. Brauche ich hier einen extra Mailserver? Wie wäre es hier mit Mailcow?
Ein Webserver NGINX brauche ich vermutlich auch?

Hier ein paar Fragen:
  • Baue ich das mittlerweile am Besten alles in Docker Container?
    • App mit WildFly in einem Container
    • MySQL Datenbank in einem Container
    • Keycloak in einem Container
    • Mailcow in einem Container
    • NGINX in einem Container
  • Greife ich immer nur per SSH auf den Server oder geht das auch bei Remote Desktop und habe dann eine GUI ?
  • Wie kann ich für Analyszwecke auf die Datenbank greifen? Aktuell kann ich das lokal einfach über die MySQL Workbench machen, aber die Datenbank sollte ja bestenfalls nicht von außen zugreifbar sein
Freue mich über ein paar Hilfen
 
Die Vorgehensweise finde ich grundsätzlich schon mal gut. Inhaltlich scheint es mir aber eher so, dass Du noch nicht ausreichend Erfahrung / Kompetenzen zu haben scheinst, dass Du so ein Setup mit Docker umgesetzt bekommst. Ich befürchte, dass Du dann irgendwann entnervt aufgibst, weil das vielleicht zu anspruchsvoll ist für den Anfang. Ich kann mich irren. Gute Config-Vorlagen kannst Du Dir mit ChatGPT basteln. Damit finde ich die Annäherung an so neue Themen deutlich leichter.

Brauche ich hier einen extra Mailserver? Wie wäre es hier mit Mailcow?

Mailcow finde ich für den Zweck deutlich überdimensioniert. Du brauchst nur einen Postfix. Bei dem Betrieb eines Mailservers gibt es allerdings so einiges zu beachten. Ich habe da allerdings kein passendes Tutorial zur Hand. Ich könnte mir vorstellen, dass Du mit ca. 5000 Mails pro Tag bei manchen Anbietern schon an die Grenzen kommst. Wie die genau sind, habe ich allerdings auch nicht im Kopf.

Eine einfache Variante wäre den Dragonfly Mail Agent (DMA) mit Masquerading mit einem Freemailer-Account zu verwenden. So für die ersten Schritte. Hier ist ein Tutorial, wo der DMA nebenbei erklärt wird: https://debianforum.de/forum/viewtopic.php?t=185803

Greife ich immer nur per SSH auf den Server oder geht das auch bei Remote Desktop und habe dann eine GUI ?
Es gibt Leute, die installieren sich auf Ihrem Linuxserver auch eine GUI. Das sind dann die, die von Linux überhaupt keine Ahnung haben. Ich rate aus diversen Gründen dringend davon ab (Kostet zusätzliche Resourcen (CPU,Platten-/SSD-Speicher,RAM), Aufwand für die Einrichtung, beeinträchtigt die Sicherheit). Für Docker gibt es Portainer. Das ist eine WebUI für die Containerverwaltung. Nutze ich nicht. Ich mache das per Kommandozeile und docker-compose und fühle mich deutlich wohler damit. Also: Klare Empfehlung das via CLI zu erledigen.

Wie kann ich für Analyszwecke auf die Datenbank greifen? Aktuell kann ich das lokal einfach über die MySQL Workbench machen, aber die Datenbank sollte ja bestenfalls nicht von außen zugreifbar sein
Du kannst den MySQL-Port im Docker-Container nach aussen auf den Host binden, z. B. an 127.0.0.1:53306. Damit ist der MySQL dann von intern vom Server - der Hostumgebung - aus erreichbar. Normalerweise ist der Port nur innerhalb der Docker-Umgebung bzw. des internen Docker-Netzwerkes verfügbar.

Über eine SSH-Verbindung zu Deinem Server kannst Du dann ein Portforwarding zu Deinem Server aufbauen und dann mit den MySQL Workbench auf Deinem PC/Notebook arbeiten. Z. B. so:

Code:
ssh -L 127.0.0.1:53306:127.0.1:53306 deinserver.domain.tld
 
Last edited:
Vielen Dank für die Antwort.

Ja, das ist korrekt - ich muss mich da einarbeiten bzgl. Docker.

Ich habe gestern mal auf einer VM eine Debian Linux Instanz aufgesetzt (über Parallels Desktop beim Mac), mich dann per SSH connected, Docker installiert, ein Docker Image aufgespielt für den Keycloak.
Das hat durchaus (u.a. auch mittels Chat GPT) ganz gut funktioniert.
Ich konnte mich dann von meinem lokalen PC auf den Keycloak der VM verbinden.

Schwieriger wird es wahrscheinlich dann noch mit mehreren Docker Images, damit die teilweise auch kommunikzieren können (Keycloak mit der WildFly App und mit dem MySQL...)?

Bzgl. dem Mail Server tue ich mir etwas schwer.
Hier kann man wohl auch sehr schnell durch eine falsche Konfiguration auf eine Blackliste wandern und dann bekommen meine User gar keine Email mehr. Vllt. sollte ich hier lieber auf einen Anbieter (ionos, strato...) setzen?
Das Problem sehe ich aber eher mit der Anzahl an Emails, die versendet werden - hier haben alle Anbieter wie ich bisher gesehen habe ein Limit. Das Problem sind die Benachrichtigungsemail - also wenn eine Aktion durchgeführt wird, soll eine Email rausgehen usw.
 
Bzgl. dem Mail Server tue ich mir etwas schwer. Hier kann man wohl auch sehr schnell durch eine falsche Konfiguration auf eine Blackliste wandern und dann bekommen meine User gar keine Email mehr. Vllt. sollte ich hier lieber auf einen Anbieter (ionos, strato...) setzen? Das Problem sehe ich aber eher mit der Anzahl an Emails, die versendet werden - hier haben alle Anbieter wie ich bisher gesehen habe ein Limit. Das Problem sind die Benachrichtigungsemail - also wenn eine Aktion durchgeführt wird, soll eine Email rausgehen usw.

Hier gibt's einen Artikel mit kostenfreien Einstiegsangeboten von E-Mailanbietern. Damit könnte man mal anfangen.


200 Mails pro Stunde ist ja schon recht viel. Vielleicht brauchst Du so viel gar nicht.

Ja. Mit Postfix will man sich schon genauer beschäftigen. Allerdings ist eine rein ausgehende Lösung weniger problematisch und aufwändig als wenn eingehender Verkehr auch noch mit dabei ist.

Schwieriger wird es wahrscheinlich dann noch mit mehreren Docker Images, damit die teilweise auch kommunizieren können (Keycloak mit der WildFly App und mit dem MySQL...)?
Da kümmert sich docker drum, dass die Containernamen automatisch in die entsprechenden, dynamisch vergebenen IP-Adressen aufgelöst werden, wenn das gemeinsame Netzwerk konfiguriert ist, also wenn "mysql" der Containername des MySQL-Servers ist, dann kann der in der App auch als "mysql" angegeben werden und sollte korrekt aufgelöst werden. Kannst Du ja mit ping innerhalb des Containers testen (hint: docker exec ... . Natürlich nur wenn dort ping verfügbar ist - wenn nicht halt temporär nach jedem Containerstart das entsprechende Paket zum testen installieren oder im Dockerfile temporär als zusätzliche Diagnose-Pakete installieren).

Aber irgendwelche Dinge, wo man sich durchbeißen muss, wird es bestimmt geben.
 
Last edited:
Das Mailproblem ist tatsächlich ein Thema, was ich bisher nicht wirklich beantworten kann.
Es gibt einige Mailanbieter (strato, ionos usw.), die einen Mailserver anbieten. Allerdings habe ich hier immer irgendwann die Probleme, dass ich nur eine gewisse Anzahl an Mails verschicken kann.
In meiner App versende ich einige Benachrichtungsemails, wie man sie aus Foren etc. kennt. Hier kann dann täglich doch mal was zusammen kommen. Daher sehe ich aktuell die Notwendigkeit einen eigenen Mailserver aufzusetzen.

Das Setup ist mir allerdings noch nicht ganz schlüssig.

Anfänglich will ich die Kosten natürlich ziemlich gering halten und das erst mal mit ein paar Kunden ±20-50 Kunden probieren. Bestenfalls komme ich auf 0 wieder raus.

Aktuell stelle ich mir sowas vor:

1) Normales Webhosting Paket für eine normale Wordpress - Seite (Um das Produkt vorzustellen).
-> Dort ist dann auch die Domain und ich verwalte die DNS Einträge
-> Ebenfalls habe ich hier Emailpostfächer.
Ich nutze für eine Webseite all-inkl. und bin da auch Recht zu frieden

2) VPS
-> Dort läuft dann die Software selbst.
Angedacht in einem Docker Container:
- WildFly App
- MySQL Datenbank
- Keycloak
- Mailcow

Fragen:

1)
Wäre es zB denkbar nur die Mails für die Benachrichtung (bspw. notification@mycompan.com) über Mailcow laufen zu lassen und eine info@mycompany.com über das Webhosting.
Geht das technisch?

2) Muss das alles in einem Docker Container laufen oder erstelle ich mehrere Docker Container?
Bzw. wann erstelle ich mehrere Docker Container?
Den Keycloak habe ich eventuell auch mal gedacht für ein anderes Projekt ebenfalls zu nutzen (falls die Info hierbei wichtig ist)
 
2) Muss das alles in einem Docker Container laufen oder erstelle ich mehrere Docker Container?
Bzw. wann erstelle ich mehrere Docker Container?
Den Keycloak habe ich eventuell auch mal gedacht für ein anderes Projekt ebenfalls zu nutzen (falls die Info hierbei wichtig ist)
Eine Docker-Compose-Definition (docker-compose.yml) kann Definitionen für mehrere Container enthalten. Üblicherweise wird dann pro Anwendung ein Docker-Container verwendet.

Hier ist mal ein Beispiel-Datei docker-compose.yml für 3 Container (wiki, mysql, mysql-backup):

Code:
version: "3.5"
services:

  xwikistable:
    container_name: xwikistable
    hostname: xwikistable
    image: xwiki:stable-mysql-tomcat
    restart: always
    ports:
      - 127.0.0.1:8094:8080
    env_file: ENV
    networks:
      - frontend
    volumes:
      - "./wiki-data:/usr/local/xwiki"
      - "./images/favicon.transparent.svg:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon.svg"
      - "./images/favicon64.transparent.png:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon16.png"
      - "./images/favicon144.transparent.png:/usr/local/tomcat/webapps/ROOT/resources/icons/xwiki/favicon144.png"

  xwikistable-mysql:
    container_name: xwikistable-mysql
    hostname: xwikistable-mysql
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    env_file: ENV
    ports:
        - '127.0.0.1:7707:3306'
    networks:
      - frontend
    volumes:
      - "./mysql-data:/var/lib/mysql"
      - "./xwikistable.cnf:/etc/mysql/conf.d/xwiki.cnf"
      - "./mysqld.conf:/etc/mysql/conf.d/mysqld.cnf"
  mysqlbackup:
    container_name: mysqlbackup
    build: ./mysql-backup-source
    restart: always
    env_file: ENV
    volumes:
      - ./mysql-backup:/var/backups/mysql
    networks:
      - frontend

networks:
  frontend:

1) Wäre es zB denkbar nur die Mails für die Benachrichtung (bspw. notification@mycompan.com) über Mailcow laufen zu lassen und eine info@mycompany.com über das Webhosting.

Ja. Bei Postfix kannst Du Mailrouting auf der Basis verschiedener Kriterien steuern. Z. B. auf der Basis der Absenderadresse (Stichwort: sender_dependent_transport). Dazu brauchst Du einen zusätzlichen (z. B. lokalen / dockerisierten) Mailserver, der das Mailrouting zu den verschiedenen next-hops vornimmt.

Der Unterschied zwischen postfix und mailcow ist dass mailcow ein volles mailserversystem mit Speicherplatz für Mails, imap-server, Mailarchivierung und MTA (Mail-Transport-Agent, würde mich nicht wundern, wenn mailcow auch postfix nutzt) ist, während postfix ein reiner MTA ist, der sich rein um die Weiterleitung von Mails kümmert. Ersteres ist von der Gesamtkomplexität deutlich komplexer und vor allem viel fetter.
 
Last edited:
Es gibt Leute, die installieren sich auf Ihrem Linuxserver auch eine GUI. Das sind dann die, die von Linux überhaupt keine Ahnung haben.

Naja, muss ehrlich zugeben, dass ich auch auf den meisten vollwertigen Linux eine GUI drauf habe. Bin sicher kein Profi, aber überhaupt keine Ahnung würde ich jetzt auch nicht meinen. Für gewisse (Spili-) Server braucht es sogar zwingend eine GUI, weil die unter Wine laufen. Sehe jetzt da auf dem Homeserver hinter einer Firewall nicht so wirklich das Problem mit einer GUI. Zumal die meist auch schon nützliche Tools dabei haben.
 
Back
Top