Files
web-app-python/SYSTEMD_INSTALL_GUIDE.md
2025-10-20 19:56:47 +02:00

4.6 KiB

Guida Installazione Servizio Systemd sul Server Cloud

File da caricare sul server (94.177.199.207)

  1. start_backend.sh - Script di avvio
  2. terrain-monitor.service - File di servizio systemd
  3. .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:

  1. Il servizio sia attivo:

    sudo systemctl status terrain-monitor
    # Dovrebbe mostrare: Active: active (running)
    
  2. Il backend risponda:

    curl http://localhost:8000/health
    # Dovrebbe rispondere: {"status":"healthy","mqtt_connected":true}
    
  3. 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

  1. User e Group: Il servizio gira con l'utente alex. Assicurati che sia l'utente corretto sul server.

  2. Path assoluti: Tutti i path nel file .env e nel servizio devono essere assoluti, non relativi.

  3. Firebase credentials: Assicurati che il file serviceAccountKey.json esista nel path specificato.

  4. Firewall: Verifica che la porta 8000 sia aperta nel firewall se devi accedere dall'esterno.

  5. Riavvio automatico: Il servizio è configurato per riavviarsi automaticamente in caso di crash (Restart=always).

  6. Log rotation: I log di systemd/journald hanno una rotazione automatica. Non è necessario configurarla.