Open Journal System per bibliotecari e tecnici informatici – II
Serie di articoli suddivisi in tre parti
I Installazione e introduzione rapida
II Il Server
III Temi e grafica
Il server
Questa è una breve introduzione all’uso dei principali comandi linux indispensabili alla gestione di un piccolo server su cui installare i propri documenti o semplici applicazioni. Vedremo in particolare l’esempio dell’applicazione Open Journal System. Lo sviluppo del cloud computing ha modificato in maniera sostanziale non solo la modalità di distribuzione delle applicazioni ma anche il modo con cui procurarsi uno “spazio” web.
I servizi più ampi e articolati sono forniti da Amazon AWS, Google Cloud, Microsoft Azure. Noi installermo un’applicazione web su un server remoto, pubblicamente accessibile, e sarà più semplice e veloce rivolgerci a uno dei seguenti fornitori di servizi cloud digitalocean.com, linode.com o a amazonlightsail.com. In questo tutorial utilizzeremo digitalocean.com.
I server (in realtà partizioni logiche di macchine denominate Virtual Private Server ) in digitalocean vengono chiamati ‘droplets’. Potete registrarvi gratuitamente e utilizzare un server per due mesi utilizzando questo link.
Create un server cloud utilizzando il sistema operativo Ubuntu e scegliete la dimensione d’ingresso: 512 MB di RAM, con un disco SSD da 20 GB. all’inizio sarà sufficiente. La zona geografica dove si troverà il server è abbastanza ininfluente, ma scegliete quella più vicina ai vostri futuri utenti, Francoforte nel nostro caso. Concludete ora la creazione del server saltando gli altri passaggi, ritorneremo presto sulla questione del collegamento SSH che ci consente di accedere al server da remoto.
Supponiamo che l’indirizzo IP del vostro server sia 11.11.11.11. Accedete via ssh digitando nella console:
ssh root@11.11.11.11
e digitate ora la password che vi sarà stata inviata per mail. La console (o terminale) è lo strumento principale di cui vi servirete per lavorare sul server.
Leggete questo tutorial che vi consente di creare correttamente gli utenti e assegnare le autorizzazioni.
Suppongo che abbiate già installato in locale sulla vostra macchina una copia di OJS, abbiate creato una rivista e caricato qualche articolo (indicazioni su come fare le trovate su ojs tutorial.
Procederemo ora passo passo a preparare un server che ci consentirà di pubblicare i contenuti che si trovano riuniti nelle diverse cartelle che durante la lezione 1 abbiamo messo in /var/www/html
. Copieremo questi file sul server. Dovremo aggiungere i dati che si trovano sul database, vedremo come scaricarli dal database in locale e caricarli sul database che avremo isntallato sul server. L’obiettivo è creare sul server una copia dei contenuti che continueremo a mantenere sulla nostra macchina locale.
Come abbiamo già visto nella lezione 1 l’amministratore di un sistema linux si chiama root
. Root crea e gestisce tutti gli utenti, gli utenti sono suddivisi in gruppi. I gruppi che incontreremo sono, per ora, solo due. Il gruppo degli utenti che in qualche situazione particolare devono agire come root
, gruppo sudo
, e il gruppo a cui appartiene il web server: www-data
.
Per cambiare la propria passwd si deve digitare: passwd
se volete cambiare la password di un utente: sudo passwd user
Per creare un nuovo utente: sudo adduser pippo
Per aggiungerlo al gruppo ‘sudo’ che autorizza i suoi membri a molte operazioni da ‘amministratore’:
sudo usermod -aG sudo pippo
Tutti i file (e le directory e i programmi) sono dotati di alcuni privilegi. I privilegi saranno diversi per l’autore del file (owner), per il gruppo a cui appartiene (group) e distinti da tutti gli altri utenti (others). I privilegi saranno quindi distinti in tre gruppi e possono essere rappresentati sia in lettere, ‘r’ lettura, ‘w’ scrittura e ‘x’ esecuzione, sia in numeri, ‘4’ lettura, ‘2’ scrittura e ‘1’ esecuzione.
Se eseguiamo il comando ls -l
nella console il risultato potrebbe essere:
-rw-r--r-- 1 claudio www-data 2034 Dec 13 2016 README.md
drwxrwxr-x 8 claudio www-data 20480 Jan 11 11:26 cache
drwxr-xr-x 28 claudio www-data 4096 Sep 1 2016 classes
-rw-rw-r– 1 claudio www-data 14581 Mar 19 2017 config.inc.php
drwxr-xr-x 9 claudio www-data 4096 Sep 1 2016 controllers
drwxr-xr-x 3 claudio www-data 4096 Sep 1 2016 dbscripts
drwxr-xr-x 4 claudio www-data 4096 Sep 1 2016 docs
-rw-r–r– 1 claudio www-data 1177 Dec 13 2016 favicon.ico
-rw-r–r– 1 claudio www-data 11510 Jul 18 2016 index.html
-rw-r–r– 1 claudio www-data 2981 Dec 13 2016 index.php
`
In questo caso, al primo file, e si capisce che è un file e non una directory perché non c’è la ‘d’, si attribuiscono i diritti di scrittura e lettura all’owner del file (si tratta di un file in markdown che in questo contesto non ha bisogno di essere eseguito) e solo read al gruppo www-data (cioè al web server) e agli altri. Per ragioni di sicurezza bisogna evitare di dare al ‘gruppo’ e agli ‘altri’ autorizzazioni complete, cioè 777, rwxrwxrwx
, normalmente conviene limitarsi a 644, rw-rw-r--
per i files e 755, drwxr-xr-x
per le directories. Quando è necessario attribuire diverse autorizzazioni viene sempre specificato dagli sviluppatori. Ad esempio installando OJS viene chiesto di attribuire ad alcune directories 774, rwxrwxr-x
.
Per modificare le autorizzazione di accesso:
chmod 755 nome-file
Altri comandi di uso molto frequente sono i seguenti:
creare una nuova directory mkdir nome-directory
cambiare directory cd /path/alla/directory
lista dei file in una directory ls
lista con tutti (‘a’ sta per ‘all’) i dettagli sui file ls -la
lista con dettagli in ordine temporale (prima i nuovi) ls -lt
cancella un file rm nome-file
tipico esempio catastrofico, cancella in maniera ricorsiva tutti i file partendo dalla directory root rm -rf /
Gestire gli accessi via ssh
Avere un accesso ssh vuol dire anche poter copiare file da e verso il server in maniera sicura usando il comando scp
oppure trasferirli via ftp con sftp
. La ‘s’ sta sempre per ‘sicuro’. Con un semplice client come il diffusissimo filezille (o simili) potete collegarvi via sftp, usando la stessa user e password che usate per il collegamento ssh e avrete i vantaggi di poter utilizzare unì’interfaccia grafica.
Se state lavorando sulla console e dovete copiare pochi file, scp
è decisamente efficace. Ad esempio
scp nome-file user@11.11.11.11:~/
copierà ‘nome-file’ direttamente sulla vostra directory home sul server.
La configurazione dell’accesso ssh viene gestita attraverso comandi inseriti nel file sshd_config.
Digitate dalla console sudo nano /etc/ssh/sshd_config
, nano
è il nome di un editor di testo sempre presente nella console.
In questo modo potrete abilitare o disabilitare le caratteristiche di ssh che preferite. Per ragioni di sicurezza è meglio disabilitare l’accesso con password a root
. Questo serve a impedire che qualche malintenzionato possa accedere come amministratore.
Andate alla riga
PermitRootLogin yes
e sostituite ‘yes’ con ‘no’. Aggiungete poi alla fine del file
Match User claudio,altri-user,
PasswordAuthentication yes
salvate il file ma prima di uscire dalla console, apritene un’altra e provate a vedere se riuscite ad accedere al vostro server. Non si sà mai. Non sareste il primo a chiudersi fuori da casa propria.
La password e lo user di cui si sta parlando ovviamente sono quelle degli utenti già inseriti nel sistema. Se siete curiosi di sapere chi e quanti sono li trovate tutti elencati nel file /etc/passwd
(le password ovviamente sono criptate). Vi troverete tutti gli utenti, compresi il server web www-data
, sshd
che è l’utente che gestisce l’accesso ssh, e così via. Tutti i servizi (‘daemon’ nel mondo linux) hanno il proprio ‘utente’.
Una volta terminate le correzioni al file di configurazione dell’ssh, riavviate il servizio (systemctl gestisce i comandi di systemd, gestore dei diversi servizi che vengono necessariamente avviati al boot del sistema).
sudo systemctl reload sshd
In Ubuntu 14 e nei precedenti, dove non era presente ‘systemd’ il comando è leggermente diverso
sudo service ssh restart
Installazione di un server Apache2 e un database mysql
Fin’ora abbiamo lavorato su una macchina praticamente vuota, ci siamo preoccupati degli accessi e della definizione degli utenti. Il servizio disponibile per l’accesso da remoto è assicurato dal programma che sappiamo chiamarsi ssh. noi però vogliamo che molte persone accedano ai nostri contenuti. Oltre all’ssh, che è come una porta di servizio solo per noi e per qualche fornitore di fiducia, dovremo installare un programma che consenta l’accesso al maggior numero di persone possibili. Questo programma si chiama server web. È collegato a una rete (Internet) e tutte le volte che riceve un messaggio, attraverso quella rete, risponde. Invia così il file richiesto o i dati richiesti. Il linguaggio che usa per questa messaggistica è l’HTTP, mentre lo standard usato nella parte hardware è il TCP/IP.
I più diffusi server web sono Apache e Nginx. Per installare Apache
sudo apt-get update
sudo apt-get install apache2
Per i dattagli leggete l’ottimo https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04
Per conoscere un po’ meglio Apache, guardiamo prima di tutto alla sua directory
cd /etc/apache2/
e in particolare il file 000-default.conf
che contiene le indicazioni su dove si trovano i file, che il server invia agli utenti, ed eventuali link all’applicazione che genera file dinamici.
Ecco un esempio:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
L’installazione di OJS non richiede la modifica di questo file. Altre applicazioni, prima di tutto WordPress, ad esempio, ne richiede poche e semplici. Ma questa è materia di un’altra lezione.
Tutte le volte che si effettuano modifiche ai file di Apache, come è il caso per gli altri servizi, è meglio effettuare un controllo
sudo apache2ctl configtest
e poi riavvare il servizio
sudo systemctl restart apache2
.
Il server web normalmente si avvia automaticamente all’accensione ma se necessario si possono usare i seguenti comandi:
sudo systemctl disable apache2
sudo systemctl enable apache2
Gli altri comandi da ricordare sono i seguenti:
sudo systemctl stop apache2
sudo systemctl start apache2
Quando si installa php è necessario effettuare una modifica nel file /etc/apache2/mods-enabled/dir.conf
Da:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
a (spostando indix.php nella prima posizione)
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
Durante l’installazione di OJS bisogna controllare che tutte le libraries necessarie siano presenti, in particolare quelle destinato all’xml e quella per l’mbstring.
sudo apt-get install php7.0-xml
sudo apt-get install php7.0-mbstring
Per rendere operativi questi programmi è necessario riavvare apache:
sudo systemctl restart apache2
Il database MySQL
Per installare un database come MySQL sul vostro server:
sudo apt-get install mysql-server php7.0-mysql
Dovrete assegnare una password all’utente root
(questo utente non è il root
del server, bensì il root
del database), ricordatevela perché vi servirà nell’installazione di OJS.
sudo mysql_install_db
inizializzerà il database.
Su digitalocean è disponibile
sudo mysql_secure_installation
che provvederà a controllare le password e a compiere varie operazioni di sicurezza.
A questo punto procedete con
mysql -u root -p
utilizzate la password appena creata.
Avrete così accesso, attraverso un client integrato in MySQL a quello che , di nuovo, è un server, MySQL server. Come vedete l’architettura client-server è ubiqua in tutto il mondo digitale.
Create il database che destinerete a OJS:
CREATE DATABASE ojs;
A questo punto avete un database, un utente e una password, oltre al nome dell’host, che è ‘localhost’, e potrete procedere all’installazione di OJS come abbiamo visto nella lezione 1.
Il linguaggio in cui sono espressi questi comandi, anche se forse non ve ne siete accorti, è sql. se volete conoscerlo un po’ meglio leggete https://www.guru99.com/sql.html , https://www.guru99.com/select-statement.html oppure https://www.w3schools.com/sql/.
Pubblicare la vostra rivista
A questo punto potete caricare i file che avete preparato sulla vostra macchina in locale via scp direttamente su /var/www/html
.
scp /path/alla/vostra/directory user@11.11.11.11:/var/www/html
Dovrete poi caricare i file che si trovano nella directory dedicati agli articoli
scp /path/a/files user@11.11.11.11:/var/www/files
e infine il database:
mysqldump -u root -p nome_vostro_db > nome_db.sql
Sul server remoto, non importa in quale dierctory, va bene anche la vostra home
scp /path/alla/vostro/file.sql user@11.11.11.11:~/
Quindi collegatevi via ssh in remoto:
ssh user@11.11.11.11
mysql -u root -p ojs < file.sql
dove root
è l’utente che avevate già creato e ojs
il nome del database.
Ora avete sul server remoto una copia della vostra rivista che potrà essere letta dai vostri lettori.