Att installera PHP på Raspberry Pi är ett måste om du ska syssla med seriös webbutveckling. Här installerar vi php-tolken och php-fpm som är en fastcgi process manager som fungerar som kopplingen mellan nginx (eller annan webbserver-programvara) och php. Php5-mysql behövs t.ex. om du ska installera WordPress på din server då php måste snacka med databasen. Du måste redan ha installerat Nginx innan du följer denna guiden.

sudo apt-get install php5 php5-fpm php5-mysql
[ENTER]

php-fpm körs som en separat server och nginx kommunicerar med den över en socket. Därför sker all php-tolkning helt utanför webbservern. Detta gör att APC också är fullt möjligt att koppla på.

Konfigurationsfilerna för php-fpm ligger här:

/etc/php5/fpm

Gå in i mappen pool.d

En pool är ett gäng php processer som körs med samma användare/grupp. Behöver du ha olika rättigheter för php-körning för olika webbsidor så skapar du nya pooler här. I dessa pooler ställer du också in vilken användare som ska köra php-applikationen.

Alternativ 1 – Editera standardpoolen www.conf

Nu väljer vi bara att editera standardpoolen www.conf.

sudo nano www.conf

Leta upp raden som börjar med listen och spara undan den sökvägen till socketen som php-fpm lyssnar på. Nu ska vi se till att det är den som används av nginx.

listen = /var/run/php5-fpm.sock

Gå till /etc/nginx/sites-available och editera den konfigurationsfil du skapat för din webbsida.

Det finns redan en kodsnutt som är bortkommenterad för php-fpm. Avkommentera detta stycke så det ser ut som nedan:

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
#       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

#       # With php5-cgi alone:
#       fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
}

Alternativ 2 – Konfigurera en pool för specifik app med specifik användare

Nu ska vi skapa en PHP-konfiguration för en viss webbsida. Detta sätt är att föredra om man ska ha flera webbsidor på sin webbserver och vill kunna ge dem lite olika inställningar. Vi börjar med att flytta undan standardkonfigurationen.

cd /etc/php5/fpm/pool.d/
mv www.conf ../

Sedan skapar vi en konfiguration för sajten med valfri textredigerare.

sudo nano exempel.se.conf

Lägg in följande text och spara denna fil:

[exempel.se]
listen = 127.0.0.1:9000
listen.backlog = -1
listen.owner = exempel_se
listen.group = exempel_se
listen.mode = 0666
user = exempel_se
group = exempel_se
pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 5
pm.max_requests = 50
request_slowlog_timeout = 60s
slowlog = /var/log/php-fpm.log.slow

De värden som anges i PHP-konfigurationen bör anpassas beroende på hur mycket minne man vill använda för PHP. Med denna konfiguration används ca 1 GB RAM-minne (i kombination med APC-cachen).

Man kan också välja att köra med ”listen = /var/run/php5-fpm.sock” beroende på vilken socket man valt i nginx-konfigurationen för sajten. I alternativ 1 ovan så visade vi hur man redigerar så att Nginx använder den socketen.

Skapa en index.php fil där du valt att lägga din webbsida och lägg in följande php-script:

<?php

phpinfo();

?>

Starta om php-fpm och besök sedan adressen till din skapade php-fil.

sudo service php5-fpm restart

Min sida ligger t.ex. här:

http://www.systemutveckling.info/index.php

Du kan nu också välja att lägga till så att index.php-filer läses automatiskt utan att du behöver specificera filen. Detta gör du också i din konfigurationsfil för webbsidan under /etc/nginx/sites-available.

index index.html index.htm index.php;

Lägg den först om du vill att den ska välja php före html och htm.

Starta om nginx för att förändringar i dina konfigurationsfiler ska slå igenom.

sudo service nginx restart

Php-fpm, Nginx och databas kommer alltid starta upp som tjänster automatiskt varje gång din Raspberry Pi startar om.

Lite optimering för att få t.ex. WordPress att fungera ganska bra:

Öppna filen /etc/php5/fpm/php.ini med valfri textredigerare och uppdatera följande värden:

memory_limit = 128M
max_execution_time = 120
max_input_time = 300
post_max_size = 25M
upload_max_filesize = 25M

Lägg även in detta i slutet av filen:

cgi.fix_pathinfo = 0

Du kan nu gå vidare och sätta upp cachning för din webbserver så dina sidor laddar snabbare. PHP-cachningen APC är väldigt lätt att konfigurera.