Come installare lo stack MERN con Nginx su Debian 11. Lo stack MERN è una configurazione con MongoDB, Express, React e Node.js. Questa è una delle varianti dello stack MEAN. MongoDB è il database, Express with Node.js viene utilizzato per il back-end che comunica con il database, React è il lato client o front-end. Utilizzeremo il proxy inverso Nginx sul server Node.js e configureremo Let'sEncrypt SSL.
In questa guida imparerai come configurare lo stack MERN sul tuo server Debian 11.
Questa configurazione è stata testata su Google Cloud, quindi dovrebbe funzionare correttamente su altri server cloud VPS che eseguono Debian 11.
Prerequisiti
- Un server Debian 11 con accesso sudo.
- Un nome di dominio puntato al tuo server.
Sommario
- Installa MongoDB.
- Configura MongoDB.
- Installa Node.js con NVM.
- Installa React.js.
- Installa Express.js.
- Imposta PM2 per eseguire Node.js nel backend.
- Installa Nginx e configuralo.
- Installa Let'sEncrypt SSL.
Configurazione iniziale del server
Inizia aggiornando i pacchetti del server all'ultimo disponibile.
sudo apt update sudo apt dist-upgrade -y
Ora puoi procedere alla configurazione dello stack MERN.
Installa MongoDB
Qui installeremo MongoDB Community Edition con LTS usando apt
pacchetto gestito. L'ultima versione corrente di MongoDB al momento di questo articolo è 5.0.5.
Potrebbe essere necessario installare gnupg
per l'importazione della chiave.
sudo apt install gnupg
Importa la chiave pubblica usando il seguente comando.
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
Aggiungi il repository MongoDB all'elenco delle fonti. Useremo il repository di buster perché al momento della stesura di questo articolo, MongoDB Community Edition non ha un repository separato per Debian Bullseye.
Il repository Buster è in fase di sviluppo attivo e compatibile con Bullseye.
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
Aggiorna i pacchetti e installa MongoDB.
sudo apt update sudo apt install -y mongodb-org
Una volta completata l'installazione, abilita MongoDB per l'avvio all'avvio del sistema.
sudo systemctl enable mongod
Avvia il server MongoDB.
sudo service mongod start
Puoi visualizzare lo stato usando il seguente comando.
sudo service mongod status Output ● mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-02-18 09:11:56 UTC; 3m ago Docs: https://docs.mongodb.org/manual Main PID: 1942 (mongod) Memory: 164.5M CGroup: /system.slice/mongod.service └─1942 /usr/bin/mongod --config /etc/mongod.conf Feb 18 09:11:56 staging systemd[1]: Started MongoDB Database Server.
Configura MongoDB
Ora possiamo proteggere MongoDB, configurare MongoDB per accettare connessioni remote e anche creare un nuovo database.
MongoDB protetto
Modifica il file di configurazione di MongoDB.
sudo nano /etc/mongod.conf
Scorri verso il basso fino alla sezione sicurezza #security
e decommentalo e abilita l'autorizzazione. La modifica finale dovrebbe apparire come di seguito.
security: authorization: enabled
Abilita connessioni remote
Per abilitare le connessioni remote è necessario modificare lo stesso file e aggiungere il proprio IP interno o privato alle interfacce di rete. La tua configurazione dovrebbe essere simile a quella qui sotto.
net: port: 27017 bindIp: 127.0.0.1,10.128.10.1
Sostituisci 10.128.10.1 con il tuo indirizzo IP.
Apri l'eventuale firewall per la porta 27017.
Riavvia MongoDB.
sudo systemctl restart mongod
Conferma se MongoDB consente connessioni remote utilizzando il comando seguente.
sudo lsof -i | grep mongo
Dovresti ricevere un output simile a quello qui sotto.
mongod 1942 mongodb 11u IPv4 31550 0t0 TCP instance_name.c.project_id.internal:27017 (LISTEN)
mongod 1942 mongodb 12u IPv4 31551 0t0 TCP localhost:27017 (LISTEN)
Crea utente amministratore MongoDB
Connettiti alla shell MongoDB usando mongosh
comando.
mongosh
Passa al database di amministrazione.
use admin
Crea un utente amministratore con tutti i privilegi e la password di configurazione.
db.createUser({user: "admin" , pwd: passwordPrompt() , roles: [{ role: "userAdminAnyDatabase" , db: "admin"}]})
Inserisci la password quando richiesto.
Inserisci exit
per uscire dalla shell.
Ora puoi utilizzare la seguente stringa di connessione per connetterti a MongoDB.
mongodb://admin:password@External-IP:27017/database
Installa Node.js con NVM
Useremo Node Version Manager (NVM) per installare Node.js. Con questo puoi facilmente utilizzare tra diverse versioni di Node.js.
Scarica ed esegui lo script di installazione della NVM utilizzando wget
.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Ora carica il comando nvm nella sessione della shell corrente.
source ~/.bashrc
Per elencare tutte le versioni di Node.js disponibili puoi usare il seguente comando.
nvm ls-remote
Installa la versione di Node.js di cui hai bisogno con la sintassi seguente.
nvm install v16.13.2
Una volta installato, puoi controllare le versioni di Node.js e NPM.
node -v v16.13.2 npm -v 6.14.13
Installa React.js
Installa e crea il frontend React.js usando npx
comando.
Passa alla cartella in cui desideri installare l'app React ed esegui il comando seguente.
npx create-react-app frontend
Ci vorrà del tempo per installare tutti i pacchetti React. Una volta completata l'installazione, vedrai un frontend
cartella creata con tutti gli script React di base.
Accedi alla directory frontend e attiva la build utilizzando npm
.
cd frontend npm run build
Questo creerà un output statico con file HTML, CSS e JS per il tuo frontend.
Puoi indirizzare il tuo server web Nginx a questa directory di build per servire il tuo frontend.
Installa Express.js
Installa la generazione rapida usando il npx
comando.
npx express-generator
Una volta completata l'installazione, crea la tua applicazione di back-end utilizzando express
comando.
cd ~/ express backend
Ora il tuo Express dovrebbe essere creato. È possibile installare tutti i moduli del nodo e avviare il server Express utilizzando PM2 in background, come indicato nella sezione seguente.
cd backend npm install
Diventa uno sviluppatore web full-stack con specializzazione React . Corso completo di sviluppo web
Imposta PM2 per eseguire Node.js in background
PM2 è un Node Process Manager molto utile per avviare i server dei nodi in background.
Passa alla tua applicazione Express ed esegui il comando seguente.
cd ~/backend pm2 start npm --name "backend" -- start
Ora il tuo server Express è avviato in background e in ascolto sulla porta 3000.
Configura PM2 per avviare l'applicazione Express all'avvio.
pm2 startup
Ti verrà fornito un lungo comando da eseguire. Una volta eseguito il comando puoi salvare le impostazioni.
pm2 save
Successivamente puoi configurare il proxy inverso Nginx su questa porta su un sottodominio o una sottocartella secondo i tuoi desideri.
Installa Nginx e configuralo
Nginx è uno dei migliori server web per funzionare con applicazioni basate su Node.js.
Installa Nginx.
sudo apt install nginx
Rimuovi le configurazioni predefinite
sudo rm /etc/nginx/sites-available/default sudo rm /etc/nginx/sites-enabled/default
Crea una nuova configurazione Nginx
sudo nano /etc/nginx/sites-available/application.conf
Incolla quanto segue. In questa configurazione indichiamo il percorso del dominio principale alla directory di output build dell'applicazione React.js e al /api
percorso per l'applicazione Express.js.
server { listen [::]:80; listen 80; server_name domainname.com www.domainname.com; root /home/cloudbooklet/backend/build/; index index.html; location / { try_files $uri $uri/ =404; } location /api/ { proxy_pass http://127.0.0.1:3001; proxy_http_version 1.1; proxy_set_header Connection ''; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; } }
Salva ed esci dal file.
Abilita la tua configurazione creando un link simbolico.
sudo ln -s /etc/nginx/sites-available/application.conf /etc/nginx/sites-enabled/application.conf
Controlla la tua configurazione di Nginx e riavvia Nginx
sudo nginx -t sudo service nginx restart
Installa Let'sEncrypt SSL
Possiamo utilizzare Certbot per installare il certificato SSL Let's Encrypt gratuito per il tuo dominio.
sudo apt install python3-certbot-nginx
Eseguire il comando seguente per installare il certificato e configurare il reindirizzamento a HTTPS automaticamente.
sudo certbot --nginx --redirect --agree-tos --no-eff-email -m [email protected] -d domain.com -d www.domain.com
Ora dovresti ricevere il certificato SSL e verrà configurato automaticamente.
Imposta il rinnovo automatico.
sudo certbot renew --dry-run
Ora puoi cercare il tuo dominio nel tuo browser per vedere l'output.
Conclusione
Ora hai imparato come installare e configurare lo stack MERN su Debian 11.
Grazie per il tuo tempo. In caso di problemi o feedback, si prega di lasciare un commento qui sotto.