Wohin mit der fphttpserver exe-datei?
-
- 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?
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?
Viele Grüße
Fritz
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?
Viele Grüße
Fritz
- Dateianhänge
-
- DemoWebServer.lpr
- (1.06 KiB) 3912-mal heruntergeladen
-
- DemoWebServer.lpi
- (1.66 KiB) 3940-mal heruntergeladen
-
- 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?
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.
"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
-
- 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?
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
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
Re: Wohin mit der fphttpserver exe-datei?
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.
Der sagt dir dann schon, ob er das überhaupt haben will und was er von dir braucht.
Re: Wohin mit der fphttpserver exe-datei?
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.
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.
Re: Wohin mit der fphttpserver exe-datei?
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
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
- 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?
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).
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
Re: Wohin mit der fphttpserver exe-datei?
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.Was ist eigentlich der Zweck des Ganzen?
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...
-
- 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?
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
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
Re: Wohin mit der fphttpserver exe-datei?
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'.
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'.