Einige persönliche, setupspezifische Lektionen, die ich in den letzten Monaten mit Discourse, wp-discourse und Cloudflare gelernt habe. Ich teile sie hier, falls sie für jemanden nützlich sein könnten.
Umgebung:
- Discourse und WordPress werden auf separaten AWS EC2-Instanzen im selben VPC gehostet.
- Der WordPress-Stack besteht aus nginx mit FastCGI-Caching, php8.3-fpm, Redis und MariaDB.
- Das wp-discourse-Plugin wird verwendet, um WP und Discourse zu verknüpfen und Discourse-Kommentare unter Blogbeiträgen einzubetten.
- Cloudflare fungiert als Proxy für Discourse und WP.
- WP nutzt APO (Automatic Platform Optimizations).
1) Mit dem VPC ein wenig schummern
Als ich die Systeme zunächst bereitgestellt habe, stieß ich schnell auf Probleme: Cloudflare versuchte, den API-Datenverkehr zwischen dem Webserver und der Discourse-Instanz zu drosseln oder zu blockieren. Ich überlegte, Ausschlussregeln zu konfigurieren, aber da sich beide Server im selben AWS VPC befinden, war es viel einfacher, einfach Host-Einträge auf jedem Server zu erstellen, die den Hostnamen jedes Servers auf seine VPC-Adresse statt auf seine öffentliche DNS-Adresse verweisen. Damit muss man sich keine Sorgen mehr machen, dass Cloudflare sich zwischen WP und Discourse drängt. Eine kleine Änderung, die aber große Kopfschmerzen vermeidet.
2) Umgang mit einem Wettlauf zwischen wp-discourse und Apple News
Seit der Einrichtung von Discourse mit WordPress hatte ich über längere Zeit ein seltsames, intermittierendes Problem: Manchmal – nicht oft, aber doch gelegentlich – erschien ein neu veröffentlichter WordPress-Beitrag für Besucher so, als hätte er am Ende den alten, nativen WordPress-Kommentarblock statt der Discourse-Kommentare. Der tatsächliche Beitrag war in Ordnung und enthielt die richtigen Discourse-Kommentare, doch der Edge-Cache von Cloudflare hatte den Beitrag in dem Moment oder den Sekunden davor eingefangen, als die Discourse-Kommentare noch nicht geladen waren, und hielt die veraltete Seite fest.
Ich konnte mir nicht erklären, wie oder warum dieses Verhalten auftrat. Es schien zufällig und ohne erkennbaren Auslöser zu sein. Ich durchsuchte die Logs, fand aber nichts Offensichtliches.
Also schrieb ich es dem Zusammenspiel der verschiedenen Cacheschichten zu und bat ChatGPT, ein kleines mu-Plugin zu schreiben, das das Problem umgeht, indem es WP zwingt, bei neuen Beiträgen „NICHT CACHEN