# Programm wie verteilen



## OnDemand (7. Mrz 2018)

Hallo zusammen,

wir haben eine Art Warenwirtschaft entwickelt, welche Verbindungen an verschiedene Lagersysteme bietet. Nun möchten wir das Programm vertreiben aber es stellt sich noch die Frage ob wir pro Kunden einen eigenen Wildfly aufsetzten oder unser Programm so umschreiben, dass sich alle Kunden auf unserer Seite einloggen.  Da das Programm recht viel Resource frisst, wäre es besser jedem Kunden einen eigenen Server aufzusetzen. Da ist dann aber problemetisch; Thema Wartung; alle Server müssen hin und wieder gepatched werden. Weiterhin müsste man das Projekt in Eclipse umstrukturieren sodass wir je Kunden ein Projekt haben aber nicht alle Klassen doppelt. Unter welchen Umständen würdet ihr empfehlen dem Kunden einen eigenen Server aufzusetzen und wann nicht?


----------



## Thallius (7. Mrz 2018)

Mit nichts läßt sich mehr Geld verdienen als mit Wartungsverträgen. Also schön die Server selber hosten (oder bei einem Hoster anmieten) und dafür monatlich abkassieren.


----------



## OnDemand (7. Mrz 2018)

Stimmt, so hab ich das noch gar nicht gesehen! Aber mal unabhängig davon; alle sprechen heute immer von Microservices und Cloud und tralala. Aber ich bin der Meinung, dass Unternehmensdaten ins Unternehmen gehören (auch wenn wir hosten, die haben theoretisch vollzugriff auf den Server)

Dabei stoß ich aber auf folgende Probleme:

- technische Umsetzung wie? Docker? Gibts was einfacheres? Kleine vServer?
- Wie könnte man das Projekt in Eclipse verwalten? Jeder Kunde wird zu 99% Anpassungen bekommen. Das einfachste für mich wäre je Kunde ein Branch. Neuerungen die dann im Standard-Deployment (Master) gemacht werden könnten in die Kundenbranches gemerged werden. 
- wie kann man die Deployments verteilen wenn es ein Update gab? Wir würden war-files ausliefern. Gibt es da eine Möglichkeit dass sich der Server das selber holt oder so?


----------



## Thallius (7. Mrz 2018)

Also meine Applikationen Schaum beim starten immer an ihrem Server ob es ein update gibt und wenn ja dann wird es runter geladen und installiert. Das ganze ist natürlich etwas aufwendiger um es sicher zu machen. Also Hash über das Originalpaket machen und ebenfalls zum Download bereit stellen und dann die App  den gleichen hast über das geladene file machen lassen und abgleichen um sicher zu stellen das das file nicht manipuliert wurde.

Wenn du Firmendaten hosten willst müst du aufpassen wo die Server stehen, denn du darfst seit Safe Harbor keine persönlichen Daten mehr außerhalb von Europa speichern ohne das der Eigentümer der Daten damit einverstanden ist. Also z.b. Keine Kunden Daten in einen Amazon Cloud Server stecken etc.

Wenn ihr da noch keine erfahrung habt solltet ihr euch unbedingt einen Consultant angagieren damit ihr da nicht später ganz dumm da steht

Gruss

Claus


----------



## OnDemand (7. Mrz 2018)

Unser servermann ist ganz fit in Sachen Datenschutz etc der betreibt ein eigenes Rechenzentrum und hat entsprechend Leute an der Hand wenn Fragen aufkommen.

Wie nachst du das mit dem Download? Unser Programm läuft in wildfly. Dann müsste das war-file in den deployment Ordner geladen werden und Auto-deploy aktiviert sein oder?


----------



## mrBrown (7. Mrz 2018)

NicoDeluxe hat gesagt.:


> Stimmt, so hab ich das noch gar nicht gesehen! Aber mal unabhängig davon; alle sprechen heute immer von Microservices und Cloud und tralala. Aber ich bin der Meinung, dass Unternehmensdaten ins Unternehmen gehören (auch wenn wir hosten, die haben theoretisch vollzugriff auf den Server)


"Microservices und Cloud" und "Unternehmensdaten ins Unternehmen" widersprechen sich überhaupt nicht...



NicoDeluxe hat gesagt.:


> - technische Umsetzung wie? Docker? Gibts was einfacheres? Kleine vServer?


Docker braucht auch den Server als Grundlage - lässt sich aber mit Docker vermutlich am einfachsten Umsetzen



NicoDeluxe hat gesagt.:


> - Wie könnte man das Projekt in Eclipse verwalten? Jeder Kunde wird zu 99% Anpassungen bekommen. Das einfachste für mich wäre je Kunde ein Branch. Neuerungen die dann im Standard-Deployment (Master) gemacht werden könnten in die Kundenbranches gemerged werden.


z.B. Standard-Deployment als ein Projekt und Kunde als eigenes Projekt mit Abhängigkeit zum Hauptprojekt

Jeder Build des Kunden-Projekts zieht dann die jeweils aktuellste Standard-Projekt-Version, kann man auch recht leicht mit dem Docker-Ansatz vereinen




NicoDeluxe hat gesagt.:


> - wie kann man die Deployments verteilen wenn es ein Update gab? Wir würden war-files ausliefern. Gibt es da eine Möglichkeit dass sich der Server das selber holt oder so?


Kommt stark auf die Umsetzung an und was man eigentlich braucht.

Mit Docker + private Repo ist ein Update im wesentlichen nicht mehr als 3 Skript-Aufrufe (docker stop, docker pull, docker run) und die neuste Version läuft. Geupdated ist in dem Fall der gesamte Stack (Java-Version, Web-Server, App, ...), nur den realen Server auf dem es läuft, muss man updaten. Lässt sich aber zB lösen, indem neue Container/Apps nur auf dem jeweils aktuellstem Server gestartet werden.


----------



## OnDemand (16. Mrz 2018)

Kann mir jemand helfen wie ich das Projekt so aufsetze? Es soll das Hauptprojekt werden, sobald ein neuer Kunde dazu kommt bekommt er ein eigenes Projekt welches Abhängigkeiten zum Standard hat. Gibts dafür irgendwas zu nach googlen? Muss da ein Builtscript geschrieben werden?


----------



## mrBrown (16. Mrz 2018)

Kommt drauf an, was genau du jetzt mit "so" meinst.



NicoDeluxe hat gesagt.:


> Gibts dafür irgendwas zu nach googlen?


Ja.



NicoDeluxe hat gesagt.:


> Muss da ein Builtscript geschrieben werden?


Jein, kommt auf das "so" an


----------



## OnDemand (16. Mrz 2018)

So wie du es geschrieben hast "z.B. Standard-Deployment als ein Projekt und Kunde als eigenes Projekt mit Abhängigkeit zum Hauptprojekt"

Sobald ich einen neuen Kunden bekomme, erstelle ich Ihm ein eigenes Projekt (wenn es was besonderes zu programmieren gibt, was vom Standard abweicht)  entwickle seine Eigenheiten und es soll dann sein spezieller Code + Standard in ein File exportiert werden


----------



## mrBrown (16. Mrz 2018)

Das Standard-Deployment ist ein normales Maven-Projekt, das Kunden-Projekt auch, und letzteres hat einfach eine Dependency zum Standard-Deployment.


Je nachdem wie weit das individualisierter sein soll, muss man das Standard-Deployment natürlich passend aufbauen, damit es die entsprechenden Stellen zum anpassen bietet.


----------

