# 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 ```bash # 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 ```bash ssh alex@94.177.199.207 ``` ### Passo 3: Configura i file sul server ```bash # 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 ```bash # 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 ```bash # 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 ```bash sudo systemctl start terrain-monitor ``` ### Fermare il servizio ```bash sudo systemctl stop terrain-monitor ``` ### Riavviare il servizio ```bash sudo systemctl restart terrain-monitor ``` ### Ricaricare dopo modifiche al codice ```bash sudo systemctl restart terrain-monitor ``` ### Vedere i log ```bash # 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 ```bash sudo systemctl disable terrain-monitor ``` ### Riabilitare l'avvio automatico ```bash sudo systemctl enable terrain-monitor ``` ## Verifica che funzioni correttamente Dopo l'avvio, verifica che: 1. **Il servizio sia attivo**: ```bash sudo systemctl status terrain-monitor # Dovrebbe mostrare: Active: active (running) ``` 2. **Il backend risponda**: ```bash curl http://localhost:8000/health # Dovrebbe rispondere: {"status":"healthy","mqtt_connected":true} ``` 3. **MQTT sia connesso** (nei log): ```bash 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 ```bash # 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 ```bash # 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 ```bash # 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.