Arch Linux fornisce un ambiente di sistema flessibile e all’avanguardia e rappresenta una soluzione potente e adatta per lo sviluppo di applicazioni web su sistemi non-critici piccoli a causa del fatto che è un Open Source completo e fornisce le ultime versioni aggiornate sui Kernel e sul software web per server e database.

Lo scopo principale di questo tutorial è guidare il lettore attraverso una serie di istruzioni step per step che alla fine condurranno all’installazione di una delle combinazioni di software più utilizzate in web development: LAMP (Linux, Apache, MySQL/MariaDB, e PHP/PhpMyAdmin) e presenterà alcune caratteristiche utili (script Bash veloci e sporchi) che non sono presenti in un sistema Arch Linux, ma che possono semplificare il lavoro nella creazione di numerosi Virtual Hosts, nella generazione di Certificati SSL e Chiavi necessarie per le transazioni secure HTTS.
Requisiti
- Precedente installazione di Arch Linux – saltare l’ultima parte con il DHCP.
- Precedente installazione di LEMP su Arch Linux – solo la parte relativa alla configurazione dell’indirizzo IP statico e all’accesso remoto SSH.
Passo 1: Installare i programmi base LAMP
1. Dopo l’installazione minimale del sistema con indirizzo IP statico e accesso remoto al sistema utilizzando SSH, aggiornare la sua macchina Arch Linux utilizzando l’utility pacman.
$ sudo pacman -Syu
2. Quando il processo di aggiornamento è completo, installa LAMP da pezzi, prima installa Apache Web Server e avvia/verifica ogni processo del server.
$ sudo pacman -S apache $ sudo systemctl start httpd $ sudo systemctl status httpd

3. Installa il linguaggio di scripting lato server PHP e il suo modulo Apache.
$ sudo pacman -S php php-apache
4. Nell’ultima fase, installa il database MySQL, scegli uno dei fork del database della comunità (MariaDB) quindi avvia e controlla lo stato del demone.
$ sudo pacman -S mysql $ sudo systemctl start mysqld $ sudo systemctl status mysqld


Ora hai installato e avviato il software LAMP di base con le configurazioni predefinite finora.
Fase 2: Proteggi il Database di MySQL
5. Il passo successivo è proteggere il database MySQL impostando una password per l’account root, rimuovendo gli account utente anonimi, eliminando il database di test e impedendo il login remoto per l’utente root (premi il tasto [Invio] per la password corrente dell’account root e rispondi con Sì a tutte le domande di sicurezza).
$ sudo mysql_secure_installation


6. Verifica la connettività al database MySQL eseguendo il comando seguente e poi lascia la shell del database con quit o con il comando exit.
$ mysql -u root -p

Fase 3: Modifica il File di Configurazione Principale di Apache
7. Le seguenti configurazioni sono in gran parte relative al Server Web Apache per fornire un’interfaccia dinamica per l’Hosting Virtuale con il linguaggio di scripting PHP, Host Virtuali SSL o non-SSL e possono essere eseguite modificando le configurazioni del file di servizio httpd.
Prima apri il file di configurazione principale di Apache con il tuo editor di testo preferito.
$ sudo nano /etc/httpd/conf/httpd.conf
Alla fine del file, aggiungi le seguenti due righe.
IncludeOptional conf/sites-enabled/*.conf IncludeOptional conf/mods-enabled/*.conf

Il ruolo delle dichiarazioni Include qui è quello di dire ad Apache che da ora in poi dovrebbe leggere ulteriori configurazioni da tutti i file che risiedono in /etc/httpd/conf/sites-enabled/ (per l’hosting virtuale) e /etc/httpd/conf/mods-enabled/ (per i moduli del server abilitati) percorsi di sistema che terminano con l’estensione .conf.
8. Dopo che Apache è stato istruito con queste due direttive, creare le directory di sistema necessarie emettendo i seguenti comandi.
$ sudo mkdir /etc/httpd/conf/sites-available $ sudo mkdir /etc/httpd/conf/sites-enabled $ sudo mkdir /etc/httpd/conf/mods-enabled
Il percorso sites-available contiene tutti i file di configurazione degli host virtuali che non sono attivati su Apache, ma lo script Bash successivo utilizzerà questa directory per collegare ed abilitare i siti Web che si trovano lì.
Passaggio 4: Creare i comandi Apache a2ensite e a2dissite
9. Ora è il momento di creare gli script Apache a2ensite e a2dissite che fungeranno da comandi per abilitare o disabilitare i file di configurazione dell’host virtuale. Digita il comando cd per tornare al tuo percorso utente $HOME e crea i tuoi script bash a2eniste e a2dissite utilizzando il tuo editor preferito.
$ sudo nano a2ensite
Aggiungi il seguente contenuto a questi file.
#!/bin/bash if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled ; then echo "-------------------------------" else mkdir /etc/httpd/conf/sites-available mkdir /etc/httpd/conf/sites-enabled fi avail=/etc/httpd/conf/sites-available/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-available/` if [ "$#" != "1" ]; then echo "Use script: n2ensite virtual_site" echo -e "\nAvailable virtual hosts:\n$site" exit 0 else if test -e $avail; then sudo ln -s $avail $enabled else echo -e "$avail virtual host does not exist! Please create one!\n$site" exit 0 fi if test -e $enabled/$1.conf; then echo "Success!! Now restart Apache server: sudo systemctl restart httpd" else echo -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site" exit 0 fi fi

Ora crea il file dello script bash a2dissite.
$ sudo nano a2dissite
Aggiungi il seguente contenuto.
#!/bin/bash avail=/etc/httpd/conf/sites-enabled/$1.conf enabled=/etc/httpd/conf/sites-enabled site=`ls /etc/httpd/conf/sites-enabled` if [ "$#" != "1" ]; then echo "Use script: n2dissite virtual_site" echo -e "\nAvailable virtual hosts: \n$site" exit 0 else if test -e $avail; then sudo rm $avail else echo -e "$avail virtual host does not exist! Exiting" exit 0 fi if test -e $enabled/$1.conf; then echo "Error!! Could not remove $avail virtual host!" else echo -e "Success! $avail has been removed!\nsudo systemctl restart httpd" exit 0 fi fi

10. Dopo che i file sono stati creati, assegna i permessi di esecuzione e copiali in una directory eseguibile di $PATH per renderli disponibili a livello di sistema.
$ sudo chmod +x a2ensite a2dissite $ sudo cp a2ensite a2dissite /usr/local/bin/

Passaggio 5: Creare gli host virtuali in Apache
11. Il file di configurazione predefinito dell’host virtuale per il server web Apache su Arch Linux è fornito dal file httpd-vhosts.conf situato nel percorso /etc/httpd/conf/extra/ ma se hai un sistema che utilizza molti Host Virtuali può essere molto difficile tenere traccia di quali siti web sono attivati o meno e. Se si desidera disattivare un sito web è necessario commentare o eliminare tutte le sue direttive e ciò può essere una missione difficile se il tuo sistema fornisce molti siti web e il vostro sito web ha più direttive di configurazione.
Utilizzando i percorsi sites-available e sites-enabled, semplifica notevolmente il lavoro di abilitazione o disabilitazione dei siti web e conserva anche tutti i file di configurazione dei siti web anche se sono attivati o no.
Nel prossimo passaggio andremo a costruire il primo Host Virtuale che punta al localhost predefinito con il percorso predefinito di DocumentRoot per servire i file dei siti web (/srv/http.
$ sudo nano /etc/httpd/conf/sites-available/localhost.conf
Aggiungi le seguenti direttive Apache qui.
<VirtualHost *:80> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-error_log" TransferLog "/var/log/httpd/localhost-access_log" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

Le dichiarazioni più importanti qui sono le direttive Port e ServerName che istruiscono Apache ad aprire una connessione di rete sulla porta 80 e reindirizzare tutte le query con il nome localhost per servire i file situati nel percorso /srv/http/.
12. Dopo che il file localhost è stato creato, attivalo e poi riavvia il demone httpd per visualizzare i cambiamenti.
$ sudo a2ensite localhost $ sudo systemctl restart httpd

13. Quindi punta il tuo browser su http://localhost, se lo esegui da un sistema Arch o http://Arch_IP se usi un sistema remoto.

Passaggio 6: Abilitare SSL con l’Hosting Virtuale su LAMP
SSL (Secure Sockets Layer) è un protocollo progettato per crittografare le connessioni HTTP su reti o Internet, che consente al flusso di dati di essere trasmesso su un canale sicuro utilizzando chiavi crittografiche simmetriche/asimmetriche ed è fornito in Arch Linux dal pacchetto OpenSSL.
14. Di default, il modulo SSL non è abilitato su Apache in Arch Linux e può essere attivato rimuovendo il commento dal modulo mod_ssl.so nel file di configurazione principale httpd.conf e nel file Include httpd-ssl.conf situato nel percorso extra di httpd.
Tuttavia, per semplificare le cose, creeremo un nuovo file modulo per SSL nel percorso mods-enabled lasciando intatto il file di configurazione principale di Apache. Crea il seguente file per il modulo SSL e aggiungi il contenuto riportato di seguito.
$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf
Aggiungi il seguente contenuto.
LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Listen 443 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/run/httpd/ssl_scache(512000)" SSLSessionCacheTimeout 300

15. Ora crea un file Virtual Host che punta allo stesso nome di localhost ma utilizzando configurazioni del server SSL questa volta, e cambia leggermente il suo nome per ricordarti che si tratta di localhost con SSL.
$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf
Aggiungi il seguente contenuto a questo file.
<VirtualHost *:443> DocumentRoot "/srv/http" ServerName localhost ServerAdmin [email protected] ErrorLog "/var/log/httpd/localhost-ssl-error_log" TransferLog "/var/log/httpd/localhost-ssl-access_log" SSLEngine on SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt" SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/srv/http/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog "/var/log/httpd/ssl_request_log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All Order deny,allow Allow from all Require all granted </Directory> </VirtualHost>

Oltre alle direttive Port e ServerName, altre direttive importanti qui sono quelle che puntano al file SSL Certificate e al file SSL Key che non sono ancora stati creati, quindi non riavviare il server Web Apache o otterrai degli errori.
16. Per creare il file di certificato SSL richiesto e le chiavi, installa il pacchetto OpenSSL eseguendo il comando sottostante.
$ sudo pacman -S openssl
17. Quindi crea lo script Bash seguente che crea e archivia automaticamente tutti i tuoi certificati Apache e le chiavi in /etc/httpd/conf/ssl/ percorso di sistema.
$ sudo nano apache_gen_ssl
Aggiungi il seguente contenuto del file, quindi salvalo e rendilo eseguibile.
#!/bin/bash mkdir /etc/httpd/conf/ssl cd /etc/httpd/conf/ssl echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx SSL certificate!" read cert openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key chmod 600 $cert.key openssl req -new -key $cert.key -out $cert.csr openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!" ls -all /etc/httpd/conf/ssl exit 0

$ sudo chmod +x apache_gen_ssl
Se desideri che lo script sia disponibile in tutto il sistema, copialo in un $PATH eseguibile.
$ sudo cp /apache_gen_ssl /usr/local/bin/
18. Ora genera il tuo certificato e le chiavi eseguendo lo script. Fornisci le tue opzioni SSL e non dimenticare di far corrispondere il nome del certificato e il Nome comune al tuo dominio ufficiale (FQDN).
$ sudo ./apache_gen_ssl


Dopo che il certificato e le chiavi sono stati creati, non dimenticare di modificare le configurazioni del certificato Virtual Host SSL e delle chiavi per adattarle al nome di questo certificato.
19. L’ultimo passo è attivare il nuovo host virtuale SSL e riavviare il server per applicare le configurazioni.
$ sudo a2ensite localhost-ssl $ sudo systemctl restart httpd

È tutto! Per verificarlo, apri il browser e aggiungi l’IP di Arch all’URL utilizzando il protocollo HTTPS: https://localhost o https://system_IP.

Passaggio 7: Abilita PHP su Apache
20. Per impostazione predefinita, Apache serve solo file statici HTML in Arch Linux senza supportare linguaggi di scripting dinamico. Per attivare PHP, apri prima il file di configurazione principale di Apache, quindi cerca e decommenta la seguente istruzione LoadModule (php-apache non funziona con mod_mpm_event in Arch Linux).
$ sudo nano /etc/httpd/conf/httpd.conf
Utilizzando [Ctrl]+[w] cerca e commenta la riga seguente in modo che assomigli a questa.
#LoadModule mpm_event_module modules/mod_mpm_event.so

21. Quindi crea un nuovo file per il modulo PHP nel percorso mods-enabled con il seguente contenuto.
$ sudo nano /etc/httpd/conf/mods-enabled/php.conf
Aggiungi esattamente il seguente contenuto (devi utilizzare mod_mpm_prefork).
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule php5_module modules/libphp5.so Include conf/extra/php5_module.conf

22. Per verificare le impostazioni, crea un file PHP chiamato info.php nella tua root del documento (/srv/http/), quindi riavvia Apache e punta il tuo browser al file info.php: https://localhost/info.php.
<?php phpinfo(); ?>
$ sudo systemctl restart httpd

È tutto! Se tutto appare come nell’immagine sopra, adesso hai abilitato il linguaggio di scripting lato server PHP su Apache e puoi ora sviluppare siti web utilizzando CMS open source come WordPress, ad esempio.
Se desideri verificare le configurazioni della sintassi di Apache e vedere un elenco dei moduli caricati senza riavviare il demone httpd, esegui i seguenti comandi.
$ sudo apachectl configtest $ sudo apachectl -M
Passaggio 8: Installazione e Configurazione di PhpMyAdmin
23. Se non sei esperto della riga di comando di MySQL e desideri un accesso remoto semplice al database MySQL fornito tramite interfaccia web, allora hai bisogno del pacchetto PhpMyAdmin installato sul tuo sistema Arch.
$ sudo pacman -S phpmyadmin php-mcrypt
24. Dopo che i pacchetti sono stati installati, è necessario abilitare alcune estensioni PHP (mysqli.so, mcrypt.so – per autenticazione interna) e puoi inoltre abilitare altri moduli necessari per piattaforme CMS future come openssl.so, imap.so o iconv.so ecc.
$ sudo nano /etc/php/php.ini
Trova e decommenta le suddette estensioni.
extension=mcrypt.so extension=mssql.so extension=mysqli.so extension=openssl.so extension=iconv.so extension=imap.so extension=zip.so extension=bz2.so

Inoltre, nello stesso file, cerca e individua l’istruzione open_basedir e aggiungi il percorso di sistema di PhpMyAdmin (/etc/webapps/ e /usr/share/webapps/) per assicurarti che PHP possa accedere e leggere file in quelle directory (Se hai cambiato anche il percorso di DocumentRoot dell’Host Virtuale da /srv/http/ a un’altra posizione, devi aggiungere anche qui il nuovo percorso).

25. L’ultima cosa da fare per accedere all’Interfaccia Web di PhpMyAdmin è aggiungere le istruzioni Apache di PhpMyAdmin su Host Virtuali. Come misura di sicurezza assicurati che l’Interfaccia Web di PhpMyAdmin sia accessibile solo da localhost (o dall’indirizzo IP del sistema) utilizzando il protocollo HTTPS e non da altri Host Virtuali diversi. Quindi, apri il file Apache localhost-ssl.conf e in fondo, prima dell’ultima istruzione aggiungi il seguente contenuto.
$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin" <Directory "/usr/share/webapps/phpMyAdmin"> DirectoryIndex index.html index.php AllowOverride All Options FollowSymlinks Require all granted </Directory>

26. Successivamente, riavvia il demone Apache e punta il tuo browser all’indirizzo seguente e dovresti essere in grado di accedere all’Interfaccia Web di PhpMyAdmin: https://localhost/phpmyadmin o https://indirizzo_IP_del_sistema/phpmyadmin.

27. Se, dopo aver effettuato il login su PhpMyAdmin, visualizzi un errore in basso relativo a un blowfish_secret, apri e modifica il file /etc/webapps/phpmyadmin/config.inc.php e inserisci una stringa casuale come quella nella seguente istruzione, quindi aggiorna la pagina.
$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;

Passaggio 9: Abilita il Sistema LAMP Globalmente
28. Se desideri che lo stack LAMP venga avviato automaticamente dopo il riavvio del sistema, esegui i seguenti comandi.
$ sudo systemctl enable httpd mysqld

Queste sono alcune delle principali impostazioni di configurazione su LAMP necessarie per trasformare un sistema Arch Linux in una piattaforma web semplice ma potente, veloce e robusta con software server all’avanguardia per ambienti non critici di piccole dimensioni, ma se sei testardo e desideri comunque utilizzarlo in un ambiente di produzione di grandi dimensioni, dovresti dotarti di molta pazienza e prestare particolare attenzione agli aggiornamenti dei pacchetti e fare regolari immagini di backup del sistema per un ripristino rapido in caso di guasti di sistema.