Wie bereits angekündigt, arbeite ich an einer überarbeiteten Website für diesen Blog. Ich kann bereits auf der neuen Homepage die neusten Posts zeigen und es besteht die Möglichkeit sich anzumelden und registrieren. Eigentlich war mein Plan sogar bereits heute Abend die erste beta zu veröffentlichen und diese ist auch schon auf Github. Aber es gab Probleme.
Zuerst habe ich einen kleinen Server gemietet, die DNS Einträge gemacht und PocketBase installiert, aber immer noch lokal mit Node und SvelteKit getestet. Soweit kein Problem
Dann habe ich nginx als reverse Proxy installiert, denn unter derselben Subdomain und demselben Port wie die Website soll auch PocketBase laufen. Also im Frontend die Datenbank von Port 8090 auf 80 über Nginx verlegt. Immer noch kein Problem
Als ich dann die Idee hatte, heute bereits eine alpha zu veröffentlichen, kam mir in den Sinn auch HTTPS zu verwenden. Schließlich sollen eure Passwörter sicher sein und es ist generell Standard geworden.
Also habe ich mit "let's encrypt" mir ein Zertifikat ausgestellt und mit Nginx konfiguriert. Soweit dachte, ich lief alles. Das Admin UI ist mit HTTPS erreichbar und die lokale Seite mit der Datenbank auf dem Server läuft auch. Aber da war bereits ein Fehler. Ich hatte vergessen HTTPS in Svelte anstelle von http anzugeben für API-Calls.
Ich dachte mir nichts bösen und lud die Website auf den Server und starte ihn mit Node. Richtete Nginx erst mal auf HTTP mit dem richtigen Port ein und alles lief. Ich war glücklich, denn ich ahnte nicht, was ich den Abend machen werde.
Dann stellte ich in nginx Node auch für HTTPS ein. Ich besuchte die Website und Error 500. Ich sehe in die Konsole und da steht "mixed content". Nach kurzem googeln war mir klar, man kann nicht auf einer HTTPS Seite Anfragen an eine http stellen. Kurz in die Einstellungen in Svelte geschaut und den Fehler bemerkt. Also http durch HTTPS ersetzt und ohne zu testen direkt auf den Server hochgeladen.
Wieder Error 500 beim Laden der Posts. Und eine kryptische Fehlermeldung von Node beim Testen auf meinem PC. Eine Zeit lang gegoogelt und immer noch nichts verstanden.
Als Idee dann versucht das Admin Dashboard zu öffnen, kein Problem. &Über Postman auf die API zugreifen, kein Problem. Dann habe ich anstelle der Subdomain die ipv4 Adresse des Servers genommen wie in Svelte und da sah ich im Browser das Problem. Das Zertifikat ist nicht gültig, aber warum. Einige werden es bereits merken, Zertifikate werden fülr eine Domain ausgestellt, nutzt man die IP-Adresse sind sie dafür nicht gültig.
Also in Svelte dir IP durch die Domain ersetzt und neues Fehlerbild.
Ab jetzt habe ich nur noch lokal getestet, denn ich dachte mir bereits, dass ich heute nicht mehr fertig werde.
Wenn ich die Homepage Aufrufe, kommt nach dem Header Error 500, wieder anstelle der Posts. Wenn ich nun aber auf unter anderem das Log-in gehe und zurück, sind die Posts da. Jetzt könnt ihr raten, woran es liegt.
Da kommt SvelteKit ins Spiel. Sveltekit ist ein Framework, welches beim ersten Seitenaufruf SSR (Serverside Rendering) betreibt und dann das Routing und weiteres an den Client übergibt. Wenn also der Server die Posts abruft, gibt der einen Fehler, den mir Node auch in die Konsole schreibt. Wenn aber egal ob Firefox, Chrome oder Edge (ich habe alle getestet) jetzt diese nachlädt direkt aus der Datenbank, mit demselben Node Modul und denselben Funktionen, die Posts abruft, gibt es keine Probleme.
Um sicherzugehen, dass das Problem auf dem Server liegt, habe ich global SSR deaktiviert, also auch die ersten Anfragen an die DB an den Client übergeben und alles lief.
Denkbar alles gut, aber ich war nicht zufrieden und ich habe im Internet auch keine Lösung gefunden. SSR zu deaktivieren ist für mich keine Lösung. Dann könnte ich direkt fülr den halben Preis mir einen static server mieten. Aber ich will lieber die beste UX haben und neuste Technologien ausprobieren.
Ich erinnerte mich gelesen zu haben, dass das Node Modul fetch nutzt. Eine Funktion, die es einem im Browser ermöglicht http und HTTPS Anfragen an z.B. APIs zu stellen. Diese gibt es in Node neuerdings auch. Kurz nachgesehen, ich habe auf meinem PC Node 19 und auf dem Server Node 18lts. Also das Beste, was es gibt und vorher bzw. immer noch funktioniert es, ohne SSL.
Eigentlich wollte ich schlafen gehen, aber mich ließ das Problem nicht los. Aber das Problem war auf Node begrenzt. Seit kurzen hat Node kein Monopol mehr. Es gibt auch Deno und bun. Letzteres nur auf Linux und dazu ist es noch nicht ganz stabil. Deno hatte ich im Kopf, hatte sogar vor Node eine fetch API und es gibt einen Adapter für SvelteKit. Also den installiert, SvelteKit das Projekt bauen lassen und mit Deno gestartet. Direkt SSR aktiviert und HTTPS und alles lief.
Also ein Happy End und morgen Abend kann ich weiter machen, aber dennoch lässt Node mir keine Ruhe und es ist noch nicht auf dem Server getestet.