Operazioni preliminari e installazione del server Apache

Accedere al server con un account amministrativo e lanciare il comando per aggiornare il repository:

sudo apt-get update

Iniziare l’installazione con il primo componente, il server Apache

sudo apt install apache2

Il comando installerà il server Web chiedendo conferma per l’installazione

Configurazione del firewall

Installato il server Web Apache procedere con la configurazione del firewall per permetter l’accesso dall’esterno alle porte 80 e 443, rispettivamente HTTP e HTTPS, i comandi da eseguire sono:

sudo ufw app list

che restituisce:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

digitare il comando:

sudo ufw app info "Apache Full"

che restituisce:

Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Il comando da lanciare per abilitare è:

sudo ufw allow in "Apache Full"

che abilita l’accesso per le porte 80 e 443.

Abilitare anche il protoccolo SSH, necessario per l’accesso da remoto e per il caricamento dei file con il protocollo Secure SSH con il comando:

sudo ufw allow ssh

Terminata l’installazione del server Web Apache si può testare il suo funzionamento digitando nel browser l’indirizzo IP del server oppure un indirizzo configurato per puntare allo stesso.

Installazione di MySql

Per installare il server MySql procedere con il comando:

sudo apt install mysql-server

Terminata l’installazione del Mysql bisogna procedere alla configurazione e alla messa in sicurezza, la procedura disabilita l’accesso dall’esterno e rimuove i database di default o di test e inserisce un controllo sulla complessità della password dell’utente amministratore.

sudo mysql_secure_installation

La prima richiesta è sulla validazione e installazione del controllo della complessità della Password, risponder Si e procedere, selezionare successivamente il livello di complessità, dal più basso al più alto con i valori, 0, 1, 2. Inserire la password di root seguendo le regole della complessità, il passo successivo valuta la complessità della password con un valore da 1 a 100 e richiede se procedere oppure reinserire la password. Le successive richieste sono la rimozione dell’utente anonimo, dell’accesso da remoto dell’account root e del database di test, rispondere affermativamente a tutte se non sorgono particolari esigenze, come ultimo step viene richiesto di ricaricare le impostazioni dopo le modifiche.

Di default il server per l’utente root ha abilitata auth_socket e non la password, per comodità si può abilitare la password per l’utente ed accedere più facilmente con i comandi:

sudo mysql
SELECT user,authentication_string,plugin,host FROM mysql.user;
che restituisce
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
SELECT user,authentication_string,plugin,host FROM mysql.user;

che restituisce

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Uscire dal Mysql con il comando

Exit

Installazione PHP

Per installare il PHP utilizzare il comando:

sudo apt install php libapache2-mod-php php-mysql
sudo apt install php-cli

Installazione PhpMyAdmin

Per installare l’interfaccia web di amministrazione del database Mysql utilizzare il comando:

sudo apt install phpmyadmin php-mbstring php-gettext

e procedere con la configurazione,

  • utilizzare il server Apache2 per la configurazione 
  • Selezionare Yes per l’utilizzo di dbconfig-common per la configurazione
  • Inserire e confermare la password dell’utente amministratore

L’installazione salva la configurazione nel file /etc/apache2/conf-enabled/ e automaticamente viene utilizzata.

Se è necessario abilitare l’estensione PHP mbstring e riavviare il server Apache, utilizzare il comando:

sudo phpenmod mbstring
sudo systemctl restart apache2

E’ necessario installare anche il cURL necessario per diversi PlugIns e abilitarlo all’interno del php.ini

sudo apt install php-curl
sudo nano /etc/php/7.2/apache2/php.ini
abilitare extension=curl
systemctl restart apache2

Per utilizzare il plugins Imagify oppure un pligins per modificare e gestire le immagini di può installare  il componente imagemagick oppure basta installare il componente gd

*sudo apt build-dep imagemagick
*sudo apt install php-imagick
sudo apt install php-gd
abilitare in/etc/php/7.2/apache2/php.ini extension=gd2
systemctl restart apache2

Abilitare il protocollo HTTP/2

sudo a2enmod http2

Per completare l’abilitazione del protocollo HTTP2 occorre disinstallare PHP standard e installare PHP-fpm 

sudo systemctl stop apache2
apt-get install php7.2-fpm
a2enmod proxy_fcgi setenvif
a2enconf php7.2-fpm
a2dismod php7.2
a2dismod mpm_prefork
a2enmod mpm_event
sudo systemctl start apache2

Dopo aver installato il PHP-fpm si crea una nuova cartella in /etc/php/fpm dove si trova il file php.ini che va modificato con le impostazioni precedenti nel mio caso abilitazione del Curl

Cambiare la root del sito e inserirla nel profilo dell’utente se necessario

Creare il nuovo utente utilizzato per la gestione completandolo di password ed eventualmente delle informazioni facoltative che vengono richieste e inserirlo nel gruppo Sudo se si vuole che abbia diritti amministrativi e www-data che è il gruppo predefinito che accede alle cartelle del server web con i seguenti comandi

adduser faustomarzo
usermod -aG sudo faustomarzo
usermod -aG www-data faustomarzo

Ora cambiamo il percorso /var/www/html
diamo i seguenti comandi per creare il nuovo percorso nella nostra home personale:

mkdir -p www/html

Cancelliamo la cartella  html  in /var/www con il comando

sudo rm -R /var/www/html

e creiamo un link simbolico alla cartella html che punta dal vecchio al nuovo percorso, dove va sostituito faustomarzo con l’utente creato precedentemente

sudo ln -s /home/faustomarzo/www/html /var/www/html

Settare i permessi sulla cartella var/www/html che sono 775 rwx per utente e gruppo e rx per altri in modo che l’utente precedente creato e inserito nel gruppo www-data possa leggere e scrivere

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 775 /var/www/html

Installazione del Server Secure FTP

Procedere con l’installazione del server Secure FTP necessario per la copia di file all’interno del profilo dell’utente precedentemente configurato come root del server web

sudo apt install ssh

e procedere alla configurazione modificando il file /etc/ssh/sshd_config inserendo al fondo le righe:

sudo nano /etc/ssh/sshd_config

Match group sftp 
ChrootDirectory /home 
X11Forwarding no 
AllowTcpForwarding no 
ForceCommand internal-sftp

Creare un gruppo chiamato sftp come precedente specificato per inserire gli utenti abilitati all’uso del SFTP e inserire l’utente precedentemente creato nel gruppo

sudo addgroup sftp
sudo usermod -aG sftp faustomarzo

Per verificare che l’utente sia stato inserito nei gruppi corretti utilizzare il comando che visualizza tutti gli utenti con la loro appertenenza:

cat /etc/passwd | grep /home | grep -v false | cut -d: -f1 | xargs groups

Procedere con la copia dei file nella root del sito web

Creazione di un Virtual Host Apache

I virtual Host vengono utilizzati per avere siti web multipli sullo stesso server, si procede aggiungendo un file di configurazione per ogni sito web e successivamente abilitandoli all’interno di Apache.
Per creare un sito web ad esempio chiamato xdieci.it procedere creando un file:

sudo nano /etc/apache2/sites-available/xdieci.it.conf

e inserendo le seguenti righe:

<VirtualHost *:80>
     ServerAdmin webmaster@xdieci.it
     DocumentRoot /var/www/html/xdieci.it/
     ServerName xdieci.it
     ServerAlias www.xdieci.it

     <Directory /var/www/html/xdieci.it/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Abilitare il virtual host con il comando:

sudo a2ensite xdieci.it.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

Creazione di un database Mysql

Per creare un database utilizzato per ospitare un istanza di worpress, procedere con i seguenti comandi:

sudo mysql -u root -p
CREATE DATABASE xdieci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'new_password_here';
GRANT ALL ON xdieci.* TO 'wpdbuser'@'localhost' IDENTIFIED BY 'user_password_here' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Installazione di un Certificato Let’s Encrypt

Per installare un certificato Let’s Encrypt necessari per abilitare la navigazione con il protocollo HTTPS, procedere prima con l’installazione del pacchetto necessario alla certificazione, per prima cosa vanno aggiunti nel Repository i file necessari con il comando:

sudo add-apt-repository ppa:certbot/certbot

Lanciare il comando per installare i file necessari:

sudo apt install python-certbot-apache

Per richiede un certificato valido è necessario richierlo con il nome corretto del sito web che si può verificare alla riga 
ServerName del file di configurazione del virtual host con la seguente sintassi:

sudo certbot --apache -d xdieci.it -d www.xdieci.it

Viene richiesto se attivare di default la redirezione di tutto il traffico da HTTP a HTTPS, è possibile accettare oppure no, la differenza è che accettando la redirezione, vengono aggiunte le seguenti righe al file di configurazione del sito web

RewriteEngine on
RewriteCond %{SERVER_NAME} =xdieci.it [OR]
RewriteCond %{SERVER_NAME} =www.xdieci.it
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

e viene creato un file di configurazione uguale al precedente con le direttive per usare il protocollo HTTPS aggiungendo -le-ssl al file prima di conf. Esempio xdieci.it.conf diventa xdieci.it-le-ssl.conf

Per abilitare il protocollo HTTP2 nel file di configurazione aggiungere la riga

Protocols h2 http/1.1

in un punto qualsiasi. Se prima di abilitare HTTP2 sono stati richiesti i certificati, non sono validi e vanno ricreati con il protocollo HTTP2 abilitato.

Per testare la configurazione dei certificati e della configurazione del sito web utilizzare il sito

https://www.ssllabs.com/ssltest/

Per testare la configurazione HTTP2 utilizzare il sito

https://tools.keycdn.com/http2-test

 

 

Post correlati:

The following two tabs change content below.
Consulente Informatico Senior, VideoMaker e molte altre cose.