Webserver Setup mit Nginx, Percona und PHP-FPM

In diesem Beitrag notiere ich kurz wie ich aktuell einen neuen Webserver unter Debian Squeeze einrichte. Er dient in erster Line als Reminder für mich selbst daher sind die Erklärungen auf das Wesentliche beschränkt. Vielleicht sind aber trozdem ein paar nützliche Informationen dabei weshalb ich mich dazu entschlossen habe einen Blogeintrag daraus zu machen. Ich werde versuchen den Beitrag hin und wieder zu aktualiseren (z.B. demnächst für Debian Wheezy).

Inhalt


Vorbereitung

Erklärung: Hier ändere ich den SSH-Port, lege einen neuen User an welcher sich mit einem Key authentifiziert. Der direkte Login mit dem User root wird deaktiviert. Bei Änderungen am sshd empiehlt es sich während der ganzen Zeit einen zweite root-shell göffnet zu lassen für denn Fall, dass man sich nach einem sshd Neustart nicht mehr einloggen kann. Read More…

Fork me on GitHub

Twitter Streaming API Queue/Cache mit Redis

Für mein Projekt jitt.li verwende ich die Twitter Streaming-API um Tweets über einen Websocket-Server an den Browser zu senden. Je nach gesetzten Filtern kann es nun vorkommen, dass viele hundert oder tausend Tweets pro Sekunde vom Twitter empfangen werden. Zunächst habe ich alle empfangenen Tweets direkt an den Websocket-Server gesendet. Der Datenfluss sah in etwa so aus:

Twitter -> API-Client -> Websocket-Server -> Browser

Das brachte jedoch einige Probleme mit sich: Zum einen wurde sehr viel Last vom Websocket-Server erzeugt was teilweise in einem Absturz endete. Zum anderen wurden oft mehr Tweets gesendet als man sie im Browser noch vernüftig hätte lesen können. Read More…

Performante PHP-Projekte – Teil 2: Datenbankabfragen

Nachdem ich mich in Teil 1 dieser Serie dem Thema „Servertweaks“ gewidmet hatte, soll es in diesem Artikel um Datenbankabfragen gehen. Die Abfragen der Daten aus einer Datenbank ist der Flaschenhals vieler Webprojekte und bietet oft viel Optimierungspotential. Ich fasse hier einfach mal die Schritte zusammen die ich Leuten in der Regel empfehle wenn Sie Probleme mit der Geschwindigkeit ihrer DB-Abfragen haben. Ich orientiere mich in diesem Artikel an einer MySQL-Datenbank, die meisten Tipps sollten jedoch auf andere relationale Datenbanksysteme übertragbar sein.

Optimierung der Queries und Nutzung von Indizes

Für die meisten Leser wird dieser Schritt trivial klingen, ich möchte ihn aber dennoch mit aufnehmen da ich es immer wieder erlebe das in Tabellen Indizes fehlen oder falsch gesetzt sind. Read More…

PHP-CLI Scripte überwachen mit Websockets

Websocket Logger

Jeder der schon einmal PHP-Scripte mit sehr langer Laufzeit verwendet hat, weiss dass es nicht ganz einfach ist solche Scripte zu überwachen. Natürlich kann man in der Prozessliste des Servers schauen ob die Scripte noch laufen, es ist jedoch schwierig zu bestimmen was ein Script gerade tut.

Eine Möglichkeit dies herauszufinden ist das Logging in eine Datei oder Datenbank. Das kann sinnvoll sein wenn man später nachvollziehen möchte was ein Script zu welchem Zeitpunkt getan hat. Wenn man jedoch überwachen möchte was ein Script gerade im Moment tut ist diese Variante relativ unpraktisch. Man müsste dazu die Log-Datei bzw. die Ausgabe aus der Datenbank permanent neu laden. Read More…

Performante PHP Projekte – Teil 1: Servertweaks

Immer mal wieder höre oder lese ich, dass man mit PHP keine performaten Webprojekte umsetzen könne. Satt aber nun einen weiteren PHP vs. Sprache-X Artikel zu verfassen habe ich mir überlegt stattdessen ein paar Tipps zu geben wie man meiner Meinung nach die Performance von PHP-Projekten optimieren kann. Da dies ein sehr umfangreiches Thema ist werde ich das Ganze in mehrere Artikel aufteilen. Anfangen werde ich in diesem ersten Beitrag mit ein paar Tipps zum Webserver.

Lighttpd mit PHP-FPM

Die meisten Root- oder V-Server werden in der Standard-Konfiguration ganz ohne Webserver oder mit Apache2 ausgeliefert. Mein Tipp hier: Alternativen testen! Lighttpd oder Nginx sind in vielen Fällen schneller und benötigen weniger Ressourcen. Jeder Webserver hat seine Vor- und Nachteile, es kann also nicht schaden die Alternativen einmal zu testen. Ich persönlich verwende schon seit längerem Lighttpd und bin sehr zufrieden damit. Die Konfiguration der verschieden Webserver sollte Dank zahlreicher Tutorials die im Netz verfügbar sind kein Problem darstellen.
Desweiteren empfehle ich dringen statt des “üblichen” PHP-Moduls (mod_php) PHP-FPM zu verwenden. Read More…

Websocket powered Twitterwall – Projektrelaunch

Endlich ist es soweit: Ich habe eine Projekt live geschaltet welches den von mir weiterentwickelten Websocket-Server produktiv nutzt. Ich habe mein altes Twitterwall-Projekt JITT von Grund auf neu entwickelt und eine erste Beta-Version steht nun unter jitt.li bereit.

Das Projekt bietet Twitterwalls in Echtzeit. Dazu werden Tweets aus der Twitter Streaming-API direkt per Websocket-Server an den Browser weitergeleitet. Ausserdem dient das Projekt natürlich auch dazu die Stabilität des Websocket-Servers im Live-Betrieb zu testen und weiter zu optimieren.
Falls ihr in Zukunft also mal eine Twitterwall für ein Event o.Ä. braucht behaltet jitt.li im Hinterkopf. :)

Ganz kurzes Update: Habe ein neues Theme, das vorherige war inzwischen etwas in die Jahre gekommen. Auf isitfriday.info ist wieder alles beim Alten. Mit dem Websocket-Server geht es gut voran – Support für wss ist bald fertig. An dieser Stelle vielen Dank für die ganzen Mails mit Bugfixes etc. Ich bin dran ;)

PPTP VPN Tunnel – Ein paar Tipps

Vor kurzem habe ich einen VPN-Server aufgesetzt und habe mich dabei für das PPTP entschieden. Auf die grundlegende Installation unter Debian möchte ich hier nicht eingehen denn dafür gibt es bereits genügen Anleitungen im Netz. (z.B. hier)

Allerdings waren (zumindest bei mir) nach der Installation noch einige kleine Kniffe notwendig bis der Tunnel vernünftig lief. An dieser Stelle noch kurz der Hinweis, dass als Clients Windows 7 bzw. Windows XP Rechner zum Einsatz kommen.

Problem 1: Clients können sich einwandfrei verbinden, es können jedoch keine Daten empfangen werden.
Lösung: Damit der Server empfangene Daten zu den Clients “weiterrouten” kann ist eine IPTables Regel notwendig. Bei mir brachte folgendes die Lösung:

iptables --table nat --append POSTROUTING  --out-interface eth0 --jump MASQUERADE

Read More…

PHP Websocket Server/Client nach Draft hybi-10

Vor ein paar Tagen habe ich ja schon einen Websocket-Client hier veröffentlich, welcher Draft hybi-00 unterstützt. Kurz danach veröffentlichte google jedoch eine neue Version von Chrome. In Chrome 14 hat google nun den Websocket-Draft hybi-10 implementiert und dort hat sich vieles grundlegend geändert. Neben einem neuen Handshake werden auch die Datenframes komplett neu codiert.
Ich habe meine Client-Klasse entsprechend angepasst und möchte sie natürlich wieder hier präsentieren, da sie dem ein oder anderen Entwickler sicherlich helfen wird. Desweiteren habe ich die “Connection-Klasse” des Websocket-Servers von Nico Kaiser so angepasst, dass sie auch den hybi10-Draft unterstützt.

Viel Spass bei basteln :)

HINWEIS: Da der Server aktuell ständig weiterentwickelt wird habe ich ein Repository auf Github angelegt. Bitte den jeweils aktuelle Code verwenden: https://github.com/lemmingzshadow/php-websocket

UPDATE: As the project is constantly updated and improved I created a repository on github. Please get the code here: https://github.com/lemmingzshadow/php-websocket

PHP Websocket Client

Seit einiger Zeit spiele ich immer mal wieder mit Websockets. Allerdings habe ich bisher keinen wirklich funktionstüchtigen, in PHP implementierten Websocket-Client finden können. Also habe ich kurzerhand selbst eine Klasse dafür gebaut welche ich hier natürlich gerne veröffentliche. Absolut minimal, aber für Testzwecke ausreichend. Es wird aktuell der Handshake aus Draft “draft-ietf-hybi-thewebsocketprotocol-00” unterstürzt. Getestet habe ich es mit der aktuellen Version von Chrome (13.0.782) und dem Websocket Server von Nico Kaiser.

Hier die Klasse + Beispielaufruf:

ACHTUNG: Eine aktuellere Version dieser Klasse gibt es hier: PHP Websocket Server/Client nach Draft hybi-10

Read More…

1 2 3 4 5 6  Scroll to top