Raspberry Pi 2 amb FreeBSD 11-CURRENT com a servidor web amb Nginx i PHP-FPM

Hacker

Nginx a FreeBSD

En aquest xicotet manual vaig a explicar els passos a seguir per a tenir un servidor web Nginx a la Raspberry Pi corrent el sistema operatiu FreeBSD. El nginx ha de servir distints projectes webs amb distints dominis que continguen aplicacions PHP, on podrem instal·lar les nostres aplicacions i tenir-les sempre online i sense consumir molta energia ja que la tindrem a la nostra Raspberry Pi. Durant els pròxims dies aniré medint el rendiment de la Raspberry Pi i mostraré les dades.

En aquest article i també en aquest article ja vaig explicar què és la Raspberry Pi, com obtenir el sistema operatiu lliure FreeBSD i com instal·lar-ho. Ara, continuem a partir d'eixe punt i anem a instal·lar i configurar el nostre servidor web.

Primer de tot, suposem que tenim tots els ports i paquets actualitzats, i anem ara a instal·lar Nginx:


# pkg install nginx

Una vegada instal·lat, afegirem al fitxer /etc/rc.conf la següent línia per a que sempre tinga el servei web arrancat:


nginx_enable="YES"

Si el volem arrancar ara, podem fer:


service nginx start

I bé, ja tenim corrent i funcionant Nginx, que per defecte ens mostra la següent pàgina:

Nginx a FreeBSD

La configuració que a continuació aplicarem al Nginx és, bàsicament, dir-li el usuari www, dir-li la ruta del meu projecte número 1 (/var/www/drupal1) i del meu projecte número 2 (/var/www/drupal2), i finalment configurar el PHP. Em queda així:


user www www;
worker_processes 2;
error_log /var/log/nginx/error.log crit;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /usr/local/etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
server_tokens off;
sendfile on;
client_max_body_size 200m;
client_body_buffer_size 1m;
keepalive_timeout 1;
port_in_redirect off;

gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6].(?!.*SV1)";

fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;

include /usr/local/etc/nginx/conf.d/*.conf;
}

Evidentment, hem de crear els directoris dels nostres projectes webs. Per defecte, a FreeBSD els he vist a /usr/local/www però m'agrada més tenir-ho a /var com sempre he tingut a OpenBSD:


# mkdir /var/www

I ahí deixarem les nostres webs "drupal1" i la "drupal2". I a continuació, li donem permissos al usuari 'www' i al grup 'www':


# chown -R www:www /var/www
# chmod -R 755 /var/www

Per a configurar el Nginx en mode multisite (per anomenar-ho d'alguna manera) he creat el directori conf.d i dins he deixat les configuracions. Per exemple, aquesta és la configuració del ./conf/drupal1.conf:


server {
listen 80;
server_name drupal1.com;
server_name_in_redirect off;
root /var/www/drupal1;
location ~* ^.+\.(ico|js|gif|jpg|jpeg|png|bmp)$ {
expires 30d;
}
location / {
index index.php;
}

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;
}

location ~ /\.ht {
deny all;
}
}

I així farem amb tots els projectes webs que vullguem servir des del nostre servidor web Nginx, al meu cas, ara de moment nomès n'estic usant dos projectes web.

Val, anem bé, a continuació cal enllestir també el llenguatge PHP com a llenguatge dinàmic de les nostres aplicacions web:


# pkg install php55-zlib-5.5.30 php55-zip-5.5.30 php55-5.5.30 mod_php55-5.5.30 php55-json-5.5.30 php55-pdo_mysql-5.5.30 php55-mysql-5.5.30 php55-mysqli-5.5.30

A continuació, afegirem al fitxer /etc/rc.conf la següent línia per a que sempre tinga el servei php-fpm arrancat:


php_fpm_enable="YES"

Editem el fitxer /usr/local/etc/php-fpm.conf i, a la línia on diu:


listen = 127.0.0.1:9000

Li haurem de dir que volem que use les sock de Unix:


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

i també, en el mateix fitxer, descomentarem les tres línies que diuen:


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

A continuació, deixem el php.ini per a començar a servir webs:


cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

El únic canvi que farem en aquest fitxer php.inci és descomentar el cgi.fix_pathinfo i li ficarem el valor 0 així:


cgi.fix_pathinfo=0

I bé, ja podem reiniciar Nginx i obtindrem distintes pàgines segons els dominis que estiguem empleant. Ara ja pots escriure www.DOMINI1.com per a veure les webs del teu domini 1 o escriure www.DOMINI2.com per al teu domini 2. A partir d'ara, podem configurar ja el nostre Drupal, SPIP, Wordpress, Pmwiki o qualsevol altre CMS o aplicació pròpia PHP.

I com ja he dit abans, durant els pròxims dies aniré medint el rendiment de la Raspberry Pi 2 com a servidor de webs dinàmiques amb Nginx, perquè tot pinta a que aquesta maquineta pot servir bé a certs tipus de projectes web que no, necessàriament, carreguen la cpu o que tinguen massa nombre d'usuaris.

Espere que t'agrade i et servisca aquest article, i que t'animes a fer servir programari lliure BSD, perquè difondre el Programari Lliure és difondre la Llibertat.

Alguns enllaços:

La web oficial de Raspberry: http://www.raspberrypi.org
La web oficial de FreeBSD: http://www.freebsd.org
Fòrums del projecte FreeBSD: http://forums.freebsd.org
La web oficial de Nginx: http://nginx.org

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.