Server Linux (appunti per il master in comunicazione storica)

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. 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.

Questo tutorial richiede  una macchina linux, mac os o anche windows, purché  windows 10 con installato il sottosistema ubuntu (su linux in windows leggete questa pagina del sito Microsoft). Direttamente dalla vostra console potrete gestire un server, o gruppi di server a seconda delle vostre esigenze.

I servizi più ampi e articolati sono forniti da Amazon AWS, Google Cloud, Microsoft Azure. Noi ci limiteremo a installare un server web su un server remoto, pubblicamente accessibile, e sarà più semplice e veloce rivolgerci a digitalocean.com, linode.com o amazonlightsail.com. In questo tutorial utilizzeremo digitalocean.com.

I server (VPS in realtà) in digitalocean vengono chiamati ‘droplets’. Potete registrarvi gratuitamente e utilizzare un server per due mesi utilizzando questa pagina.

Create un server cloud utilizzando Ubuntu 16.04.02 e scegliete la dimensione d’ingresso:  512 MB di RAM, con un disco SSD da 20 GB. 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 della chiave SSH.

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.

Leggete https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04

Primo step: aprite un account github dove conserverete copia di tutti i file degli esercizi

Secondo step installate e impratichitevi con un editor di testo:

Sublime Text https://www.sublimetext.com/

Atom https://atom.io/

Bracket http://brackets.io/

Visual Studio Code https://code.visualstudio.com/

Da non dimenticare vim (o vi o nano) che troverete direttamente sui server, oppure il classico emacs, gedit o notepad++

Terzo step preparate una macchina su cui farete esperimenti sia di server web che sviluppo applicazioni.

Per qualsiasi informazione stackoverflow

manuale di bash https://www.gnu.org/software/bash/manual/bash.html

manuale di bash scripting http://tldp.org/LDP/Bash-Beginners-Guide/html/

manuale avanzato http://tldp.org/LDP/abs/html/

Per interagire con il sistema operativo si deve usare una shell (command-line interface).

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’, il gruppo a cui appartiene il web server: www-data.

Per cambiare la passwd si deve digitare:

passwd
sudo passwd user #se volete cambiare la password di un 
# utente e avete l'autorità per farlo

Per creare un nuovo utente:

sudo adduser pippo

Per aggiungerlo al gruppo ‘sudo’ che autorizza i suoi membri a molte operazioni da ‘amministratore’ scrivete

sudo usermod -aG sudo pippo

 Per cambiare la passwd si deve digitare:

passwd
sudo passwd user #se volete cambiare la password di un 
# utente e avete l'autorità per farlo

Per creare un nuovo utente:

sudo adduser pippo

Per aggiungerlo al gruppo ‘sudo’ che autorizza i suoi membri a molte operazioni da ‘amministratore’ scrivete

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, ad esempio l’owner avrà diritto di scrittura, lettura ed esecuzione.

  • read 4
  • write 2
  • execute 1

In questo caso si attribuiscono i diritti di scrittura, lettura ed esecuzione all’owner del file (prima cifra) e solo read e write al gruppo e agli altri. I file web hanno in genere queste autorizzazioni con l’owner che appartiene al gruppo www-data o in cui l’owner è proprio www-data

chmod 755 file

Altri comandi:

mkdir
cd # cambiare directory
ls #lista dei file in una directory
ls -la # lista con dettagli sui file
ls -lt # lista con dettagli in ordine temporale (prima i nuovi)
rm file # cancella un file
rm -rf / # tipico esempio catastrofico, cancella in maniera 
# ricorsiva tutti i file partendo dalla directory root

Installate un server Apache2, un database mysql e caricate qualche semplice pagina web.

I più diffusi server web sono Apache e Nginx.

Installate un server Apache2, un database mysql (nel caso serva alla vostra applicazione) e caricate qualche semplice pagina web.

Per conoscere un po’ meglio un server 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 ed eventuali link all’applicazione che genera file dinamici.

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>

Tutte le volte che si effettuano correzioni è necessario effettuare un controllo

sudo apache2ctl configtest

Il server normalmente si avvia automaticamente (daemon o servizio) ma se necessario si possono usare i seguenti comandi:

systemctl gestisce i comandi di systemd (gestore dei diversi servizi che vengono necessariamente avviati al boot del sistema)

sudo systemctl disable apache2
sudo systemctl enable apache2

Gli altri comandi necessari sono i seguenti:

sudo systemctl stop apache2
sudo systemctl start apache2
sudo systemctl restart apache2

A questo punto potete caricare i file via scp direttamente su /var/www/html .

Consultate

man scp

per le informazioni necessarie.

Se vorrete utilizzare un’applicazione nodejs bisognerà configurare il server web in modo leggermente differente.

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04 o qualcosa simile a

Nel file httpd.conf scrivete

ProxyPass /node http://localhost:8000/

Controllate che non siano commentate le seguenti righe

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Infine nella vostra applicazione lanciate il solito server socket

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Apache!\n');
}).listen(8000, '127.0.0.1');