4.6 KiB
4.6 KiB
Guida Installazione Servizio Systemd sul Server Cloud
File da caricare sul server (94.177.199.207)
start_backend.sh- Script di avvioterrain-monitor.service- File di servizio systemd.env.production- Variabili d'ambiente per produzione
Istruzioni di installazione
Passo 1: Carica i file sul server
# Da questo workspace locale, copia i file sul server cloud
scp start_backend.sh alex@94.177.199.207:/home/alex/devel/web-app-python/
scp .env.production alex@94.177.199.207:/home/alex/devel/web-app-python/
scp terrain-monitor.service alex@94.177.199.207:/tmp/
Passo 2: Connettiti al server cloud
ssh alex@94.177.199.207
Passo 3: Configura i file sul server
# Vai nella directory del progetto
cd /home/alex/devel/web-app-python
# Rendi eseguibile lo script di avvio
chmod +x start_backend.sh
# Copia il file .env.production come .env (BACKUP prima il vecchio .env!)
cp .env .env.backup
cp .env.production .env
# Verifica che il path nel file .env sia corretto
nano .env # Controlla FIREBASE_CREDENTIALS_PATH e altri path
Passo 4: Installa il servizio systemd
# Copia il file di servizio nella directory systemd
sudo cp /tmp/terrain-monitor.service /etc/systemd/system/
# Ricarica la configurazione systemd
sudo systemctl daemon-reload
# Abilita il servizio per l'avvio automatico
sudo systemctl enable terrain-monitor
# Avvia il servizio
sudo systemctl start terrain-monitor
Passo 5: Verifica lo stato del servizio
# Controlla lo stato del servizio
sudo systemctl status terrain-monitor
# Visualizza i log in tempo reale
sudo journalctl -u terrain-monitor -f
# Visualizza gli ultimi 50 log
sudo journalctl -u terrain-monitor -n 50
Comandi utili per gestire il servizio
Avviare il servizio
sudo systemctl start terrain-monitor
Fermare il servizio
sudo systemctl stop terrain-monitor
Riavviare il servizio
sudo systemctl restart terrain-monitor
Ricaricare dopo modifiche al codice
sudo systemctl restart terrain-monitor
Vedere i log
# Log in tempo reale
sudo journalctl -u terrain-monitor -f
# Log delle ultime 2 ore
sudo journalctl -u terrain-monitor --since "2 hours ago"
# Log di oggi
sudo journalctl -u terrain-monitor --since today
# Log con filtro per errori
sudo journalctl -u terrain-monitor -p err
Disabilitare l'avvio automatico
sudo systemctl disable terrain-monitor
Riabilitare l'avvio automatico
sudo systemctl enable terrain-monitor
Verifica che funzioni correttamente
Dopo l'avvio, verifica che:
-
Il servizio sia attivo:
sudo systemctl status terrain-monitor # Dovrebbe mostrare: Active: active (running) -
Il backend risponda:
curl http://localhost:8000/health # Dovrebbe rispondere: {"status":"healthy","mqtt_connected":true} -
MQTT sia connesso (nei log):
sudo journalctl -u terrain-monitor -n 20 # Cerca: "Connesso al broker MQTT" # Cerca: "Client MQTT creato con ID: terrain_backend_..."
Troubleshooting
Il servizio non parte
# Controlla i log per errori
sudo journalctl -u terrain-monitor -n 50
# Verifica i permessi
ls -la /home/alex/devel/web-app-python/start_backend.sh
# Prova ad eseguire manualmente lo script
cd /home/alex/devel/web-app-python
./start_backend.sh
Errori di connessione database/MQTT
# Verifica che PostgreSQL sia in esecuzione
sudo systemctl status postgresql
# Verifica che Mosquitto sia in esecuzione
sudo systemctl status mosquitto
# Controlla le variabili d'ambiente
cat /home/alex/devel/web-app-python/.env
Il servizio si riavvia continuamente
# Guarda i log per capire l'errore
sudo journalctl -u terrain-monitor -f
# Aumenta il RestartSec se serve
sudo nano /etc/systemd/system/terrain-monitor.service
# Cambia RestartSec=10 in RestartSec=30
sudo systemctl daemon-reload
sudo systemctl restart terrain-monitor
Note importanti
-
User e Group: Il servizio gira con l'utente
alex. Assicurati che sia l'utente corretto sul server. -
Path assoluti: Tutti i path nel file .env e nel servizio devono essere assoluti, non relativi.
-
Firebase credentials: Assicurati che il file
serviceAccountKey.jsonesista nel path specificato. -
Firewall: Verifica che la porta 8000 sia aperta nel firewall se devi accedere dall'esterno.
-
Riavvio automatico: Il servizio è configurato per riavviarsi automaticamente in caso di crash (Restart=always).
-
Log rotation: I log di systemd/journald hanno una rotazione automatica. Non è necessario configurarla.