Le applicazioni per smartphone possono usare un database locale (come SQLite) oppure un DBMS remoto (come MySQL). Il DBMS remoto è un server, cioè ha una porta aperta dove rimane in attesa di connessione. Per motivi di sicurezza il server NON viene esposto nella rete pubblica. Quando si usa un database remoto si preferisce esporre un server web (http) che espone API di tipo REST
Questa immagine riassume lo schema appena descritto
Di solito nell’ambiente JavaScript si usano database di tipo noSQL, come MongoDB. Tuttavia MongoDB non verrà usato perchè è stato rimosso (per motivi di licenza) dalle più famose distribuzioni Linux nel 2018.
In alternativa si potrebbe usare il DBMS Apache Cassandra, che è abbastanza diffuso anche nel cloud. Per le caratteristiche di questo DBMS si veda il prossimo articolo1
Per installare Cassandra, dato che non è pacchettizzato, si può usare un container di Docker.io
apt update
apt install docker.io
systemctl status docker
docker pull cassandra:latest
Ogni container può essere isoltato dalla rete esterna, ma può anche comunicare con la rete interna, grazie ad un bridge virtuale. Ci sono tre reti virtuali predefinite, che si possono osservare con questo comando (come superutente):
docker network ls
La rete detta bridge
permette di comunicare solo con la macchina reale (host)
Questo comando avvia il container cassandracontainer dentro la rete bridge
docker run --rm -d --name cassandracontainer --hostname cassandra --network bridge cassandra
attendere almeno 20 secondi il completamento del precedente comando:
docker container ls
Per entrare nel terminale (del container):
docker exec -it cassandracontainer bash
root#
Nella rete bridge si avranno questi indirizzi IP
- IP del router virtuale: 172.17.0.1
- IP del container: 172.17.0.2
Gli indirizzi IP sono visualizzabili con questo comando
root# ip addr
In particolare si osserverà la scheda di rete virtuale:
eth0@if10:
inet 172.17.0.2/16
Sulla macchina reale si visualizza la nuova scheda di rete
ip addr
dove si osserverà la scheda virtuale:
docker0:
inet 172.17.0.1/16
Si può provare (dal terminale del container) a pingare la macchina reale (host)
root# ping 172.17.0.2
È utile installare nano (nel container) per modificare la configurazione di Cassandra
root# apt update
root# apt install nano
root# nano /etc/cassandra/cassandra.yaml
Cercare “authenticator” nella configurazione di Cassandra e modificare in questo modo:
authenticator: PasswordAuthenticator
Questa modifica diminuisce la sicurezza del server, che dovrebbe comunicare solo con client che hanno un certificato TSL/SSL
In questo modo si potrà accedere senza certificato, usando la password di amministratore (una password semplice, che verrà tra poco modificata).
Ci si collega come amministratori, usando un client:
root# cqlsh localhost -u cassandra -p cassandra
Si può creare un nuovo utente amministratore (più debole del precedente), per poi usarlo per accedere al database dalla rete esterna, dal web server
> CREATE USER nuovoutente WITH PASSWORD 'segretoXX' SUPERUSER;
> exit
Provare l’accesso con il nuovo utente, per poi cambiare la password dell’utente ‘cassandra
‘:
root# cqlsh localhost -u nuovoutente -p segretoXX
> ALTER USER cassandra WITH PASSWORD 'ZZZ999…..';
> exit
Da questo momento è possibile tentare di accedere al database usando Node.js . Per i dettagli vedere l’articolo2