Categories
database Linux React

Database remoto (1)

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

  1. https://www.cancellino.org/2023/04/database-remoto-2/ []
  2. https://www.cancellino.org/2023/04/database-remoto-3/ []

Leave a Reply