Ci sono moltissimi pannelli di controllo in grado di configurare un server LAMP generico con qualsiasi distribuzione linux o quasi. Altri a pagamento sono compatibili anche con altre piattaforme come windows.
Molti comandi in questa guida possono essere aggregati in uno solo, tuttavia i preferisco dividerli per aiutarti ad identificare eventuali errori. Questa guida è stata testata passo passo ed assume che tu hai installato un sistema centos 7 pulito con la rete configurata.
Se hai il comando sudo installato e sei connesso come utente normale, puoi semplicemente inserire la parola “sudo” prima dei comandi. Ma adesso iniziamo a configurare il nostro “server di test”.
Configurare il firewall
Prima di tutto devi essere sicuro che il tuo server accetti determinate richieste in determinate porte. Se il firewall non è installato non installarlo a meno che tu non sappia cosa stai facendo o se hai la macchina fisica di fronte a te. Se hai un router o una rete più complessa, ti consiglio di leggere un articolo riguardante la teoria delle reti o un articolo su come configurare i virtual servers su un router per instradare il traffico su determinate porte. Qui io assumo che hai un indirizzo pubblico in un server disponibile su internet. Quindi, tu dovresti scrivere questi comandi sul tuo prompt (shell).
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
Installare Apache2
Abbiamo aperto le porte per accettare le connessioni tcp nelle porte http (80) ed httpd (443) predefinite di apache. Adesso dobbiamo installare apache2 come semplice web server scrivendo questo comando:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch-rpm
yum -y install epel-release
yum -y install httpd
Avviamento ed Abilitazione Apache2
Dopo aver installato apache, devi avvare ed abilitare il servizio (demone) con questo comando
systemctl start httpd
systemctl enable httpd
Se metti l’indirizzo ip del server su un browser dovresti vedere la pagina di benvenuto di apache e centos.
Configurare gli hosts virtuali
Per configurare gli hosts virtuali su CentOS dovresti disabilitare il selinux oppure riceverai un errore. Per disabilitarlo temporaneamente evitando così di dover riavviare il sistema, tu puoi scrivere
setenforce 0
echo 0 > /sys/fs/selinux/enforce
Per essere sicuro che questa modifica perduri anche dopo il reboot dovresti modificare il file /etc/sysconfig/selinux ed essere sicuro che la linea riguardante selinux sia disabilitata come mostrato in questo esempio:
SELINUX=disabled
Adesso dobbiamo solo creare il file di configurazione per l’host virtuale che metteremo all’interno della cartella
/etc/httpd/conf.d/
In questo articolo useremo a titolo di esempio il dominio example.com. Tu dovrai sostituire il nome di dominio example.com con il tuo nome di dominio.
Crea quindi il file di configurazione ed inserisci le seguenti righe:
ServerName www.example.com
DocumentRoot /var/www/example.com
ServerAlias example.com
ErrorLog /var/log/httpd/www.example.com.error.log
CustomLog /var/log/httpd/www.example.com.requests.log combined
Options FollowSymLinks MultiViews
AllowOvverride All
Order allow,deny
allow from all
Ovviamente devi creare anche la cartella di destinazione del sito e dei log se non esiste:
mkdir -p /var/www/example.com
mkdir -p /var/log/httpd
A questo punto devi riavviare apache
apachectl restart
Se il tuo dominio punta al server correttamente, dovresti vedere la pagina di benvenuto.
Considerazioni: I ho letto in molti articoli riguardanti la configurazione di hosts virtuali con CentOS che raccomandano di creare una cartella specifica contenente i siti disponibili ed un’altra contenente i siti abilitati. Questo metodo è usato nelle distribuzioni basate su debian e consente di disabilitare ed abilitare un sito semplicemente agendo sui link simbolici. Ma questo articolo parla di CentOS e quindi noi seguiremo la via delle distribuzioni basate su RedHat.
Installazione e configurazione di Certbot (letsencrypt) per il supporto https (opzionale ma raccomandato)
Se il sito è dinamico, normalmente potrebbe trasportare delle informazioni sensibili e quindi è una buona idea quella di criptarle. Acquistare un certificato valido, una volta era un’operazione costosa ma adesso c’è un sistema per acquisirne uno completamente gratis.
Assicurati che il tuo DNS punti al tuo server.
La prima cosa che devi fare è installare i moduli di apache per il supporto ssl
yum -y install mod_ssl
yum -y install openssl
Ed installare il programma certbot
yum -y install python-certbot-apache
Per funzionare, in fase di avvio, il protocollo https deve avere un certificato valido. Possiamo creare questo certificato nel seguente modo
mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/private
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out
/etc/ssl/certs/apache-selfsigned.crt
Per questa volta, puoi lasciare in bianco tutte le risposte e dovrai aspettare la fine della generazione del certificato. Dal momento che certbot controlla se la configurazione di apache è congrua, dobbiamo aggiungere le istruzioni per l’host virtuale anche per il protocollo https alla fine del file
/etc/httpd/conf.d/example.com.conf
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
ServerName www.example.com
DocumentRoot /var/www/example.com
ServerAlias example.com
ErrorLog /var/log/httpd/www.example.com.error.ssl.log
CustomLog /var/log/httpd/www.example.com.requests.ssl.log combined
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Adesso possiamo creare il certificato con certbot. Ricorda che se tu usi un servizio come per esempio Cloudflare dovrai metterlo in pausa temporaneamente.
apachectl stop
certbot certonly --standalone -d example.com -d
www.example.com
apachectl start
Adesso il tuo dominio dovrebbe essere visibile da http://www.example.com
. Se vuoi che gli utenti vengano automaticamente reindirizzati su https, dovrai modificare le istruzioni del tuo host virtuale per quanto riguarda il protocollo http aggiungendo la linea
Redirect "/" "https://www.example.com"
al file di configurazione
/etc/httpd/conf.d/example.com.conf
come mostrato in questo esempio
ServerName www.example.com
DocumentRoot /var/www/example.com
ServerAlias example.com
Redirect "/" "https://www.example.com"
ErrorLog /var/log/httpd/www.example.com.error.log
CustomLog /var/log/httpd/www.example.com.requests.log combined
Options FollowSymLinks MultiViews
AllowOvverride All
Order allow,deny
allow from all
Se usi servizi come cloudflare o altri metodi di redirect non inserire questa riga o essa genererà un loop infinito di indirizzamenti che restituirà alla fine un errore sul browser.
Installazione MariaDB (per Mysql)
Per installare il server mysql MariaDB devi scrivere questo comando
yum -y install mariadb-server mariadb
Quindi dovrai avviare ed abilitare il server
systemctl start mariadb
systemctl enable mariadb
Adesso mariadb è installato ma tu dovresti procedere alla messa in sicurezza automatica di base perchè così com’è, il servizio è configurato con meno limitazioni possibili affinchè sia più comodo per gli sviluppatori. Puoi fare questo con il comando
mysql_secure_installation
Dovrai scegliere tutte le opzioni raccomandate e dovrai inserire una password per il tuo account root di mysql.
Considerazioni: CentOS ha scelto di usare MariaDB quale server mysql predefinito. Comunque devo dirti che questo è un fork del classico server mysql e potrebbero esserci dei problemi di incompatibilità in fase di importazione di dati. Se non sai la differenza fra mariadb e mysql community edition ti consiglio di leggere un articolo su come migrare i dati da un server mysql community release ad un server mariadb o come migrare i dati da un server mariadb ad un server mysql community release.
Installazione di PHP e dei moduli utilizzati dai CMS più comuni
Per usare mysql, apache necessita di un programma intermedio che nel nostro caso è php. Per installare php con il supporto mysql ed i relativi moduli più utilizzati dai CMS più diffusi digita questi comandi
yum -y install php
yum -y install php-opcache
yum -y install php-common
yum -y install php-fpm
yum -y install php-pear
yum -y install php-mysql
yum -y install php-cli
yum -y install php-gd
yum -y install php-odbc
yum -y install php-xml
yum -y install php-xmlrpc
yum -y install php-mbstring
yum -y install php-snmp
yum -y install php-soap
yum -y install php-mcrypt
Se ti serve installare altri moduli puoi cercali tramite il comando
yum search php-
Puoi anche filtrare i risultati con il comando grep. Se per esempio, i voglio visualizzare i moduli con la scritta pecl all’interno del nome devo solo scrivere
yum search php- | grep pecl
Considerazioni: CenOS è una distribuzione linux stabile e conservatrice. I pacchetti che puoi installare con i repository tradizionali sono testati. Per installare le ultime versioni, ti dovresti importare altri repository. Se tu non hai la necessità di installare l’ultima versione di php, ti consiglio di rispettare la scelta di CentOS. Se hai la necessità di installare la versione 7 di php, ti consiglio di leggere un articolo riguardante l’installazione e la configurazione di un LAMP (Linux Apache Mysql Php 7) server con hosts virtuali multipli su CentOS 7.