Wohin mit der fphttpserver exe-datei?

Alle Fragen zur Netzwerkkommunikation
Antworten
kirchfritz
Beiträge: 214
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Wohin mit der fphttpserver exe-datei?

Beitrag von kirchfritz »

Hallo,
ich möchte vorausschicken, dass ich mich mit der Entwicklung von WebServices nur sehr wenig auskenne.
Nun habe ich zu Lernzwecken einen minimalen WebServer (basierend auf fphttpapp) geschrieben, der für genau eine Route den Query-Parameter ID in einer JSON-Datei zurückliefert.
Das EXE funktioniert hervorragend!! (Siehe ScreenShot)
Meine Frage: Was muss ich jetzt unternehmen, damit dieser WebService anstelle von localhost auf einem "echten" WebServer läuft?
Wir haben in der Firma Windows-WebServer mit Apache TomCat am laufen.
Welche Informationen muss ich meinem WebAdministrator mitgeben, damit er weiß, was mit meiner Exe zu tun ist, damit die Funktionalität firmenweit zur Verfügung steht?
Screenshot_2024-04-05.png
Screenshot_2024-04-05.png (170.96 KiB) 14068 mal betrachtet
Viele Grüße
Fritz
Dateianhänge
DemoWebServer.lpr
(1.06 KiB) 3912-mal heruntergeladen
DemoWebServer.lpi
(1.66 KiB) 3940-mal heruntergeladen


MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von MmVisual »

Zur kurzen Erklärung wegen Theo's Antwort:

"Windows-WebServer mit Apache TomCat" wird nicht benötigt, deine EXE soll einfach als System Dienst laufen und bietet dann die Webserver Funktion als Stand-Allone-Programm.
Im Prinzip kann das dann auch auf jedem anderen Computer laufen.

Du solltest den Code so schreiben dass man einmal die EXE kompillieren und einmal als Dienst kompillieren kann. Mit der EXE testest du, der Dienst ist dann der Service.

Aber aufpassen, wenn du dein Programm als Service laufen lässt, so läuft das Programm mit einem anderen User und eventuell verbundene Netzwerk Laufwerke kennt der System User natürlich nicht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

kirchfritz
Beiträge: 214
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von kirchfritz »

Soweit ich weiß, würde ein SystemDienst local auf meiner Maschine laufen.
Ich wollte doch eine WebService haben, den jeder Anwender in seinem Browser aufrufen kann.
Bei mir lokal funktioniert http://localhost:9081/DRuckfreigabe?ID=xyz wie gewünscht.
Aber ich möchte, dass andere Anwender dies genauso von ihrer Maschine bzw. von überall aus dem Internet aufrufen können.
Deshalb meine Frage, wie kommt das Zeugs auf einen Server, sodass ich dann
mit http://irgendeinserver/Druckfreigabe?ID=xyz das Ganze von überall in der Welt aufrufen kann?

Fritz

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von theo »

Wieso besprichst du das nicht einfach mit dem Web-Administrator?
Der sagt dir dann schon, ob er das überhaupt haben will und was er von dir braucht.

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von Stevie »

Letztlich gibt es zwei Möglichkeiten: entweder machst Du es so, wie von MmVisual angedeutet und implementierst mit Deinem Webservice das Windows Service Protokoll selbst. Dann kann sich Dein Programm eigenständig als Dienst registrieren und als solcher von Windows (und den Admins) verwaltet werden. Das habe ich selbst auch schon gemacht und mit Hilfe von Michael van Canneyts Artikel dazu (https://www.freepascal.org/~michael/art ... aemons.pdf) sollte das nicht allzu kompliziert werden.

Alternativ kümmerst Du dich nicht darum, sondern schnappst Dir einen Service Wrapper, der den Job für dich erledigt. Dann hast du zwar keine ganz so elegante Einbettung und damit ist Dein Webservice dann keine einzelne EXE-Datei mehr, aber wenn das egal ist, sparst Du Dir den Implementierungsaufwand. Denn letztlich lässt sich Dein Webservice dann trotzdem ebenfalls als Dienst verwalten und bspw. beim Systemstart automatisch hochfahren. Ich habe auch das schon gemacht und mit https://github.com/winsw/winsw ganz gute Erfahrungen gesammelt.

Was Du ansonsten noch brauchst, hängt von Deinen / Euren Anforderungen ab. Ich würde auf jeden Fall empfehlen, den Port konfigurierbar zu machen, damit die Admins es etwas einfacher haben, den Webservice mit auf eine bestehende Windows-Instanz zu packen.

Und damit nur befugte Nutzer Deinen Dienst ansprechen können, solltest Du Dir evtl. noch ein paar Gedanken zur Authentifizierung / Autorisierung machen, im einfachsten Fall per BASIC Auth, wenn ihr erhöhte Sicherheitsanforderungen im Hause habt, evtl. aber auch mit OAuth2, JWTs oder ähnlichem.

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von theo »

Was ist eigentlich der Zweck des Ganzen?
Es müsste schon recht gute Gründe geben, dass ich so etwas als Web Admin in meine Verantwortung nehmen wollte.
Wenn es nur darum geht, ein paar Strings/JSON zurückzugeben, dann mach doch einfach ein PHP Script oder ähnlich, oder wenn es dringend sein muss, ein Apache Modul.
https://wiki.freepascal.org/FPC_and_Apache_Modules
https://www.freepascal.org/~michael/art ... apache.pdf

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von m.fuchs »

Kann man die FPHTTPApp denn tatsächlich auf Produktivsystem einsetzen?

Ich nutze die immer nur zum Testen bei der Entwicklung und deploye die Web-Anwendung dann als Apache-Modul oder FCGI (+ Lighttpd).
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von Stevie »

Was ist eigentlich der Zweck des Ganzen?
Na, letztlich muss das Kirchfritz entscheiden, aber ich kann mir da schon einiges vorstellen. Microservices sind ja gerade dann sinnvoll, wenn man kleine, isolierte Aufgaben abgrenzt und sie möglichst zügig umsetzt und ggf. auch flott wieder aus dem Rennen nimmt, wenn sie nicht mehr gebraucht werden oder eine bessere Lösung bereit ist, zu übernehmen.

Auch "drüben" in der Java-Welt geht man von den schwergewichtigen App-Server-basierten Ansätzen weg und hin zu kleineren Programmen, die den Webserver gleich mitbringen, wie z.B. Spring-Boot. Das lässt sich dann auch viel einfacher in Docker o.ä. verpacken und bspw. per Kubernetes deployen. Und ich denke mal, dass so manchem Admin ein Microservice lieber ist als eine schwer gewichtige Enterprise-Java Anwendung mitsamt Servlet-Container.

Aus Sicht des Entwicklers könnte ich mir vorstellen, dass sich so eine FPHTTPApp schlicht einfacher testen lässt, da man keine Module auf Server kopieren oder lokal einen Apache installieren muss.

Und ins Produktivsystem sollte halt nur gut getestete Software kommen und man bspw. aufpassen, dass es keine Speicherlecks gibt, die bei Langläufern umso gravierende Auswirkungen haben. Und je nachdem, was für Daten da durch den Microservice "aus aller Welt" erreichbar gemacht werden und wie tief in die Unternehmens-IT der Service reingreifen kann, würde ich über ein API-Gateway wie Kong https://github.com/Kong/kong/ nachdenken...

kirchfritz
Beiträge: 214
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von kirchfritz »

Vielen Dank an alle, die bisher geantwortet haben.
Vielleicht habe ich mich zu undeutlich ausgedrückt. Deshalb ein weiterer Versuch mein Anliegen verständlich "rüberzubringen".

1. Mein Plan ist, eine Email zu verschicken (Dies wird ausserhalb der Lazaruswelt gemacht und ist deshalb nicht Gegenstand meiner Fragen).
2.Diese Email soll einen Bestätigungslink enthalten. (Das ist auch kein Hexenwerk).
3. Mit dem Bestätigungslink soll ein REST-API-Aufruf ausgeführt werden, der eine Authentifizierung erfordert.
4. Dieser REST-API Aufruf samt Authentifizierung kann meines Wissens nach nicht mit einem einfach HTML-Link realisiert werden.
5. Deshalb meine Idee: Ich schreibe einen einfachen WebService, der diesen REST-API-Aufruf samt Authentifizierung ausführt.
6. Und diesen einfachen WebService kann ich dann im HTML-Email mit einem HTML-Link aufrufen.

Mit Hilfe meiner Eingangs erwähnten fphttp-Application (also ein lokaler WebServer) kann ich das alles sehr gut simulieren.
Aber wie gesagt: Ich möchte ja eine Email mit dem bestätigungslink erstellen.
Ich habe das ganze jetzt mal als CGI-Application umgebaut und versuche dieses EXE auf einem Apache TomCat Server zum Laufen zu bringen

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Wohin mit der fphttpserver exe-datei?

Beitrag von Stevie »

Nun ja, eigentlich kann eine CGI-Lösung auch nicht mehr, als eine FPHTTPApp, es sei denn, Deine Admins haben all die Dinge, die man sonst in seine (Application-)Firewalls und Loadbalancer einbaut, direkt im CGI-Server (Tomcat oder httpd) verbaut, was aber eher unüblich ist.

Aber ich gebe zu, dass mich Deine Punkteliste etwas verwirrt: Du willst also _NICHT_ mit deinem Webservice eine Mail versenden (schreibst Du im 1. Punkt). Du schreibst dann, dass jene Mail, die du also _NICHT_ in Deinem Webservice versenden willst, einen Bestätigungs-Link enthalten soll. Du schreibst dann unter 5., dass Dein Webservice den Bestätigungs-Link entgegennehmen und einen REST-Call mit Authentifizierung kapseln soll. So weit hätte ich es verstanden. Aber dann schreibst Du darunter "Aber wie gesagt: Ich möchte ja eine Email mit dem bestätigungslink erstellen." Äh, also was denn nun?

Grundsätzlich ist das, was ich verstanden zu haben glaube, recht einfach zu machen. Du erzeugst mit Hilfe eines Programmes (kann Pascal sein, muss nicht) API-Keys (xxxx-xxxx-xxxx-xxxx), die Du den Freischaltungen zuordnest und mitsamt der Authentisierungsinformationen in einer Datenbank speicherst. Diese API-Keys versendest Du dann per Mail als Links: https://service.firma.de/api/freischalt ... -xxxx-xxxx . Von Deinen Admins lässt Du dir auf dem externen Loadbalancer eine Weiterleitung von service.firma.de auf Deine FPHTTPApp in der DMZ schalten, so dass der Aufruf bei deiner App ankommt. Die App schnappt sich den API-Key, schaut in der Datenbank nach, ob sie ihn finden kann und er noch nicht verbraucht ist, baut anhand der mit ihm verbundenen Informationen einen weiteren, authentisierten Call auf die interne API zusammen und markiert den API-Key dann als verbraucht. Das geht dann sowohl mit CGI als auch 'native'.

Antworten