En aquest article t'explique els passos que he fet per a instal·lar FreeBSD 15, Nginx, PHP 8.4 MariaDB a la Raspberry Pi 4.
Tinc una Raspberry Pi 4 remota que em serveix de servidor connectat a la xarxa mitjançant un túnel Cloudflare amb dos dominis: alcosseb.re i benicass.im, on tinc obert el port 443 per al protocol https. I també, internament des d'un ordinador meu, puc accedir a la Raspberry Pi mitjançant un SSH proxificat que accedeix dins del túnel i arriba al port 22 de la Raspberry Pi. Estic super encantat amb aquesta instal·lació de túnel que ofereix Cloudflare i que em fa de tallafocs i WAF i jo em puc oblidar de canvi d'IPs dinàmiques o dels certificats DV/SSL perquè tot el tràfic web passa per Cloudflare directament.
Ara vaig a muntar el següent:
Internet > HTTPS (443) > Cloudflare > Túnel > router 4G > HTTP (80) > Raspberry Pi > Drupal 11
Anem mans a l'obra.
Instal·lem el sistema operatiu FreeBSD 15
Començarem instal·lant el sistema FreeBSD 15 per a arquitectures ARM, com la Raspberry Pi 4, des de la web oficial del projecte https://wiki.freebsd.org/arm i anirem a l'apartat de Raspberry:
Des d'ací, m'he descarregat la última versió 15 de FreeBSD, i descarregarem el fitxer https://download.freebsd.org/ftp/snapshots/arm64/aarch64/ISO-IMAGES/15.0/FreeBSD-15.0-STABLE-arm64-aarch64-RPI-20260101-785d429c2b93-281645.img.xz (que és la versió 15 per a l'arquitectura arm64-aarch64):
Descomprimirem la imatge amb:
xz -d FreeBSD-15.0-STABLE-arm64-aarch64-RPI-20260101-785d429c2b93-281645.img.xz
I ara cremem la imatge de FreeBSD 13.2 a la microSD. Jo faig servir OpenBSD i ho faig així:
doas dd if=./FreeBSD-15.0-STABLE-arm64-aarch64-RPI-20260101-785d429c2b93-281645.img \
of=/dev/rsd2c \
bs=32M \
status=progress
Primer accés a FreeBSD 15 en la Raspberry Pi 4 i instal·lació d'utilitats bàsiques
Una vegada tenim la imatge en la microSD iniciarem la Raspberry Pi 4, jo instal·lare les següents utilitats bàsiques que faig servir per a l'administració remota del servidor:
pkg install doas htop wget curl screen emacs tmux nmap
Editem /usr/local/etc/doas.conf i afegim:
permit nopass EL_NOSTRE_USUARI
Configure l'hora automàtica per a que sempre estiga sincronitzada correctament quan iniciem la Raspberry:
doas sysrc ntpd_enable="YES"
doas service ntpd start
La primera vegada, forcem una sincronització de l'hora immediata:
doas ntpd -gq
I ja tenim la Raspberry Pi amb FreeBSD 15 preparat per a treballar com a servidor. Ara volia muntar un Drupal 11 per a poder crear projectes dinàmics, i en aquesta guia et mostre com ho he instal·lat tots els requisits necessaris per a tenir Drupal 11 funcionant.
Insta·lem Nginx
Comencem instal·lant el meu servidor web favorit:
$ doas pkg install nginx
Marcarem l'arranc automàtic quan iniciem la Raspberry Pi 4 afegint a /etc/rc.conf el següent:
echo 'nginx_enable="YES"' >> /etc/rc.conf
I arranquem, aturem o reiniciem el servei sempre que ho necessitem amb:
$ doas service nginx start|stop|restart
Ja tenim la web funcionant ;-) De moment amb HTML:
Instal·lem PHP 8.4
Ara anem a instal·lar els paquets de PHP 8.4 necessaris per a Drupal 11 de la següent manera:
$ doas pkg install php84 php84-curl php84-gd php84-opcache php84-pdo_mysql php84-xml php84-zip php84-tokenizer php84-dom php84-filter php84-session php84-simplexml php84-mbstring
Marcarem l'arranc automàtic de PHP 8.4 quan iniciem la Raspberry Pi 4 afegint a /etc/rc.conf el següent:
php_fpm_enable="YES";
I arrancarem, aturarem o reiniciarem PHP 8.4 sempre que vullguem amb:
joan@esbri:~ $ doas service php_fpm start
Performing sanity check on php-fpm configuration:
[04-Jan-2026 11:36:26] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Starting php_fpm.
Ara, per tal de que PHP 8.4 s'execute correctament a les pàgines amb extensió .php editarem el fitxer /usr/local/etc/php-fpm.d/www.conf i buscarem la línia on diu:
listen = 127.0.0.1:9000
i ho reemplaçarem per:
listen = /var/run/php84-fpm.sock
Descomentem les 3 línies:
listen.owner = www
listen.group = www
listen.mode = 0660
Finalment desarem el fitxer i reiniciarem el servei php_fpm amb:
# service php_fpm restart
Performing sanity check on php-fpm configuration:
[07-Apr-2023 06:28:42] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
#
Stopping php_fpm.
Waiting for PIDS: 1540.
Performing sanity check on php-fpm configuration:
[07-Apr-2023 06:28:42] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
#
Starting php_fpm.
Configurarem el php.ini, mourem el fitxer /usr/local/etc/php.ini-production per /usr/local/etc/php.ini i reiniciarem php-fpm:
# doas mv /usr/local/etc/php.ini-production /usr/local/etc/php.ini
# doas service php_fpm restart
Performing sanity check on php-fpm configuration:
[04-Jan-2026 11:44:21] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Stopping php_fpm.
Waiting for PIDS: 10303.
Performing sanity check on php-fpm configuration:
[04-Jan-2026 11:44:22] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Starting php_fpm.
I ja podem veure que PHP 8.4 funciona perfectament, podem incloure la funció infophp(); en una pàgina php per a veure totes les variables i versions que tenim:
De moment he configurat només el fitxer de configuració d'Nginx i la configuració del lloc web del domini "alcosseb.re":
- Descarrega't ací el meu fitxer de configuració Nginx general /usr/local/etc/nginx/nginx.conf
- Descarrega't ací el meu fitxer Nginx del site /usr/local/etc/nginx/sites-enable/alcosseb.re
I bé, a partir d'ara ja podrem crear tots els llocs web (VirtualHosts en la terminologia del Apache Web Server) que vullguem afegint nous dominis o subdominis al directori ./sites-enabled de l'Nginx.
INSTAL·LACIÓ I CONFIGURACIÓ DE MARIADB
Instal·lem la última versió del servidor MariaDB amb:
$ doas pkg install mariadb118-server-11.8.5 mariadb118-client-11.8.5
Configurem l'arranc automàtic quan iniciem la Raspberry Pi 4 afegint a /etc/rc.conf:
mysql_enable="YES"
Iniciem el servei:
$ doas service mysql-server start
La primera vegada que anem a executar MariaDB necessitem executar aquesta ordre per a configurar la contrasenya de l'administrador, autoritzar-li o no l'àccès remot, esborrar l'usuari anònim de consulta i esborrar la base de dades test inicial que crea MariaDB:
$ doas mysql_secure_installation
I ens donarà el següent resultat:
# mysql_secure_installation
/usr/local/bin/mysql_secure_installation: Deprecated program name. It will be removed in a future release, use 'mariadb-secure-installation' instead
#
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
#
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
#
Enter current password for root (enter for none):
OK, successfully used password, moving on...
#
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
#
You already have your root account protected, so you can safely answer 'n'.
#
Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
... Success!
#
You already have your root account protected, so you can safely answer 'n'.
#
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
#
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
#
Remove anonymous users? [Y/n] Y
... Success!
#
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
#
Disallow root login remotely? [Y/n] Y
... Success!
#
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
#
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
#
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
#
Reload privilege tables now? [Y/n] Y
... Success!
#
Cleaning up...
#
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
#
Thanks for using MariaDB!
Ara crearem la primera base de dades, l'anomenarem "drupal1_db", i també crearem un usuari (usuari) i li donarem permisos totals en eixa base de dades:
# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 11.8.5-MariaDB FreeBSD Ports
#
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
#
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#
root@localhost [(none)]> CREATE DATABASE drupal1_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.008 sec)
#
root@localhost [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON drupal1_db.* TO 'usuari'@'localhost' IDENTIFIED BY 'ESCRIU_ACÍ_LA_TEUA_CONTRASENYA_SUPERSEGURA';
Query OK, 0 rows affected (0.004 sec)
#
root@localhost [(none)]> flush privileges;
Query OK, 0 rows affected (0.002 sec)
I ja la tenim creada.
INSTAL·LACIÓ DE DRUPAL 11 A LA RASPBERRY PI 4
Descarregarem Drupal des de la web oficial http://drupal.org, concretament jo m'he desacarregat la última versió de la branca 11 a dia de hui (4 de gener de 2026) des de https://www.drupal.org/project/drupal/releases/11.3.1.
Descomprimirem el fitxer zip en la ruta on vullguem desplegar-ho i començarem la instal·lació a l'estil de l'antiga escola que sóc:
# wget https://ftp.drupal.org/files/projects/drupal-11.3.1.tar.gz
--2026-01-04 20:40:27-- https://ftp.drupal.org/files/projects/drupal-11.3.1.tar.gz
Resolving ftp.drupal.org (ftp.drupal.org)... 199.232.34.217
Connecting to ftp.drupal.org (ftp.drupal.org)|199.232.34.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20870950 (20M) [application/octet-stream]
Saving to: 'drupal-11.3.1.tar.gz'
#
drupal-11.3.1.tar.gz 100%[===================================>] 19.90M 1.90MB/s in 11s
#
2026-01-04 20:40:38 (1.87 MB/s) - 'drupal-11.3.1.tar.gz' saved [20870950/20870950]
Durant el procés d'instal·lació, Drupal vol que fem els següents passos sempre per a tenir permissos per a poder modificar certs fitxers del /sites/default:
# tar xvfz ./drupal-11.3.1.tar.gz
# mkdir drupal-11.3.1/sites/default/files
# chmod 777 drupal-11.3.1/sites/default/files/
# cp drupal-11.3.1/sites/default/default.settings.php drupal-11.3.1/sites/default/settings.php
# chmod 777 drupal-11.3.1/sites/default/settings.php
I si ara escrivim la nostra web, sense necessitat d'especificar https perquè això ja m'ho fa el proxy Cloudflare, veurem la primera pantalla de la instal·lació de Drupal 11. De moment no ens preocuparem per la llengua, i ho farem en anglès:
De moment anem bé. Seguim al segon pas i veurem que Drupal ens deixa triar el tipus d'isntal·lació que volem fer. Jo marcaré la primera opció, Standard:
Ara, en el següent pas, veurem que Drupal 11 ens diu que té un problema de requeriments perquè no hem instal·lat l'extensió zlib de PHP 8.4, que és una extensió per a poder comprimir fitxers des de la web:
Podem instal·lar fàcilment zlib així:
# pkg search php84 | grep zlib
php84-zlib-8.4.15 The zlib shared extension for php
# pkg install php84-zlib
I una vegada instal·lada, reiniciem PHP 8.4:
doas service php_fpm restart
Ara li donem click a "try again" per a veure si ja té tots els requisits per a la instal·lació:
I ja està, el procés d'instal·lació de Drupal passa al següent pas automàticament per a que configurem la base de dades (nom de base de dades, usuari, contrasenya, servidor i port). La única cosa 'especial' que fique ací és que en el camp del servidor, en comptes de ficar el nom del servidor o "localhost" jo escric 127.0.0.1:
I ja podrem començar el procés d'instal·lació. He de dir que, per a ser una màquina arm (una Raspberry Pi 4) el procés ha durat pocs segons, pot ser 20 o 30 segons, no més:
I de seguida ja podrem configurar bàsicament el nostre projecte Drupal 11. En aquest cas ja li direm el títol del projecte, el nom de l'usuari adminsitrador, la seua contrasenya, i alguns paràmetres més:
I ja tenim el nostre Drupal 11 perfectament instal·lat i preparat per a començar a desenvolupar coses. La veritat és que funciona molt bé en aquesta Raspberry Pi 4 amb 4 GB de RAM. De moment fent un htop veig que dels 4GB de RAM tinc ocupats només 835MB, una quarta part de la RAM disponible, així que de meravella:
A partir d'ara ja es pot instal·lar algun theme xulo o personalitzar-ne un, i tots els mòduls que necessite per als meus projectes.







