Come creare un’istanza MongoDB su un VPS

L’installazione di MongoDB su un server privato virtuale (VPS) offre un controllo completo sull’infrastruttura del database, ideale per sviluppatori, startup e organizzazioni che danno priorità a prestazioni, flessibilità e sovranità dei dati. Questa guida vi guiderà attraverso i passi avanzati per installare, configurare, proteggere e ottimizzare MongoDB su un VPS.

🛠️ Passo 1: aggiornare il sistema

sudo apt update && sudo apt upgrade -y

Impostate il vostro hostname e il fuso orario:

hostnamectl set-hostname mongodb-server
timedatectl set-timezone UTC

📦 Passo 2: installare MongoDB

1. Importare la chiave GPG di MongoDB

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-6.0.gpg

2. Aggiungere il repository MongoDB

echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Nota: se si utilizza Ubuntu 22.04, sostituire focal con jammy o con la propria versione.

3. Installare MongoDB

sudo apt update
sudo apt install -y mongodb-org

🧪 Passo 3: Avviare e abilitare MongoDB

sudo systemctl start mongod
sudo systemctl enable mongod

Controllare lo stato:

sudo systemctl status mongod

passo 4: proteggere il server MongoDB

Per impostazione predefinita, MongoDB si lega a 127.0.0.1. Se si desidera un accesso remoto:

1. Modificare la configurazione

sudo nano /etc/mongod.conf

Trovare la riga bindIp sotto net: e modificarla:

bindIp: 127. 0.0.1,0.0.0.0

2. Abilitare l’autenticazione

Nella sezione sicurezza: aggiungere:

security:
authorization: enabled

Riavviare MongoDB:

sudo systemctl restart mongod

👤 Passo 5: Creare l’utente amministratore

Accedere alla shell di MongoDB:

mongosh

Creare un utente amministratore:

use admin
db.createUser({
user: "admin",
pwd: "StrongPassword123!",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

Uscire con exit, quindi testare il login:

mongosh -u admin -p --authenticationDatabase admin

🛡️ Passo 6: proteggere il VPS e MongoDB

1. Firewall UFW

sudo ufw allow OpenSSH
sudo ufw allow 27017/tcp
sudo ufw enable

Per l’accesso remoto da un singolo IP:

sudo ufw allow from YOUR.IP.ADDRESS to any port 27017

2. Fail2Ban (protezione SSH)

sudo apt install fail2ban -y
sudo systemctl enable fail2ban

⚙️ Passo 7: Ottimizzazione avanzata (opzionale)

1. Set di repliche per l’alta disponibilità

Modificare /etc/mongod.conf:

replication:
replSetName: "rs0"

Inizializza:

mongosh
rs.initiate()

2. Strategia di backup

Usare mongodump per i backup:

mongodump --out /var/backups/mongodb/$(date %F)

Automatizzare con cron:

crontab -e
# Ogni giorno alle 2 del mattino
0 2 * * * /usr/bin/mongodump --out /var/backups/mongodb/$(date \%F)

3. Usare TLS/SSL per le connessioni criptate

Generare i certificati e configurare la sezione net.ssl in mongod.conf. Questo richiede una maggiore configurazione e un’autorità di certificazione (CA) affidabile.

🧪 Passo 8: Testare la distribuzione

È possibile testare la connettività remota:

mongosh "mongodb://admin:StrongPassword123!@ilvostro-server-ip:27017/admin"

Sostituite il vostro IP-server con l’IP del vostro VPS o il nome del dominio.

📊 Passo 9: Monitorare MongoDB

Considerate strumenti come:

  • Agente di monitoraggio MongoDB Atlas (opzionale)

  • Prometheus Grafana con esportatori

  • Avvisi personalizzati con cron e logwatch

È anche possibile osservare direttamente i log:

sudo tail -f /var/log/mongodb/mongod.log

lista di controllo finale

  • MongoDB installato e funzionante

  • Accesso remoto protetto

  • Autenticazione dell’amministratore applicata

  • Firewall configurato

  • Backup in atto

  • Monitoraggio opzionale abilitato

conclusione

L’esecuzione di MongoDB su un VPS offre una flessibilità senza pari, ma richiede un’attenzione particolare alla sicurezza, ai backup e alle prestazioni. Seguendo questa guida, avrete creato un’istanza MongoDB sicura e pronta per la produzione, pronta a scalare con la crescita della vostra applicazione.