[Linux] [RPI] LEMP Stack (Nginx + PHP-FastCGI + MySQL + XCache)

Naxiz

Android freak
#1
In deze tutorial ga ik uitleggen hoe je een snelle webserver kan installeren op je Raspberry Pi. Voor de tests is een Raspberry Pi model B revision 2 gebruikt (met Raspbian en data op een externe HD, de SD-kaart wordt alleen gebruikt voor boot).

Natuurlijk kan je deze tutorial ook gebruiken om een webserver te installeren op een gewone versie van Debian of Ubuntu.

Na veel testen ben ik voor de combinatie van Nginx, PHP-FastCGI, MySQL (MyISAM) en XCache gegaan omdat dit de snelste combinatie is. Ook heb ik het geprobeerd met Apache2, maar de laadtijd van Apache2 met een schone Wordpress installatie was ongeveer 4,5 seconden tegenover een kleine 1,2 seconden voor Nginx met een schone Wordpress installatie.

Alle tests met de Raspberry Pi zijn mogelijk gemaakt door Silver Will aka Wilko343!

[INFO]De installatie van Apache2 was wel zonder XCache, maar zonder XCache was Nginx ook al een stuk sneller.[/INFO]
[WARNING]Ik ga er vanuit dat je een schone installatie van Raspbian hebt. Heb je dit niet en heb je al een andere webserver draaien, verwijder deze dan eerst![/WARNING]
  1. Log als root in op je Raspberry Pi met bijvoorbeeld Putty (de normale terminal kan natuurlijk ook).
    Als je als root bent ingelogd zie je een # staan (hieronder rood aangegeven). Zie je een $ staan, typ dan su en voer je wachtwoord in.
    Code:
    Linux home 3.2.0-4-686-pae #1 SMP Debian 3.2.39-2 i686
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    Last login: Sun Mar 24 18:40:19 2013 from 192.168.1.172
    root@home:~<span style="color: #FF0000;">#</span> _
  2. Update eerst je hele systeem:
    Code:
    apt-get update && apt-get upgrade
  3. Installeer nu alle pakketten die je nodig hebt:
    Code:
    apt-get install nginx php5-cgi php5-mysql php5-xcache mysql-server mysql-client psmisc
    LET OP! Zorg ervoor dat je bij het invullen van het MySQL root wachtwoord een sterk wachtwoord gebruikt! Met dit wachtwoord heb je toegang tot alle MySQL-databases op je Raspberry Pi!
  4. Nu maken we een script om PHP automatisch te laten starten. Open eerst de editor:
    Code:
    nano /etc/init.d/php-cgi
  5. Plak nu de volgende code in de editor (in Putty kan je gekopieerde tekst plakken door met rechts in het venster te klikken):
    Code:
    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          php-fcgi
    # Required-Start:    $nginx
    # Required-Stop:     $nginx
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts php over fcgi
    # Description:       starts php over fcgi
    ### END INIT INFO
     
    (( EUID )) && echo ‘You need to have root priviliges.’ && exit 1
    BIND=127.0.0.1:9000
    USER=www-data
    PHP_FCGI_CHILDREN=15
    PHP_FCGI_MAX_REQUESTS=1000
     
    PHP_CGI=/usr/bin/php-cgi
    PHP_CGI_NAME=`basename $PHP_CGI`
    PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"
    RETVAL=0
     
    start() {
          echo -n "Starting PHP-FastCGI: "
          start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
          RETVAL=$?
          echo "$PHP_CGI_NAME."
    }
    stop() {
          echo -n "Stopping PHP-FastCGI: "
          killall -q -w -u $USER $PHP_CGI
          RETVAL=$?
          echo "$PHP_CGI_NAME."
    }
     
    case "$1" in
        start)
          start
      ;;
        stop)
          stop
      ;;
        restart)
          stop
          start
      ;;
        *)
          echo "Usage: php-cgi {start|stop|restart}"
          exit 1
      ;;
    esac
    exit $RETVAL
  6. Sla het bestand op door op CTRL + X te drukken. Er wordt om een bevestiging gevraagd: druk op Y.
  7. Voeg nu de Executable Bit toe aan het bestand zodat het als programma kan worden uitgevoerd:
    Code:
    chmod +x /etc/init.d/php-cgi
  8. Registreer het script nu zodat PHP automatisch gestart wordt na een reboot:
    Code:
    update-rc.d php-cgi defaults
  9. Nu gaan we de webserver, Nginx, configureren. Maak eerst het bestand leeg en open het daarna in de editor:
    Code:
    touch /etc/nginx/sites-available/default
    nano /etc/nginx/sites-available/default
  10. Plak de volgende configuratie in de editor:
    Code:
    server {
        listen 80;
        listen [::]:80 default ipv6only=on;
    
        <span style="color: red;">server_name example.com;</span>
    
        access_log /var/log/nginx/localhost.access.log;
    
        root /var/www;
    
        location / {
            index index.php index.html index.htm;
        }
    
        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    LET OP! Vervang example.com door je eigen domeinnaam. Heb je die nog niet, plaats dan de volgende regel onder de servername:
    Code:
    server_name_in_redirect off;
  11. Sla het bestand op.
  12. Er moet nog een regel toegevoegd worden aan de configuratie van PHP:
    Code:
    echo 'fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/fastcgi_params
  13. Maak nu een map aan waar alle bestanden voor de webserver in moeten:
    Code:
    mkdir /var/www
  14. Open nu de configuratie van XCache in de editor:
    Code:
    nano /etc/php5/conf.d/20-xcache.ini
  15. Haal de ; weg bij xcache.admin.user en xcache.admin.pass en plaats een gebruikersnaam en wachtwoord erachter.

    LET OP! Het wachtwoord moet in MD5-formaat zijn. Een converter van normale tekst naar MD5 kan je hier vinden.

    De gebruikersnaam en het wachtwoord moeten tussen aanhalingstekens geplaatst worden (VOORBEELD):
    Code:
    xcache.admin.user = "gebruiker"
    xcache.admin.pass = "701f33b8d1366cde9cb3822256a62c01"
  16. Sla het bestand op.
  17. Maak nu een symlink naar de administratiepagina van XCache zodat je deze via je browser kan bereiken:
    Code:
    ln -s /usr/share/xcache/admin /var/www/xcache
  18. Herstart Nginx en PHP:
    Code:
    /etc/init.d/nginx restart
    /etc/init.d/php-cgi restart

De webserver is nu genstalleerd en klaar voor gebruik.

  • Alle bestanden voor je webserver plaats je in de map /var/www.
  • Je kan de administratiepagina van XCache bereiken via http://domein.tld/xcache

Ik ga nog 2 tutorials maken die op deze tutorial aansluiten:
  • phpMyAdmin installeren en configureren
  • WordPress installeren en configureren
Zodra deze af zijn plaats ik de links hier.

Heb je een vraag of opmerking, stel deze dan hier.

Het kan zijn dat iets niet helemaal klopt, als je dit opmerkt zou ik het fijn vinden als je dit meldt zodat het aangepast kan worden.

Veel plezier met je webserver!
 
Laatst bewerkt door een moderator:
Bovenaan Onderaan