[Tutorial] CentOS 6 64-Bit mit NGiNX und PHP-FPM (5.3) auf einem vServer

  • Nunja viele kennen das, ein vServer hat immer relativ wenig Speicher / CPU und deshalb möchte man eine optimale Konfiguration eines Webservers.
    Hier will ich weiter erläutern wie dies mit einem vServer von netcup genau geht. Als Image benutze ich hier CentOS 6 64-Bit und ich benutze ausschließlich Pakete die von irgendeiner Repository bereitgestellt werden, so spart man sich Compilerzeit und muss sich auch nicht mit den Configs rumschlage, sollte jemand jedoch spezielle Anforderungen haben, bezüglich Ruby on Rails etc. kann er mir gerne eine private Message schreiben und ich werde das gerne mit ihm durchsprechen.


    1. Schritt - NGiNX installieren


    Dieser Schritt sollte nicht allzu schwer sein und auf nginx news kriegt man für CentOS 6 auch eine dementsprechende Repository.

    Zuerst jedoch sollte man ältere PHP Versionen bzw. Apache deinstallieren, auch MySQL sollte man deinstallieren, aufgrund von Problemen mit aktueller php-mysql, wenn man nicht von einem Plain System ausgeht:

    Code
    1. yum remove httpd* php* mysql*


    Jetzt einfach über die NGiNX Repository hinzufügen:

    Code
    1. rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm



    Jetzt müssen wir aber in einem getrennten Schritt NGiNX noch von der Repository installieren:

    Code
    1. yum install nginx -y


    Über ein sog. 'yum update' kann man nun auch immer den NGiNX upgraden, wenn eine neue Version bereitsteht.


    Um NGiNX mit dem Systemstart zu starten muss man übrigens noch folgendes Kommando in die Konsole eintippen:

    Code
    1. chkconfig --level 345 nginx on



    2. Zusätzliche Repositorys aktivieren


    Um PHP auf einfachste Weise zu beziehen brauchen wir noch 2 weitere Repositorys. Dabei benutze ich immer die 'Remi und EPEL Repository'.

    EPEL brauchen wir, weil REMI von EPEL abhängt und daraus Pakete bezieht. Auf REMI ist dabei PHP 5.3 mit dem aktuellsten update vorhanden.


    Um diese beiden Repositorys zu installieren müssen wir folgendes tun (beachte bitte Reihenfolge einhalten):

    Code
    1. yum install yum-priorities -y
    2. rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
    3. rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm



    3. PHP installieren


    Dieser Schritt ist relativ einfach, um PHP Core zu installieren einfach:


    Code
    1. yum --enablerepo=remi install php php-fpm



    Dabei ist zu beachten, dass die 'remi' Repository nicht automatisch aktiv ist, sondern mit '--enablerepo=remi' jedesmal aktiviert werden muss. Um dies zu ändern müsste man unter:

    Code
    1. /etc/yum.repos.d/remi.repo


    Den Paramter 'enabled=0' auf '1' stellen:

    Code
    1. [remi]
    2. name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
    3. #baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
    4. mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
    5. enabled=1
    6. gpgcheck=1
    7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
    8. failovermethod=priority

    So sollte das dann aussehen.


    Um PHP-FPM zu starten, wenn das System bootet einfach

    Code
    1. chkconfig --level 345 php-fpm on

    in die Konsole eingeben und dann wird es bei jedem Systemstart mitgestartet.


    Wenn man jetzt noch weitere Pakete mit PHP wünscht bzw. MySQL installieren will, muss man folgendes Kommando eingeben:

    Code
    1. yum --enablerepo=remi install php-gd php-mysql php-mbstring php-xml php-mcrypt mysql-server mysql-client


    3. Konfiguration von php-fpm


    Jetzt kommen wir zu einem wesentlich spannenderen Teil, die Konfiguration von php-fpm.

    Zuerst müssen wir dazu ein User anlegen:

    Code
    1. useradd www-data



    Nun müssen wir uns festlegen, in welchem Ordner wir genau hosten wollen, ich habe hier den Standart Ordner '/var/www' benutzt:

    Code
    1. mkdir -p /var/wwwchown www-data.www-data -R /var/wwwchmod 755 /var/wwwusermod -d /var/www www-data



    Jetzt muss man noch die Konfiguration von php-fpm angepasst werden. Dazu einfach die Datei öffnen:

    Code
    1. vi /etc/php-fpm.d/www.conf


    danach schreiben wir in diese Datei folgendes:

    Code
    1. [www]
    2. listen = /var/run/php-fpm.sock
    3. ;listen.allowed_clients = 127.0.0.1listen.owner = www-datalisten.group = www-datalisten.mode = 0777
    4. user = www-datagroup = www-data
    5. pm = dynamicpm.max_children = 2pm.start_servers = 1pm.min_spare_servers = 1pm.max_spare_servers = 1
    6. chdir = /
    7. php_admin_value[open_basedir] = /var/www:/tmpphp_admin_value[disable_functions] = dl,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source



    Nun sollte man mit

    Code
    1. /etc/init.d/php-fpm start


    einen erfolgreichen start von php-fpm verbuchen können.


    4. Konfiguration von NGiNX


    Zuerst bearbeiten wir die nginx.conf:

    Code
    1. vi /etc/nginx/nginx.conf



    Diese sollte bei euch dann in etwas so aussehen:




    Um jetzt VHosts anlegen zu können, muss man noch das Verzeichnis sites-enabled erstellen:

    Code
    1. mkdir -p /etc/nginx/sites-enabled



    Und jetzt zu guter letzt noch eine VHost Konfiguration unter sites-enabled erstellen:

    Code
    1. vi /etc/nginx/sites-enabled/default


    Diese sollte am Ende bei euch in etwas so aussehen:

    Code
    1. server { listen 80 default; server_name _;
    2. root /var/www;
    3. location / { index index.html index.htm index.php; }
    4. # pass the PHP scripts to FastCGI server listening on /var/run/php-fpm.sock # location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include /etc/nginx/fastcgi_params; }
    5. }



    Und schon sollte das ganze auch funktionieren.

    Hierzu einfach den NGiNX starten bzw. neustarten, am besten auch gleich php-fpm neustarten:

    Code
    1. /etc/init.d/php-fpm restart/etc/init.d/nginx/restart



    Viel Spaß mit eurem neuen VServer und NGiNX und php-fpm


    5. Noch Fragen?


    Wenn Ihr nun noch Fragen haben solltet zu einzelnen Paramter oder Fehler in meiner Anleitung gefunden habt, so bitte ich euch doch mir diese Mitzuteilen.


    Mit freundlichen Grüßen

    Fruchtsalat