Raspberry Pi – Webserver (HTTP+PHP+MySQL)

Lighttpd webserver

Waarom Lighttpd en niet Apache?

Lighttpd is een asynchronous server. het gebruikt maar liefst 1 proces met een enkele sturing en blokkeert de I/O niet.
Apache is een proces-gebaseerde server, dat wil zeggen dat er voor elke nieuwe sturing een nieuw proces wordt aangemaakt en zo enorm veel capaciteit en geheugen opslokt.
Daarom is het beter om op de Raspberry Pi een lichte HTTP server te gebruiken zoals Lighttpd.
Installeer lighttpd met het commando: sudo apt-get install lighttpd

Lighttpd wordt nu automatisch gestart, als je nu naar het IP adres van de Raspberry Pi gaat, dan zie je de “placeholder” als staan, dit betekend dat je webserver als actief is en draait:

raspberry lighttpd webserver placeholder

De “document folder” oftewel de folder waarin website zich in bevind is: /var/www/html (oude installaties: /var/www/),om nu bestanden via FTP weg te schrijven in /var/www, moet je eerst de toegang goed zetten (behalve als je ingelogd bent met root), doe je met het commando: sudo chmod -R 777 /var/www (-R staat voor onderliggende folders)

Je kan ook eigenaarschap overnemen van de folder /var/www met het commando: sudo chown -R pi /var/www (waar Pi is de gebruikersnaam)

Gebruik van SUDO commando’s vanuit de webserver/PHP

De webserver “gebruiker” is “www-data” en kan standaard geen SUDO commando’s uitvoeren, dit kan bijvooorbeeld nodig zijn om een python script uit te voeren welke GPIO pinnen aanstuurt.

Daarvoor moet de gebruiker www-data toegevoegd worden aan de “sudo’ers lijst” in het bestand /etc/sudoers, voeg de volgende regel toe:

www-data ALL=(ALL) NOPASSWD: ALL

Via een script:

sudo bash -c "echo 'www-data ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"

PHP5

Installeer PHP5 met het commando: sudo apt-get install php5-common php5-cgi php5

Ps. de volgorde is belangrijk, als je php5 voor php-cgi zet, dan wordt ook Apache webserver geïnstalleerd en dat willen we niet naast lighttpd.

Om nu PHP scripts te gebruiken met Lighttpd moet je fast-cgi aan zetten, dit doe je met het commando: sudo lighty-enable-mod fastcgi-php

Dan nog even de server herstarten om wijzigingen van kracht te doen laten komen met het commando: sudo /etc/init.d/lighttpd force-reload

PHP vanaf Linux BASH:
Vanuit het Linux BASH commando kun je nog geen PHP (executable) aanroepen,, jem moet hiervoor de CLI (Command Line Interface) installeren, dit doe je met het commando: sudo apt-get install php5-cli

Je kan de CLI meteen testen met het commando:  php -r 'print("Hallo Wereld\n");'
(in de BASH staat dan: Hallo Wereld)

MySQL database

Installeer MySQL met het volgende commando: sudo apt-get install mysql-server php5-mysql

Tijdens de installatie zal om het MySQL root wachtwoord worden gevraagd om deze in te stellen:

mysql password screen

MySQL instellen

Verbindingen van buitenaf:
Standaard accepteert de MySQL server zoals nu geïnstalleerd op de Raspberry Pi geen connecties van buitenaf (niet van “localhost”), om een MySQL gebruiker in te stellen en te verbinden van buitenaf, volg deze stappen:

1) Bewerk het MySQL configuratiebestand /etc/mysql/my.cnf met het volgende commando: sudo nano /etc/mysql/my.cnf en zoek de regel:

bind-address            = 127.0.0.1

Zet hier een hekje voor (comment out), zodat iedereen verbinding kan maken met de MySQL server.

raspberry mysql config

Druk nu op CTRL+O (writeout) en dan op ENTER op het bestand op te slaan, dan vervolgens CTRL+X om nano af te sluiten.

2) Nu moeten we nog toestemming geven voor de desbetreffende gebruiker, je moet hiervoor MySQL via de BASH starten doormiddel van: sudo mysql -uroot -p[wachtwoord]

en voer het volgende commando uit (in MySQL): GRANT ALL ON *.* TO ‘[gebruiker]’@’%.%.%.%’ IDENTIFIED BY ‘[wachtwoord]’;

daarna gevolgd door: Exit

raspberry mysql user config

Hierna de MySQL server opnieuw opstarten om wijzigingen van kracht te doen laten komen met het commando: sudo /etc/init.d/mysql restart

Dan de server herstarten om wijzigingen van kracht te doen laten komen met het commando: sudo /etc/init.d/lighttpd force-reload

PHP testen

Nu is het tijd om php te testen, maak de website folder leeg: /var/www/html/ (oude installaties: /var/www/), maak een bestand index.php aan met het commando: sudo nano /var/www/html/index.php, en zet daarin:  <?php phpinfo();?>

Druk nu op CTRL+O (writeout) en dan op ENTER op het bestand op te slaan, dan vervolgens CTRL+X om nano af te sluiten.

Ga nu naar je website, als alles goed is gegaan zie je het PHP infoblad:

raspberry php info

PHP configratiebestand:

Waar het PHP configuratiebestand staat en welke geladen wordt, kun je achterhalen met het commando: php –ini (dubbele streepjes)

PHP instellen

In de meeste gevallen wordt het PHP configuratiebestand /etc/php5/cli/php.ini geladen, deze kun je bewerken met het commando: sudo nano /etc/php5/cli/php.ini

max_execution_time = 300
Dit is voor de “timeout” (maximale looptijd) cvan een PHP script (via een browser) in seconden (standaard 30 sec)

post_max_size = 100M
Dit is voor het “posten” van grotere bestanden (dan standaard 8MB)

upload_max_filesize = 100M
Dit is voor het uploaden van grotere bestanden (dan standaard 2MB), ook handing voor het importeren van grotere MySQL databases

date.timezone = “Europe/Amsterdam”
Heel belangrijk om dit goed in te stellen, PHP trekt namelijk niets aan van je Raspberry Pi instellingen.

Druk nu op CTRL+O (writeout) en dan op ENTER op het bestand op te slaan, dan vervolgens CTRL+X om nano af te sluiten.
Dan nog even de lighttpd server herstarten om wijzigingen van kracht te doen laten komen met het commando: sudo /etc/init.d/lighttpd restart

PHP tijd testen:
Je kan de datum en tijd van PHP testen door een PHP bestand aan te maken met deze inhoud en dit uit te voeren via de browser:

<?php print "De datum en tijd is: " . date("y-m-d H:i:s", time()); ?>