So installieren Sie einen Nginx-, MySQL- und PHP-Stack (FEMP) unter FreeBSD 10.1

Einführung

Nginx, MySQL und PHP können problemlos zu einer leistungsstarken Lösung für die Bereitstellung dynamischer Inhalte im Web kombiniert werden. Diese drei Softwareteile können auf einer FreeBSD-Maschine installiert und konfiguriert werden, um einen sogenannten * FEMP-Stack * zu erstellen.

In diesem Handbuch wird gezeigt, wie Sie einen FEMP-Stack auf einem FreeBSD 10.1-Server installieren. Wir werden die Software mit Hilfe von Paketen installieren, um schneller einsatzbereit zu sein. Diese Pakete bieten angemessene Standardeinstellungen, die für die meisten Server gut funktionieren.

Installieren Sie die Komponenten

Zunächst installieren wir die gesamte Software, die wir benötigen, mit dem FreeBSD-Paketsystem. Der Befehl "install" aktualisiert unsere lokale Kopie der verfügbaren Pakete und installiert dann die angeforderten Pakete:

sudo pkg install nginx mysql56-server php56 php56-mysql

Dadurch werden ein Nginx-Webserver für die Bereitstellung unserer Inhalte, ein MySQL-Datenbankserver zum Speichern von Informationen und die PHP-Verarbeitungssprache zum Verarbeiten dynamischer Inhalte heruntergeladen und installiert.

Führen Sie nach Abschluss der Installation den Befehl "+ rehash " aus, wenn Sie die Standardshell " tcsh +" ausführen. Dies macht die Shell auf die neuen Anwendungen aufmerksam, die Sie installiert haben:

rehash

Wenn Sie fertig sind, können Sie fortfahren und mit der Aktivierung und Konfiguration Ihrer Komponenten beginnen.

Aktivieren Sie alle Dienste

Im letzten Abschnitt haben wir drei separate Dienste heruntergeladen, die auf unserem Server ausgeführt werden müssen.

Damit FreeBSD diese Dienste als herkömmliche Dienste starten kann, müssen wir FreeBSD mitteilen, dass wir sie aktivieren möchten. Auf diese Weise können wir sie als Dienste anstatt als Einmalanwendungen behandeln und FreeBSD so konfigurieren, dass sie beim Booten automatisch gestartet werden.

Erstens müssen wir den richtigen rc-Parameter kennen, um ihn für jeden Dienst einstellen zu können. Die Service-Skripte, die sich im Verzeichnis "+ / usr / local / etc / rc.d " befinden, definieren den Parameter, der verwendet werden soll, um jeden Server mit der Variablen " rcvar " zu aktivieren. Wir können sehen, auf was das " rcvar +" jedes Dienstes eingestellt ist, indem wir Folgendes eingeben:

grep rcvar /usr/local/etc/rc.d/*

Sie sollten eine Auflistung wie folgt erhalten:

/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable
/usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable
/usr/local/etc/rc.d/dbus:rcvar=dbus_enable
/usr/local/etc/rc.d/mysql-server:
/usr/local/etc/rc.d/nginx:rcvar=
/usr/local/etc/rc.d/php-fpm:rcvar=
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

Wie Sie sehen, können wir auf einfache Weise die Parameter ausgeben, die wir für jeden unserer Dienste festlegen müssen. Der Name des Skripts selbst (die letzte Komponente des Pfads bis zum Doppelpunkt) ist ebenfalls bemerkenswert, da er den tatsächlichen Namen angibt, den FreeBSD für den Dienst verwendet.

Um diese Dienste zu aktivieren, bearbeiten wir die Datei "+ / etc / rc.conf +" mit sudo-Berechtigungen:

sudo vi /etc/rc.conf

Im Inneren fügen wir für jeden Dienst, den wir starten möchten, eine Zeile hinzu. Wir können den gefundenen Parameter "+ rcvar +" für jeden Dienst verwenden und auf "YES" setzen, um jeden einzelnen zu aktivieren:

mysql_enable="YES"
nginx_enable="YES"
php_fpm_enable="YES"

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

PHP konfigurieren

Als nächstes konfigurieren wir unseren PHP-FPM-Dienst, der für die Verarbeitung von PHP-Anfragen verantwortlich ist, die von unserem Webserver gesendet werden.

Wechseln Sie zunächst in das Verzeichnis "+ / usr / local / etc +", in dem die Konfigurationsdateien für unsere optionalen Programme gespeichert sind:

cd /usr/local/etc

Es gibt eine Reihe von PHP-Konfigurationsdateien in diesem Verzeichnis, die geändert werden sollen. Wir werden mit der PHP-FPM-Konfigurationsdatei selbst beginnen. Öffne dies mit + sudo + Privilegien:

sudo vi php-fpm.conf

Im Inneren möchten wir einige verschiedene Optionen anpassen. Zunächst möchten wir PHP-FPM so konfigurieren, dass ein Unix-Socket anstelle eines Netzwerkports für die Kommunikation verwendet wird. Dies ist sicherer für Dienste, die innerhalb eines einzelnen Servers kommunizieren.

Suchen Sie die Zeile, die so aussieht:

listen = 127.0.0.1:9000

Ändern Sie dies, um einen Socket im Verzeichnis + / var / run + zu verwenden:

listen =

Als Nächstes konfigurieren wir den Eigentümer-, Gruppen- und Berechtigungssatz des zu erstellenden Sockets. Es gibt eine auskommentierte Gruppe von Optionen, die diese Konfiguration wie folgt handhaben:

;listen.owner = www
;listen.group = www
;listen.mode = 0660

Aktivieren Sie diese, indem Sie die Kommentarmarkierung am Anfang entfernen:

listen.owner = www
listen.group = www
listen.mode = 0660

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Als nächstes müssen wir eine "+ php.ini" -Datei erstellen, die das allgemeine Verhalten von PHP konfiguriert. Es wurden zwei Beispieldateien hinzugefügt, die wir in die von PHP gelesene Datei "+ php.ini" kopieren können.

Die Datei + php.ini-production wird näher an dem sein, was wir brauchen, also werden wir diese verwenden. Kopieren Sie die Produktionsversion in die Datei, auf die PHP prüft:

sudo cp php.ini-production php.ini

Öffnen Sie die Datei zum Bearbeiten mit den Rechten + sudo +:

sudo vi php.ini

Im Inneren müssen wir einen Abschnitt finden, der das Verhalten von + cgi.fix_pathinfo + konfiguriert. Es wird auskommentiert und standardmäßig auf "1" gesetzt. Wir müssen dies auskommentieren und auf "0" setzen. Dadurch wird verhindert, dass PHP versucht, Teile des Pfads auszuführen, wenn die an process übergebene Datei nicht gefunden wird. Dies könnte von böswilligen Benutzern verwendet werden, um beliebigen Code auszuführen, wenn wir dieses Verhalten nicht verhindern.

Kommentieren Sie die Zeile "+ cig.fix_pathinfo +" aus und setzen Sie sie auf "0":

cgi.fix_pathinfo=0

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Nachdem wir PHP-FPM vollständig konfiguriert haben, können wir den Dienst starten, indem wir Folgendes eingeben:

sudo service php-fpm start

Jetzt können wir mit der Konfiguration unserer MySQL-Instanz fortfahren.

Konfigurieren Sie MySQL

Um mit der Konfiguration von MySQL zu beginnen, müssen wir den MySQL-Dienst starten:

sudo service mysql-server start

Wenn Sie diesen Befehl zum ersten Mal ausführen, erstellt er die erforderliche Verzeichnisstruktur im Dateisystem und installiert die erforderlichen Datenbankdateien. Anschließend wird der MySQL-Serverprozess gestartet.

Nach dem Start des Dienstes müssen wir die Installation sichern. Dies kann durch ein Skript mit dem Namen "+ mysql_secure_installation " erreicht werden. Führen Sie dies mit ` sudo +` - Berechtigungen aus, um einige unsichere Standardeinstellungen zu sperren:

sudo mysql_secure_installation
. . .

Enter current password for root (enter for none):

Das Skript fragt Sie zunächst nach dem aktuellen Kennwort für das MySQL-Root-Konto. Da wir für diesen Benutzer noch kein Kennwort festgelegt haben, können wir diese Aufforderung durch Drücken der Eingabetaste umgehen.

Set root password? [Y/n]

Als nächstes werden Sie gefragt, ob Sie das Passwort des MySQL-Root-Kontos festlegen möchten. Drücken Sie “ENTER”, um diesen Vorschlag zu akzeptieren. Wählen und bestätigen Sie ein Administratorkennwort.

Das Skript wird dann mit zusätzlichen Vorschlägen fortfahren, die helfen, einige unsichere Bedingungen in der Standard-MySQL-Installation rückgängig zu machen. Drücken Sie einfach die EINGABETASTE, um alle vorgeschlagenen Aktionen abzuschließen.

Wir können den MySQL-Dienst neu starten, um sicherzustellen, dass unsere Instanz die Sicherheitsänderungen sofort implementiert:

sudo service mysql-server restart

Unsere MySQL-Instanz läuft jetzt so, wie wir es wollen, damit wir weitermachen können.

Konfigurieren Sie Nginx

Unsere nächste Aufgabe ist die Einrichtung von Nginx. Um zu beginnen, müssen wir den Webserver starten:

sudo service nginx start

Nun können wir mit der Konfiguration von Nginx beginnen, indem wir in das Verzeichnis "+ nginx " im Verzeichnis " / usr / local / etc +" gehen:

cd /usr/local/etc/nginx

Hier müssen wir die Hauptkonfigurationsdatei von Nginx mit + sudo + Privilegien öffnen:

sudo vi nginx.conf

Im Inneren können wir beginnen, Änderungen vorzunehmen, damit unsere Nginx-Instanz mit unseren anderen Komponenten zusammenarbeiten kann.

Zum Starten entfernen und ändern Sie die Anweisung "+ user " oben in der Datei. Wir benötigen den Webserver, um als " www +" - Benutzer zu fungieren, da unsere PHP-FPM-Instanz nach Folgendem sucht:

user www;

Wir sollten auch "+ worker_processes " auf die Anzahl der CPUs oder Kerne Ihres Systems setzen. (Um herauszufinden, über wie viele CPUs Ihr Server verfügt, geben Sie in der Befehlszeile " sysctl hw.ncpu +" ein.)

worker_processes ;

Als nächstes werden wir die Fehler-Ausführlichkeit und den Ort mit der Direktive + error_log + festlegen. Wir werden uns an einem Ort unter + / var / log / nginx / error.log + auf der Protokollebene + info + anmelden:

error_log ;

Im + http + Block richten wir auch ein Zugriffsprotokoll ein. Diese finden Sie unter + / var / log / nginx / access.log +:

access_log /var/log/nginx/access.log;

Im + server + Block müssen wir die Anweisung + server_name + ändern, um den Domainnamen oder die IP-Adresse unseres Servers zu verwenden. Wir können unseren Server auch dazu bringen, auf den Hostnamen "+ www +" zu antworten, indem wir diesen nach der Hauptdomäne hinzufügen:

server {
   listen          80;
   server_name      www.;

   . . .

Konfigurieren Sie die Direktiven + root und` + index` im Hauptblock + server +. Unser Dokumentenstamm wird "+ / usr / local / www / nginx " sein, und unsere Index-Direktive sollte versuchen, " index.php " -Dateien bereitzustellen, bevor auf " index.html" - oder "+ index.htm +" -Dateien zurückgegriffen wird.

Da wir diese Direktiven im Kontext "+ server " definiert haben, benötigen wir sie nicht im Block " location / ". In diesem Block konfigurieren wir stattdessen eine Anweisung ` try_files +`, um zu versuchen, Benutzeranforderungen als Datei und dann als Verzeichnis zu verarbeiten, bevor ein 404-Fehler auftritt:

server {

   . . .




   location / {

   }

   . . .

Schließlich müssen wir einen Location Block konfigurieren, der PHP-Dateien verarbeitet. Dieser Block passt zu jeder Anfrage, die mit "+ .php" endet. Es werden nur die Dateien selbst verarbeitet, und es wird ein 404-Fehler zurückgegeben, wenn die Datei nicht gefunden werden kann.

Wir werden den Socket verwenden, den wir zuvor in der Datei + php-fpm.conf + konfiguriert haben. Wir werden auch einige andere FastCGI-Proxy-Optionen konfigurieren, teilweise durch Einlesen von Parametern aus der Datei + fastcgi_params +. Wir müssen den Parameter + SCRIPT_FILENAME + explizit setzen, damit PHP weiß, welche Dateien ausgeführt werden sollen:

server {

   . . .

   location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass unix:/var/run/php-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $request_filename;
       include fastcgi_params;
   }

Insgesamt sollte die Datei mit entfernten Kommentaren ungefähr so ​​aussehen:

worker_processes  ;


events {
   worker_connections  1024;
}

http {
   include       mime.types;
   default_type  application/octet-stream;



   sendfile        on;
   keepalive_timeout  65;

   server {
       listen       80;
       server_name   www.;



       location / {

       }

       error_page      500 502 503 504  /50x.html;
       location = /50x.html {
           root /usr/local/www/nginx-dist;
       }









   }
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Jetzt müssen wir das Protokollverzeichnis und die Dateien erstellen, auf die wir in unserer Datei verwiesen haben. Erstellen Sie zunächst das Verzeichnis "+ / var / log / nginx":

sudo mkdir -p /var/log/nginx

Als Nächstes können wir die leeren Protokolldateien erstellen:

sudo touch /var/log/nginx/access.log
sudo touch /var/log/nginx/error.log

Jetzt können wir unseren Dokumentenstamm konfigurieren. Wir haben unser Root-Verzeichnis als "+ / usr / local / www / nginx " konfiguriert, aber derzeit ist dies ein symbolischer Link zum " / usr / local / www / nginx-dist +" -Verzeichnis, das von einem Paket aktualisiert werden könnte Betrieb in der Zukunft.

Wir sollten den Link zerstören und das nicht verknüpfte Verzeichnis erneut erstellen:

sudo rm /usr/local/www/nginx
sudo mkdir /usr/local/www/nginx

Da wir unseren Webserver noch testen müssen, können wir die Datei "+ index.html" in unser neues Webstammverzeichnis kopieren:

sudo cp /usr/local/www/nginx-dist/index.html /usr/local/www/nginx

Während wir hier sind, sollten wir auch eine temporäre "+ info.php " - Datei erstellen, mit der wir testen können, ob Nginx Anforderungen an PHP-FPM weiterleiten kann. Erstellen Sie die Datei im Dokumentstamm mit den Rechten " sudo +":

sudo vi /usr/local/www/nginx/info.php

Geben Sie in der Datei den folgenden Inhalt ein. Dadurch wird eine HTML-Seite mit Informationen zu Ihrer PHP-Konfiguration generiert:

<?php phpinfo(); ?>

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Wir sind jetzt bereit, Nginx neu zu starten, um die Vorteile unserer neuen Konfiguration zu nutzen. Testen Sie zunächst Ihre Konfigurationsdatei auf Syntaxfehler, indem Sie Folgendes eingeben:

sudo nginx -t

Wenn Ihre Konfigurationsdatei keine feststellbaren Syntaxfehler enthält, sollte Folgendes angezeigt werden:

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

Wenn der obige Befehl mit Fehlern zurückgegeben wird, öffnen Sie die Nginx-Konfigurationsdatei erneut an dem Ort, an dem der Fehler gefunden wurde, und versuchen Sie, das Problem zu beheben.

Wenn Ihre Konfiguration korrekt ausgecheckt ist, können wir Nginx neu starten:

sudo service nginx restart

Ergebnisse testen

Unser Webstack ist jetzt fertig. Wir müssen es nur noch testen.

Wechseln Sie in Ihrem Webbrowser zunächst zu Ihrem Basisdomänennamen oder zur IP-Adresse des Servers:

http://

Sie sollten sehen, dass der Inhalt der Datei "+ index.html" kopiert wird. Es wird ungefähr so ​​aussehen:

image: https: //assets.digitalocean.com/articles/freebsd_lemp/default_index.png [FreeBSD Nginx-Standardindex]

Dies zeigt an, dass Nginx aktiv ist und einfache HTML-Seiten bereitstellen kann.

Als nächstes sollten wir die von uns erstellte Datei "+ info.php" auschecken. Besuchen Sie in Ihrem Browser Ihren Domainnamen oder Ihre Server-IP-Adresse, gefolgt von "+ / info.php":

http:///info.php

Sie sollten eine generierte PHP-Informationsseite sehen, die ungefähr so ​​aussieht:

image: https: //assets.digitalocean.com/articles/freebsd lemp / phpinfo.png [FreeBSD phpinfo page]

Wenn Sie diese Seite sehen, haben Sie erfolgreich einen FEMP-Stack auf Ihrem FreeBSD-Server konfiguriert.

Nach dem Testen Ihrer Konfiguration empfiehlt es sich, die Datei "+ info.php +" aus Ihrem Dokumentenstamm zu entfernen, da sie vertrauliche Informationen über Ihre Installation preisgeben kann:

sudo rm /usr/local/www/nginx/info.php

Sie können diese Datei zu einem späteren Zeitpunkt jederzeit problemlos neu erstellen.

Fazit

Sie sollten jetzt einen voll funktionsfähigen Webserver mit Nginx haben, der dynamische PHP-Inhalte verarbeiten und MySQL zum Speichern von Daten verwenden kann. Diese Konfiguration kann als Basis für eine Vielzahl anderer Konfigurationen und Webanwendungen verwendet werden.