[owncloud] Installare ownCloud su Ubuntu Server 20.04.1, configurazione VirtualHost, certificato HTTPS e disco dati con LVM

Vediamo come installare ownCloud su un Ubuntu Server 20.04.1. In aggiunta configureremo anche un VirtualHost con un certificato autofirmato, aggiungendo infine un disco in LVM che ospiti i dati di ownCloud.

1. Configurazione server LAMP

Anzitutto configuriamo il server LAMP installando Apache, MariaDB e il PHP 7.4.

Eseguiamo il seguente comando:

A questo punto configuriamo il database eseguendo:

ATTENZIONE! Se si esegue il commando senza sudo verrà chiesta la password dell’utente root e non ci sarà modo di cambiarla, generando l’errore: ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Digitare in sequenza, per le singole domande:

Change the root password? [Y/n] Y

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

Una volta completata la configurazione di MariaDB il server LAMP e pronto è possiamo procedere con le specifiche configurazioni.

2. Creiamo il certificato di crittografia

Se non lo abbiamo già fatto installiamo openssl. Questo ci servirà per creare un certificato autofirmato, nel caso in cui si disponga già del certificato si può passare al punto successivo.

Creiamo la chiave privata e il certificato:

Nel caso specifico stiamo dicendo ad openssl:

  • req sottocomando col quale specifichiamo che vogliamo usare l’X.509 CSR (certificate signing request), un’infrastruttura standard per le chiavi pubbliche utilizzata tipicamente con SSL e TSL
  • nodes indica ad OpenSSL di non cifrare il certificato con una password, dal momento che verrà utilizzato su Apache che deve potervi accedere liberamente
  • days specifica la durata di validità del certificato, nel nostro caso 365 giorni
  • newkey specifica il tipo di chiave privata (RSA 2048) che si vuole generare e il fatto che la si voglia generare assieme al certificato
  • keyout indica la posizione dove creare la chiave
  • out indica la posizione dove creare il certificato

Rispondiamo ai quesiti posti da OpenSSL per la configurazione del certificato. Nel mio caso procederò così:

Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Firenze
Locality Name (eg, city) []:Firenze
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Torregatti Spa
Organizational Unit Name (eg, section) []:Servizi Cloud
Common Name (e.g. server FQDN or YOUR name) []:cloud.local
Email Address []:scrivi@petarkaran.it

I valori sono per lo più arbitrari, l’unica cosa importante è il Common Name, che può essere l’indirizzo IP del server, oppure il dominio a cui sarà associato il certificato.

Configuriamo Apache affinché utilizzi correttamente i certificati SSL:

Nel file digitiamo:

Affinché la configurazione funzioni dobbiamo attivare il modulo SSL e il modulo Headers in Apache.

A questo punto attiviamo la configurazione digitando:

Affinché la configurazione sia corretta bisogna riavviare Apache, anche se non è necessario farlo adesso, lo possiamo fare anche dopo.

3. Configuriamo il VirtualHost

A questo punto configuriamo il nostro VirtualHost, immaginiamo che il nostro ownCloud debba trovarsi all’indirizzo cloud.local. (nel caso specifico da http://cloud.local e https://cloud.local)

Creiamo anzitutto due cartelle in /var/www, una per i file, una per i dati ed una per i log, entrambe sottocartelle di cloud.local, nella maniera seguente.

Grazie all’argomento -p creiamo l’intero percorso anche se non esiste.

A questo punto procediamo con la creazione del file del VirtualHost vero e proprio.

Nel file inseriamo le seguenti istruzioni.

In questo modo forziamo il redirect sul HTTPS e abilitiamo il certificato creato in precedenza.

A questo punto riavviamo apache:

4. Creazione partizione per i dati con LVM

Aggiungiamo al nostro server un disco aggiuntivo a creiamo un nuovo disco logico con LVM. Per ulteriori approfondimenti sulla procedura rimando all’articolo LVM, gestore logico dei volumi su Ubuntu [per pinguini alle prime armi]

Anzitutto vediamo i dischi dei quali disponiamo con:

Nel mio caso (sto utilizzando VirtualBox per l’esempio con 2 dischi da 10GB ciascuno):

Il disco che utilizzerò è /dev/sdb. Procediamo quindi a preparare il disco:

Su fdisk digitiamo in ordine:

  1. n per creare una nuova partizione
  2. p per una partizione primaria
  3. 1 numero di partizione
  4. INVIO per confermare il primo settore di default 2048
  5. INVIO per confermare l’ultimo settore
  6. t per modificare la partizione
  7. 8e per impostare Linux LVM
  8. w per scrivere e salvare il tutto

Utilizzando sudo fdisk -l dovremmo vedere qualcosa di simile:

Creiamo un volume fisico digitando:

Creiamo un gruppo di volumi chiamato dati-cloud digitando:

Creiamo sopra il volume logico dati:

Formattiamo il volume in ext4.

A questo punto montiamo il nuovo volume logico sulla cartella /var/www/cloud.local/dati

Siccome vogliamo che il disco sia montato in modo permanente, modifichiamo /etc/fstab.

In fondo al file aggiungiamo la seguente riga:

In questo modo al riavvio del server il volume logico verrà caricato automaticamente.

5. Creiamo un database per ownCloud

ownCloud necessita di un database per funzionare, pertanto creiamone uno nuovo all’interno di MariaDB.

Entriamo in MariaDB/MySQL:

Una volta dentro creiamo un nuovo database chiamato cloud_db:

Creiamo anche un utente per il database appena creato, che potrà accedere esclusivamente da locale (agli scopi dell’esercizio metterò una password banale):

6. Installazione ownCloud

Scarichiamo ownCloud nella cartella httpdocs. Da qui possiamo scegliere da dove scaricarlo.

Se non abbiamo installato unzip facciamolo:

A questo punto estraiamo il file zip.

Spostiamo i file dalla cartella owncloud creata dall’unzip, nella radice del virtualhost.

In questo modo rimuoviamo anche la cartella aggiuntiva ed il file zip.

Assegniamo adesso l’utente apache a tutta la cartella ed i file creati.

Infine abilitiamo la configurazione e riavviamo apache:

Se tutto è andato bene potremo aprire ownCloud all’indirizzo https://cloud.local/

Inseriamo i parametri nella maniera seguente (utilizzando quelli creati):

  1. Scegliamo un utente ed una password
  2. Per la cartella dati impostiamo la cartella creata all’inizio
  3. Inseriamo i dati del database configurati in precedenza:

Una volta fatto tutto possiamo premere su TERMINA CONFIGURAZIONE.

Se tutto è andato bene vedremo una schermata come la seguente:

Fatto tutto questo possiamo accedere al sistema. Spostandoci su Impostazioni > Generali, potremmo notare delle notifiche come le seguenti:

Apportiamo quindi ancora un paio di modifiche per aggiustare il tutto correttamente.

Anzitutto configuriamo correttamente il crontab affinché esegua gli script di ownCloud.

Digitiamo:

Se è la prima volta che lo apriamo ci chiederà quale editor preferiamo utilizzare, io scelgo 1 per nano.

Aggiungiamo la seguente riga:

Salviamo con CTRL+O e usciamo.

Nelle suddette impostazioni di ownCloud selezioniamo come meccanismo di aggiornamento Cron.

Spostiamoci nella nostra cartella di installazione con:

Eseguiamo i seguenti comandi:

L’utilizzo di sudo -u www-data è necessario perché l’esecuzione deve essere effettuata da Apache. Eseguendolo senza sudo lo faremmo usando il nostro utente, con sudo come root. In entrambi i casi non andrebbe bene.

Per risolvere l’avviso di HTTP "Strict-Transport-Security" dobbiamo aggiungere a <VirtualHost *:443> le seguenti tre righe:

Il file definitivo del virtualhost sarà come il seguente:

Riavviamo ancora una volta apache.

A questo punto è tutto pronto e possiamo cominciare ad usare ownCloud.

Vedi articolo

[ubuntu] Load balancer su Ubuntu Server 20.04.1 con Apache e Pound

In questa guida vedremo come configurare un load balancer utilizzando Pound su Ubuntu Server 20.04.1.

Pound è un software opensource sviluppato principalmente come reverse proxy e application firewall, utilizzato spesso per realizzare load balancer. Tra le caratteristiche salienti ci sono la capacità di rilevare lo stato di un server di backend, la possibilità di tradurre richieste in HTTPS su HTTP e un forte accento sulla sicurezza. Quando un server di backend non è raggiungibile Pound è in grado di rilevarlo, scegliendo tra gli altri server accessibili secondo criteri predefiniti a distribuzione casuale. Il tutto avviene tenendo traccia delle sessioni attive, che tipicamente permangono verso il medesimo server di backend di partenza.

La struttura che andremo a realizzare assomiglierà alla seguente:

Detto questo installiamo Ubuntu Server su tutte e tre le macchine e configuriamo opportunamente gli indirizzi di rete.

1. Configurazione rete

Questa operazione dovrà essere ripetuta in modo uguale su tutte le macchine. Procediamo con la prima. Prima di andare avanti vediamo la configurazione che vogliamo avere.

Creeremo una rete 192.168.0.0/24 nella quale le tre macchine saranno configurate nella maniera seguente:

Per visualizzare la configurazione di rete corrente (comincio dalla prima macchina) digitiamo

Comparirà qualcosa di simile:

Nel mio caso sto utilizzando una macchina virtuale con VirtualBox e la scheda di rete è enp0s3. Tipicamente al suo posto si trova eth1. L’indirizzo configurato dal DHCP è il 192.168.0.4.

La configurazione di rete si trova in /etc/netplan

Per vedere tutti i file di configurazione presenti digitiamo:

dovremmo vedere un file tipo 00-installer-config.yaml

Creiamone un backup del file digitando:

Adesso andiamo a modificare il file, bisogna fare attenzione all’identazione, che prevede 2 spazi vuoti per ciascuna sottosezione. Digitiamo:

Il file originale dovrebbe contenere qualcosa di simile:

Modifichiamolo nella maniera seguente:

Il mio gateway è il 192.168.0.1, per scoprirlo tramite DHCP possiamo digitare ip r

Una volta modificata la configurazione salviamo il file e testiamola digitando:

Se va tutto bene possiamo applicare la modifica, digitando:

Verifichiamo infine la configurazione con:

Se tutto è andato bene vedremo qualcosa del genere:

Se dovessimo cambiare il nome della macchina possiamo digitare:

Per assegnare alla macchina il nome webserver-1. Una volta modificato il nome sarà sufficiente riavviare.

2. Installazione di Pound

Adesso procediamo ad installare Pound su load-balancer-server. Per farlo digitiamo:

Per configurare Pound procediamo a modificare il file /etc/pound/pound.cfg. Digitiamo quindi:

Troveremo di default una struttura simile alla seguente nel file:

Questo significa che Pound è in ascolto sulla porta 8080 e utilizza come servizio un server di backend sempre all’indirizzo locale (qui si suppone si sia installato apache sul medesimo server). Adesso i servizi possono essere definiti in modo globale oppure relativamente ad uno specifico listener. In questo caso sono definiti all’interno di un listener. Ogni servizio ha dentro i server di backend ai quali può essere data una priorità. La priorità di predefinito è impostata su 5, i valori possibili sono da 1 a 9.

Riorganizziamo il nostro file di configurazione per ottenere il seguente risultato:

Se volessimo configurare dei servizi di emergenza, anziché usare il TAG BackEnd potremmo utilizzare Emergency. Tutto il resto rimarrebbe identico. Un server di emergenza interverrebbe solo qualora tutti gli altri backend fallissero.

Salviamo il file e modifichiamo il meccanismo di startup digitando:

Modifichiamo il file nella maniera seguente:

A questo punto riavviamo Pound. Digitiamo:

3. Installazione di Apache sui backend

Sui server di backend sarà sufficiente installare Apache, senza ulteriori configurazioni. Ricordiamoci che Pound, anche se interrogato in HTTPS si connetterà ai server di backend in HTTP.

Per farlo digitiamo semplicemente:

Una volta installato Apache modifichiamo l’output predefinito del webserver. Per farlo cancelliamo il file originale e creiamone uno nuovo.

In questo caso ci scriverò dentro il nome del WebServer, per esempio:

Configuriamo ora il backend affinché effettui il log per le richieste X-Forwarded-For.

Anzitutto abilitiamo l’estensione remoteip di apache.

Modifichiamo il file di configurazione digitando:

Modifichiamo il seguente paragrafo del file:

Faccio notare che l’IP 192.168.0.5 è quello della macchina col Pound.

Riavviamo Apache:

Ripetiamo questa procedura su ogni backend.

4. Prova di funzionamento

A questo punto colleghiamoci al nostro server con Pound, nel mio caso si trova all’indirizzo http://192.168.56.1/

Aggiornando più volte la pagina vedremo comparire, in modo casuale, la risposta del webserver-1 oppure del webserver-2

Oppure:

Vedi articolo

[ubuntu] Liberare spazio sulla radice quando è installato Plesk

Problema: con un’installazione di Plesk non sembra esserci spazio sufficiente sul disco per eseguire installazioni ed aggiornamenti con apt-get, oppure effettuare operazioni di database, come per esempio l’esportazione (si ottiene un errore mysqldump: Got errno 28 on write)

Il problema dipende tipicamente dalla mancanza di spazio sul disco. Una possibile soluzione l’abbiamo già vista in Liberare spazio su Ubuntu con errore apt-get “No space left on device”

Un’altra operazione che conviene fare è svuotare i file temporanei creati da Plesk che possono occupare anche diversi GB. Per farlo eseguiamo i seguenti comandi sul terminale:

Questo cancellerà i file temporanei più vecchi di 14 giorni. Se tale operazione non fosse sufficiente procediamo ad eliminare tutti i file temporanei:

Se neanche questo bastasse possiamo cercare i file per dimensione, digitando:

In questo caso cerchiamo file più grandi di 100MB. Controlliamo l’elenco dei file e valutiamo se possiamo eliminarne alcuni (tipicamente i file *.BAK del MySQL possono essere eliminati senza problemi)

Vedi articolo

[ubuntu] Installare Java 8 su Ubuntu 14.04

Java 8 è stato rilasciato nel marzo 2014 ed è disponibile, all’interno delle repository ufficiali di Ubuntu, solo per le versioni Ubuntu 14.10 e superiore.

Per poterlo installare su Ubuntu 14.04 bisogna procedere nel modo seguente, installando OpenJDK 8 dalla PPA repository.

Apriamo il terminale e aggiungiamo la repository digitando:

Aggiorniamo l’apt-get digitando:

A questo punto possiamo procedere all’installazione:

Se dovessero sorgere problemi con le dipendenze digitiamo:

Dopodiché possiamo eseguire nuovamente il comando precedente per procedere con l’installazione.

Vedi articolo

Come utilizzare su Linux l’SFTP per trasferire e gestire i file da riga di commando

L’SFTP (SSH File Transfer Protocol) è un protocollo simile al FTP, utilizzato però per trasferire e manipolare file mediante SSH.

I comandi utilizzati sono simili a quelli del FTP. E’ molto utile specialmente quando si devono trasferire i file da un server all’altro.

1. Collegarsi in SFTP

Per collegarci al server remoto in SFTP digitiamo:

Per collegarci al server remoto su una porta diversa dalla 22

Una volta collegati ci verrà richiesta la password.

2. Comandi disponibili in SFTP

Per ottenere l’elenco di tutti i comandi disponibili, digitiamo:

L’output sarà simile al seguente:

bye Quit sftp
cd path Change remote directory to ‘path’
chgrp grp path Change group of file ‘path’ to ‘grp’
chmod mode path Change permissions of file ‘path’ to ‘mode’
chown own path Change owner of file ‘path’ to ‘own’
df [-hi] [path] Display statistics for current directory or filesystem containing ‘path’
exit Quit sftp
get [-Ppr] remote [local] Download file
reget remote [local] Resume download file
help Display this help text
lcd path Change local directory to ‘path’
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln [-s] oldpath newpath Link remote file (-s for symlink)
lpwd Print local working directory
ls [-1afhlnrSt] [path] Display remote directory listing
lumask umask Set local umask to ‘umask’
mkdir path Create remote directory
progress Toggle display of progress meter
put [-Ppr] local [remote] Upload file
pwd Display remote working directory
quit Quit sftp
rename oldpath newpath Rename remote file
rm path Delete remote file
rmdir path Remove remote directory
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute ‘command’ in local shell
! Escape to local shell
? Synonym for help

3. Scaricare file e cartelle dal SFTP

Per scaricare un singolo file, nella posizione nella quale abbiamo aperto l’SFTP, digitiamo:

Per scaricare un file rinominandolo oppure scaricandolo in una posizione locale diversa:

Per scaricare una cartella digitiamo:

Per scaricare tutti i file della cartella corrente remota nella cartella locale attuale:

4. Caricare file e cartelle sul SFTP

Per caricare un file locale nella posizione remota, digitiamo:

Per caricare una cartella locale sul server remoto digitiamo:

Per caricare tutti i file della cartella locale sul server remoto:

5. Manipolare file e cartelle sul SFTP

Vedere tutto il contenuto di una cartella:

Creare una cartella:

Rinominare un file:

Rimuovere un file:

Rimuovere una cartella:

Vedi articolo

[mysql] Ripristinare utente root sul database MySQL su Ubuntu

Potrebbe accadere che si debba ripristinare la password dell’utente root del database MySQL. In tal caso su Ubuntu è sufficiente seguire la seguente procedura.

Interrompiamo l’esecuzione del servizio MySQL.

Facciamo ripartire il MySQL in modalità safe saltando le tabelle relative ai permessi.

Entriamo nel database:

Modifichiamo la password dell’utente root.

Fermiamo nuovamente il servizio:

Riavviamo il servizio.

Vedi articolo

Errori durante il file upload con PHP, Apache & nginx

Riallacciandomi al precedente articolo ([php] Configurare php.ini per l’upload dei file) voglio approfondire il problema del caricamento di file di grosse dimensioni su server che utilizzano PHP, Apache e nginx (nel mio caso specifico anche Plesk).

Gli errori che possono sorgere sono difatti innumerevoli e spesso apparentemente senza senso.

Cominciamo riepilogando il necessario per quello che riguarda il PHP. Come spiegato nel precedente articolo, assicuriamoci di avere una configurazione simile alla seguente nel file php.ini

In questo caso sto supponendo che caricheremo file fino a 512MB.

Per quanto riguarda il PHP ci dobbiamo assicurare che la quantità di memorie allocabile sia compatibile con la dimensione dei file da caricare e che lo sia anche il tempo di esecuzione.

Con un tempo di 1200 secondi si suppone che l’upload avverrà ad un minimo di 0,43MB/s. Questo significa che parte del caricamento dipende anche dalla velocità di upload del client, che potrebbe non essere sufficientemente alta da permettere al server di terminare l’operazione nei tempi consentiti.

Per inciso ricordiamoci che le classiche connessioni ADSL 20 Mega hanno upload che si aggirano attorno a 1 Mbit, ovvero 0,12 MB/s. Questo significa che il tempo di esecuzione dovrebbe essere per lo meno di 4.300 secondi (approssimando per eccesso).

Detto tutto questo si potrebbe incorrere in altri problemi, come ad esempio, lato client: Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR

Se si sta tentando di gestire l’upload tramite javascript e si incorre in questo errore, esso nulla ha a che fare con il protocollo HTTP/2 (e tanto meno è utile tornare al HTTP/1.1 o simili), ma è legato al fatto che la pagina non invia una risposta corretta. La risposta non viene inviata correttamente perché ad interrompere l’upload possono essere Apache oppure nginx.

Controllando il log del server si potrebbe trovare infatti un errore simile al seguente: 19855#0: *532 client intended to send too large body: 180584796 bytes

In questo caso sto cercando di caricare circa 172MB di file ed nginix blocca l’operazione.

Nel mio caso specifico posso verificare la cosa, confrontando su Windows la dimensione dei file che sto tentando di inviare al server con un unico upload.

Si può notare come la dimensione bloccata sia leggermente più grande dei file in upload, perché, come già discusso nel precedente articolo, il corpo che viene inviato al server contiene anche informazioni aggiuntive che vanno al di là dei singoli file che si stanno caricando.

A questo punto dobbiamo intervenire su nginx aggiungendo l’istruzione:

La configurazione predefinite di nginx sarebbe di 1m, mentre sotto Plesk è di 128m.

Questo parametro può essere modificato all’interno del file /etc/nginx/nginx.conf

Per farlo su Plesk procediamo nel modo seguente (è anche spiegato nella vademecum ufficiale, anche se ci sono delle piccole incongruenze):

  1. Colleghiamoci via SSH al Server con Plesk
  2. Creiamo un file di configurazione aggiuntivo a cui aggiungeremo l’istruzione precedente: echo 'client_max_body_size 128m;' > /etc/nginx/conf.d/aa_client_max_body.conf
  3. Verifichiamo se esiste il file /usr/local/psa/admin/conf/panel.ini
  4. Se non dovesse esistere creiamolo copiandolo dal file predefinito: cp /usr/local/psa/admin/conf/panel.ini.sample /usr/local/psa/admin/conf/panel.ini
  5. Aggiungiamo l’impostazione per la massima dimensione del corpo: echo -e "[webserver]\n nginxClientMaxBodySize = 512m\n" >> /usr/local/psa/admin/conf/panel.ini
  6. Modifichiamo i permessi: chmod 644 /usr/local/psa/admin/conf/panel.ini
  7. Riconfiguriamo il tutto: plesk sbin httpdmng --reconfigure-all
  8. Riavviamo nginx: service nginx restart
  9. Assicuriamoci che su tutti i webserver sia configurato il parametro giusto: nginx -T | grep client_max_body_size
  10. Nel caso non lo fosse possiamo usare l’istruzione, per riconfigurare il tutto: plesk repair web -y -v

In generale dovremmo assicurarci che, rispetto ai parametri suddetti, nelle configurazioni di nginx, sotto la voce server, compaiano i seguenti due valori:

Questi valori dovrebbero essere in linea (o superiori) con quelli scelti per il PHP.

Infine dobbiamo verificare che anche Apache consenta l’esecuzione dell’upload. Nel caso specifico potrebbero esserci due parametri ad influenzarlo: FcgidMaxRequestLen  e LimitRequestBody

Impostiamoli nel modo seguente:

Se abbiamo configurato tutto correttamente dovremmo essere in grado di caricare i file come definito all’inizio.

Vedi articolo

Installare Ubuntu 19.10 con webserver pronto all’uso [per esordienti assoluti]

Abbiamo già visto come installare Ubuntu 18.04.2 LTS e Ubuntu 16.04.2 LTS predisponendoli per fare da webserver. Oggi voglio ripetere la procedura con Ubuntu 19.10.

Prima di andare avanti vorrei far notare come questa non sia una versione LTS, ossia una distribuzione con supporto a lungo termine, quindi ne sconsiglio caldamente l’installazione per progetti di lunga portata.

Detto ciò proseguiamo come di consueto utilizzando VirtualBox ai fini di questa guida, benché la procedura sarebbe analoga per chiunque lo volesse installare su una macchina fisica.

Gli argomenti trattati saranno:

  1. Configurazione ed installazione Ubuntu Server 19.10
  2. Installazione e configurazione Apache
  3. Installazione e configurazione MySQL
  4. Installazione e configurazione PHP
  5. Installazione di phpMyAdmin
  6. Ulteriori configurazioni

1. Configurazione Ubuntu Server 19.10

Anzitutto andiamo sul sito ufficiale di Ubuntu e procuriamoci la ISO per l’installazione. Assicuriamoci di selezionare la versione server e poi premiamo download:

A questo punto andiamo a creare la nostra macchina virtual con VirtualBox. All’interno di VirtualBox premiamo su CTRL+N per avviare l’installazione di una nuova macchina.

Diamo un nome alla macchina e scegliamo eventualmente il percorso di installazione, come nell’immagine di sopra. Assicuriamoci anche che il tipo sia settato su Linux e la Versione su Ubuntu (64-bit). Premiamo su Successivo.

Selezioniamo la quantità di memoria da destinare alla macchina virtuale (1GB è più che sufficiente). Ancora Successivo.

Lasciamo l’opzione selezionata Crea subito un nuovo disco fisso virtuale per crearne uno nuovo e andiamo avanti.

Se non abbiamo esigenze specifiche lasciamo il tipo di disco su VDI e procediamo avanti.

Lasciamo l’allocazione del disco su Allocato dinamicamente. In questo modo il disco crescerà solo in presenza di file effettivi, occupando meno spazio sulla macchina ospite. Andiamo avanti.

Diamo un po’ di spazio ad Ubuntu, visto che comunque andrà ad occupare solo quello necessario, mettendo il disco su 20GB.

A questo punto nell’elenco delle nostre macchine virtuali vedremo comparire quella con Ubuntu.

Una volta selezionata spostiamoci in alto e clicchiamo sul tasto verde Avvia per farla partire.

Al primo avvio ci verrà chiesto se caricare una ISO per l’avvio della macchina virtuale. Clicchiamo sulla cartellina gialla e poi selezioniamo la ISO che abbiamo scaricato in precedenza, se abbiamo fatto tutto bene, prima di procedere avanti, vedremo una situazione simili alla seguente:

Aspettiamo che compaia la sezione della selezione della lingua. Tanto per cambiare manca l’italiano, perciò proseguirò in inglese (o per fare uno scherzo proseguo in croato!).

Premiamo INVIO. Ci potrebbe chiedere se vogliamo aggiornare l’installer, diciamo di sì premendo di nuovo INVIO.

Adesso ci verrà chiesto il layout della tastiera. Dal momento che sto usando una tastiera italiana dovrò impostare il layout su Italian, come nell’immagine in alto, altrimenti potrei avere problemi specialmente con i caratteri speciali. Per farlo mi sposto in alto con le frecce direzionali e seleziono il menu premendo SPAZIO. Una volta trovata la voce giusta premo nuovamente INVIO. Dopodiché posso tornare alla voce Done e premere INVIO per procedere.

Mi verrà chiesto di configurare la rete, posso premere nuovamente INVIO e andare avanti.

Sulle impostazioni del proxy, a meno di non essere a conoscenza di diversa configurazione, lascio tutto com’è e premo INVIO.

L’indirizzo del mirror per la repository lo posso lasciare tale e quale, premendo ancora INVIO.

Alla voce successiva seleziono la seconda opzione, quella di configurazione dell’intero disco con utilizzo di LVM. Per approfondimenti sull’argomento consiglio LVM, gestore logico dei volumi su Ubuntu [per pinguini alle prime armi]

Mi verrà chiesto quale disco utilizzare, avendone uno soltanto non ho molto da scegliere, in caso contrario potrei selezionare il disco sul quale intendo installare le partizioni principali del server.

A questo punto mi verrà proposto un riassunto di tutte le modifiche che saranno applicate al disco. Se non ho altre esigenze posso premere INVIO e procedere.

Comparirà un avviso che mi segnalerà che l’intero contenuto del disco adesso verrà cancellato e sostituito con la nuova installazione; mi sposto con le frecce direzionali su Continue e premo INVIO.

Adesso inseriamo il nostro nome, scegliamo un nome per il server e username e password, compilando i campi come di seguito.

Una volta compilati tutti i campi premiamo INVIO.

A questo punto ci viene chiesto se vogliamo installare anche il server OpenSSH, che ci permetterà di collegarci in SSH al nostro server. Premiamo la SPAZIO per selezionare l’opzione e poi premiamo INVIO. Prima di premere invio la configurazione dovrebbe apparire come la seguente.

Saltiamo la selezione di snaps per il server (ovvero configurazioni preconfezionate, come viene spiegato alle singole voci). Spostiamoci in basso e selezioniamo semplicemente Done e poi premiamo INVIO.

Se abbiamo fatto tutto bene comincerà un’installazione come la seguente:

Una volta terminata ci verrà chiesto di riavviare il sistema e rimuovere il supporto di installazione. Premiamo semplicemente INVIO.

Se ci dovessero essere problemi con l’unmounting del cdrom, e dovesse comparire una schermata come quella di seguito, sarà sufficiente premere INVIO un’altra volta per dire al sistema di procedere comunque (VirtualBox avrà già smontato l’ISO per conto suo probabilmente).

A questo punto ci si dovrebbe trovare di fronte ad una schermata simile alla seguente:

Faccio notare che continua a persistere il ridicolo problema delle ultimissime versioni di Ubuntu, per cui la schermata di login appare prima che sia terminato il processo di avvio, cosa che riempie la shell di output anche dopo l’apparizione del prompt di ingresso.

Per effettuare il login sarà sufficiente premere nuovamente INVIO e poi digitare il nome utente e la password che abbiamo creato in precedenza.

Adesso, prima di procedere, voglio configurare la scheda di rete di VirtualBox, in modo da poter utilizzare Putty per collegarmi alla macchina virtuale. Lo faccio principalmente per poter copiare ed incollare i comandi sul terminale, cosa non possibile dall’interfaccia di VirtualBox stesso.

Per spegnere il sistema operativo digitiamo quindi:

Una volta spenta la macchina virtuale torniamo sull’interfaccia di VirtualBox e andiamo su File > Preferenze (che possiamo aprire anche premendo CTRL+G)

Andiamo su Rete e clicchiamo sul piccolo pulsante della scheda con il più verde sulla destra che ci permetterà di creare una nuova Rete con NAT da far utilizzare alla nostra macchina virtuale.

Configuriamo la rete nel modo seguente:

Clicchiamo su Inoltro del porte e configuriamo le porte da inoltrare dalla scheda di rete virtuale sul nostro computer alla rete interna di VirtualBox.

Configuriamo l’inoltro delle seguenti porte:

 

Stiamo dando per scontato che la macchina virtuale si troverà all’indirizzo 10.0.2.4 della rete interna (che è tipicamente l’indirizzo predefinito che viene assegnato dal DHCP di VirtualBox).

Detto questo premiamo OK su tutte le finestre aperte e torniamo alla nostra macchina virtuale. Dopo averla selezionata premiamo il tasto Impostazioni (vicino a quello di Avvio).

Dalla schermata delle Impostazioni andiamo su Rete e selezioniamo Rete con Nat, scegliendo dal menu sottostante la Rete Ubuntu che abbiamo creato prima.

Fatto tutto questo premiamo OK e avviamo di nuovo la nostra macchina virtuale. Una volta che sarà ripartita apriamo Putty e digitiamo come indirizzo di connessione 192.168.56.1

Premiamo OK. Se abbiamo fatto tutto correttamente ci verrà chiesto di effettuare la connessione.

Apparirà una schermata che ci chiederà di copiare la chiave di crittografia. Premiamo .

Inseriamo le credenziali e siamo pronti a procedere oltre.

2. Installazione e configurazione Apache

Adesso procediamo con l’installazione di Apache. Aggiorniamo anzitutto tutti i riferimenti della repository digitando:

Dopodiché digitiamo:

Alla domanda se proseguire digitiamo Y e poi premiamo INVIO. Aspettiamo che l’installazione termini. Se tutto è andato bene aprendo l’indirizzo http://192.168.56.1/ dal nostro browser dovremmo vedere la schermata predefinita del webserver Apache nel modo seguente:

3. Installazione e configurazione MySQL

Adesso installiamo il Server MySQL per il database. Per farlo digitiamo:

Come al solito confermiamo l’installazione con Y e aspettiamo che sia terminata.

Una volta terminata l’installazione digitiamo:

Questo avvierà una procedura di configurazione del nostro database, durante la quale ci verranno richieste diverse cose. Alle varie domande rispondiamo rispettivamente:

Press y|Y for Yes, any other key for No: Y

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

(dove: STRONG Length >= 8, numeric, mixed case, special characters and dictionary file)

New password: 4y!7dz=6/%lF-4fes2=lkpl|E^DTL*  (questo è un esempio di password che possiamo mettere, questa password ha una qualità di 180bit e una lunghezza di 30 caratteri)

Se la passowrd è buona ci verrà detto qualcosa come:

Estimated strength of the password: 100

Proseguiamo:

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

Fatto questo il database è pronto per essere utilizzato.

L’utente predefinito del database sarà root e la password quella che abbiamo scelto prima.

4. Installazione e configurazione PHP

Adesso installiamo il PHP, aggiungendo la libreria per Apache e quella per il database MySQL.

Faccio notare che in questo modo verrà installato l’ultimo PHP disponibile, che nel mio caso specifico, come si può vedere anche dall’immagine di seguito, è il PHP 7.3.

Una volta installato il PHP verifichiamo che sotto Apache siano configurate le pagine predefinite come index.php per l’esecuzione. Digitiamo:

Se va tutto bene sotto la voce DirectoryIndex dovremmo trovare, tra gli altri file, anche index.php. Se così non fosse lo aggiungiamo come nell’immagine seguente:

Nel caso avessimo modificato il file salviamo il tutto premendo CTRL+O, altrimenti direttamente CTRL+X per uscire dall’editor.

Fatte tutte queste belle cose riavviamo Apache.

5. Installazione di phpMyAdmin

Per installare il phpMyAdmin utilizzeremo il composer, per cui installiamolo digitando:

Il composer è uno strumento per la gestione delle dipendenze e delle librerie del PHP, che ci permette di installare progetti in PHP come è per l’appunto il phpMyAdmin.

A questo punto installiamo il minimo indispensabile per usare il phpMyAdmin digitando:

Riavviamo Apache digitando come al solito:

Fatto tutto questo possiamo procedere con l’installazione vera e propria. Spostiamoci anzitutto dentro a /var/www:

Assegniamo il nostro utente alla cartella html (che è la cartella predefinita del nostro webserver raggiungibile dall’indirizzo di prima):

Entriamo dentro con:

A questo punto installiamo qui il nostro phpMyAdmin, che creerà una sua cartella alla quale assegneremo successivamente Apache come utente. In realtà la cartella del phpMyAdmin potrebbe essere creata a nostro piacimento in qualsiasi posizione, purché abbia un senso per noi. Tradizionalmente viene inserito sotto etc oppure share. Io l’ho inserito direttamente sotto www per una questione di ordine. (Qualora la si dovesse mettere altrove dovremmo ricordarci di aggiungere il percorso anche ai VirtualHost)

ATTENZIONE! composer non va lanciato come root/super user, quindi non va utilizzato sudo anteposto al commando. 

Aspettiamo con pazienza l’esito dell’installazione che potrebbe richiedere qualche minuto, soprattutto all’inizio quando non sembra succedere niente di che. Se tutto è andato bene vedremo un output come quello di seguito.

In caso di errore assicuriamoci di aver installato tutte le librerie per il PHP come di sopra e di aver riavviato Apache.

Prima di testare il phpMyAdmin così installato ripristiniamo sulla cartella html l’utente predefinito di Apache digitando:

A questo punto digitiamo nel browser http://192.168.56.1/phpmyadmin/

Se abbiamo fatto tutto bene dovremmo vedere qualcosa come questo:

Provando ad inserire root e la password creata in precedenza potremmo incorrere nel seguente errore:

Nessun problema. Torniamo sul terminale e digitiamo:

Inseriamo la password creata in precedenza per l’utente root. (per capirsi nel mio caso la password era 4y!7dz=6/%lF-4fes2=lkpl|E^DTL*)

Creiamo un utente apposito per gestire il database da phpMyAdmin. Per farlo eseguiamo la seguente sequenza di query:

L’utente così creato sarà:

username: admin

password: HGOqXovUhyZJ4}08}eg-lAiOM])}@lYt

Proviamo ad accedere con tali dati da http://192.168.56.1/phpmyadmin/

Nel caso dovesse apparire l’errore mysqli::real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] eseguiamo i seguenti due comandi sul database.

Se è andato tutto bene possiamo riprovare ad accedere e vedremo una situazione simile a questa.

6. Ulteriori configurazioni

A questo punto abbiamo finito la configurazione principale e dovremmo fare ancora qualche implementazione, configurando cose come:

  1. Sistemare il Firewall
  2. Mettere in sicurezza Apache
  3. Configurare fail2ban ed altri eventuali servizi
  4. Aggiungere un VirtualHost al webserver
Vedi articolo

[bash] Script per reimpostare i permessi della cartella system su Plesk

Oggi mi sono trovato di fronte al problema di reimpostare tutti i permessi sulla cartella /var/www/vhosts/system/ appartenente a Plesk.

Nel caso specifico esiste un articolo di riferimento della guida di Plesk su come reimpostare i permessi e quali dovrebbero essere quelli corretti. Per l’articolo originale vedere: How to restore default permissions in the virtual host directory on Linux?

Nell’articolo è possibile trovare anche un file bash che però non reimposta i permessi sulla cartella system.

Allora ne ho realizzato uno mio, seguendo lo schema dei permessi illustrato nell’articolo medesimo:

Il codice in bash è il seguente:

 

Vedi articolo

[apache] Utilizzare ApacheBench per testare le performance del nostro server Apache

Anzitutto installiamo ApacheBench se non lo abbiamo già fatto, eseguendo il comando:

Normalmente Apache viene eseguito sulla porta 80 (http) e 443 (https), ma queste porte possono cambiare, come, per esempio, nel caso di una configurazione combinata con nGinx. Per scoprire su quali porte si trova Apache è sufficiente digitare da terminale:

Dovremmo vedere un output simile a questo:

In questo caso testiamo apache sulle porte 7080 e 7081.

Per lanciare il test digitiamo:

Questo eseguirà 500.000 richieste a pacchetti di 500 richieste per volta (richieste concorrenti). Il parametro -s 3600 imposta il timeout per l’esecuzione su 3600 secondi, mentre il valore predefinito è di 30 secondi.

Otterremo un risultato simile a questo:

Questo significa che per rispondere a 500.000 richieste al tasso di 500 richieste per volta, il server ha impiegato in tutto 25,163 secondi. Il tempo medio per ogni chiamata (500 richieste concorrenti) è di 25,163 millisecondi. Il tempo medio per ogni singola richiesta concorrente è quindi di 0,050 ms, dove 25,163ms / 500 = 0,050326 ms.

Adesso possiamo provare ad aumentare il carico sul server aumentando il numero di richieste concorrenti.

Il risultato sarà simile a questo:

Vediamo come il tempo per singola richiesta concorrente è passato da 0,050 ms a 0,660 ms. Il numero di richieste concorrenti è aumentato di 2 volte, mentre il tempo di risposta è aumentato di 13,2 volte.

Se proviamo ad eseguire invece 5.000 richieste concorrenti digitando:

Otterremo il seguente errore:

socket: Too many open files (24)

Questo significa che abbiamo superato il massimo numero di file aperti contemporaneamente e consentiti dal sistema. Tale configurazione dipende dalle configurazioni di sicurezza del sistema ed è modificabile in /etc/security/limits.conf

Digitiamo:

Dentro il file possiamo stabilire i singoli servizi quali limiti avranno, per aumentare il limite di tutti i servizi possiamo aggiungere in fondo al file:

Questo imposterà il limite al massimo valore consentito.

Se volessimo impostare il limite a 5000 file contemporanei dovremmo digitare ovviamente 5000.

Lo stesso risultato si può ottenere con:

Il comando non renderà la modifica persistente e al prossimo riavvio il valore tornerà a quello predefinito.

A questo punto possiamo ritentare il benchmark con:

Attenzione ad eseguirlo al netto del limite possibile, perché è probabile che si raggiunga la saturazione per via di altri file aperti quando si è prossimi al limite.

Vedi articolo
1 2 3 5