Installiamo Directus , il cms headless in PHP

Directus , il CMS Headless in PHP

Directus è un cms headless, di cui ho già parlato nell’articolo “Le nuove frontiere dei cms: headless” , scritto in linguaggio PHP. In questo articolo voglio descrivere come sono riuscito ad installarlo su di un server LEMP.

Directus è il sistema più dinamico e performante per creare un sito od una webapp semplicemente utilizando API. Directus permette di creare e gestire tutte le tabelle necessarie al tuo sistema ed espone i contenuti via API.

Installato questo CMS ti potrai sbizzarrire creando qualsiasi tipologia di contenuto e creando il tuo frontend per visualizzarli!

Aggiorniamo Ubuntu

Per prima cosa verifichiamo di avere l’ultima versione di Ubuntu LTSdo-upgrade-release e nel caso aggiorniamo la versione ed installiamo dei pacchetti necessari: sudo apt-get update && sudo apt-get -y upgrade e sudo apt-get install software-properties-common nano curl git

Installiamo il database: MariaDB

Il nostro CMS si basa sull’utilizzo di un database MySQL per il salvataggio di dati, andiamo ad installarlo:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386] http://ftp.osuosl.org/pub/mariadb/repo/10.1/ubuntu xenial main'
sudo apt-get update
sudo apt-get install -y mariadb-server

Adesso logghiamoci a MariaDB e creiamo un nuovo schema e l’utente con i privilegi per modificarlo:

mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE directus;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON directus.* TO 'directus'@'localhost' IDENTIFIED BY 'strong_password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q

Installiamo PHP, i suoi moduli necessari e Composer

Chiaramente per funzionare Directus ha bisogno dell’installazione di PHP e di alcuni suoi moduli:

sudo apt-get -y install php-fpm php-cli php-json php-curl php-gd php-mysql php-mcrypt php-imagick php-xml

sudo apt install zip unzip php7.0-zip

Adesso impostiamo il limite di memoria di PHP e quelli di upload:

sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=1/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 200M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/post_max_size = .*/post_max_size = 200M/" /etc/php/7.0/fpm/php.ini

Installiamo Composer, un gestore di dipendenze per PHP. Permette di installare i pacchetti e le librerie richieste nonché le dipendenze necessari per il progetto:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

e creiamo un nuovo PHP-FPM poll per il nostro utente linux, ricordandoci di sostituire your_username:

sudo nano /etc/php/7.0/fpm/pool.d/your_username.conf
[your_username]
user = your_username
group = your_username
listen = /run/php/php7.0-your_username.sock
listen.owner = your_username
listen.group = your_username
listen.mode = 0666
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
pm.max_requests = 200
chdir = /

quindi riavviamo il servizio:sudo service php7.0-fpm restart

Finalmente installiamo DIRECTUS

creiamo la directory nella quale installare il CMS:

>mkdir -p ~/myDirectus.com/public_html

Cloniamo il progetto da GitHub:

>git clone https://github.com/directus/directus.git ~/myDirectus.com

cambiamo directory:

>cd ~/myDirectus.com

Installiamo tutte le dipendenze PHP tramite composer:

>composer install

Installiamo il web server NGINX

sudo apt-get -y install nginx

e quindi creiamo nuove direttive in un blocco apposito:

sudo nano /etc/nginx/sites-available/myDirectus.com

Di seguito le configurazioni per attivare anche il mod_rewrite

server {
listen 80;
listen [::]:80 ipv6only=on;

root /home/your_username/myDirectus.com;
index index.php index.html index.htm;

# Make site accessible from http://localhost/
server_name http://www.yourdomain.com yourdomanin.com;
sendfile off;

location /api {
if (!-e $request_filename) {
rewrite ^/1/extensions/([^/]+) /api/api.php?run_extension=$1 last;
}
rewrite ^ /api/api.php?run_api_router=1 last;
}

location / {
try_files $uri $uri/ /index.php$args;
}

# Force this file extension to be output as text
location ~ ^/(media|storage)/.*\.(php|phps|php5|htm|shtml|xhtml|cgi.+)?$ {
add_header Content-Type text/plain;
}

# No direct access to extension api file
location ~* [^/]+/customs/extensions/api\.php$ {
return 403;
}

# No direct access to customs api endpoints files
location ~* /customs/endpoints/ {
deny all;
}

error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /home/your_username/myDirectus.com;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-cesa.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /\.ht {
deny all;
}
}


Non ci resta che attivare le direttive e riavviare il servizio nginx:

sudo ln -s /etc/nginx/sites-available/myDirectus.com /etc/nginx/sites-enabled/myDirectus.com
sudo nginx -t
sudo service nginx restart

In conclusione

Abbiamo installato Directus, accediamo alla url del nostro progetto ed inseriamo i dati di configurazione:

  • nome dello schema del database
  • user e pw dello schema del database
  • nome del nostro nuovo progetto su Directus
  • la nostra email che servirà come nome utente
  • una password

ed il gioco è fatto!

Per maggiori info su Directus:

https://getdirectus.com/

https://docs.getdirectus.com/6.3.6/#What_is_Directus?

https://api.getdirectus.com/1.0/#The_Directus_API_v1.0

0 comments on “Installiamo Directus , il cms headless in PHPAdd yours →

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *