servizio backend
This commit is contained in:
27
.env.production
Normal file
27
.env.production
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Configurazione per il server cloud in produzione
|
||||||
|
# Questo file deve essere copiato sul server come .env
|
||||||
|
|
||||||
|
# Database (localhost sul server cloud perché PostgreSQL è locale)
|
||||||
|
DATABASE_URL=postgresql://terrain_user:terrain_pass@localhost:5432/terrain_monitor
|
||||||
|
|
||||||
|
# MQTT Broker (localhost sul server cloud perché Mosquitto è locale)
|
||||||
|
MQTT_BROKER_HOST=localhost
|
||||||
|
MQTT_BROKER_PORT=1883
|
||||||
|
MQTT_USERNAME=
|
||||||
|
MQTT_PASSWORD=
|
||||||
|
|
||||||
|
# Topic MQTT
|
||||||
|
MQTT_TOPIC_ALARMS=terrain/+/+/alarms
|
||||||
|
MQTT_TOPIC_TELEMETRY=terrain/+/+/telemetry
|
||||||
|
MQTT_TOPIC_STATUS=terrain/+/+/status
|
||||||
|
|
||||||
|
# Security
|
||||||
|
SECRET_KEY=batt1l0ngs3cur3k3y
|
||||||
|
ALGORITHM=HS256
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||||
|
|
||||||
|
# Firebase
|
||||||
|
FIREBASE_CREDENTIALS_PATH=/home/alex/devel/web-app-python/serviceAccountKey.json
|
||||||
|
|
||||||
|
# Debug (False in produzione)
|
||||||
|
DEBUG=False
|
||||||
196
SYSTEMD_INSTALL_GUIDE.md
Normal file
196
SYSTEMD_INSTALL_GUIDE.md
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
# 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.
|
||||||
20
start_backend.sh
Executable file
20
start_backend.sh
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script di avvio per il backend Terrain Monitor
|
||||||
|
# Questo script carica le variabili d'ambiente e avvia il server
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Directory del progetto
|
||||||
|
PROJECT_DIR="/home/alex/devel/web-app-python"
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
|
||||||
|
# Carica variabili d'ambiente dal file .env
|
||||||
|
if [ -f "$PROJECT_DIR/.env" ]; then
|
||||||
|
export $(grep -v '^#' "$PROJECT_DIR/.env" | xargs)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Attiva l'ambiente virtuale
|
||||||
|
source "$PROJECT_DIR/.venv/bin/activate"
|
||||||
|
|
||||||
|
# Avvia il server con uvicorn
|
||||||
|
exec uvicorn main:app --host 0.0.0.0 --port 8000 --log-level info
|
||||||
28
terrain-monitor.service
Normal file
28
terrain-monitor.service
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Terrain Monitor Backend Service
|
||||||
|
After=network.target postgresql.service mosquitto.service
|
||||||
|
Wants=postgresql.service mosquitto.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=alex
|
||||||
|
Group=alex
|
||||||
|
WorkingDirectory=/home/alex/devel/web-app-python
|
||||||
|
EnvironmentFile=/home/alex/devel/web-app-python/.env
|
||||||
|
ExecStart=/home/alex/devel/web-app-python/start_backend.sh
|
||||||
|
|
||||||
|
# Restart configuration
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
# Security settings
|
||||||
|
NoNewPrivileges=true
|
||||||
|
PrivateTmp=true
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=terrain-monitor
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
Reference in New Issue
Block a user