Un'applicazione web moderna per il controllo remoto della Raspberry Pi, costruita con Nuxt 3 e TypeScript.
- Interfaccia moderna: UI responsive costruita con @nuxt/ui
- Autenticazione sicura: Sistema di login con JWT e sessioni di 7 giorni
- Controlli sistema: Riavvio e spegnimento della Raspberry Pi
- Gestione Docker: Avvio e arresto di container Docker
- Monitoraggio real-time: Dashboard con stato sistema, temperatura, memoria, disco
- Logging avanzato: Log strutturati con Pino per debugging e audit
- Deploy nativo: Installazione come servizio systemd (senza Docker)
- Framework: Nuxt 3 con TypeScript
- UI: @nuxt/ui (Tailwind CSS + Headless UI)
- Autenticazione: JWT con bcrypt
- Logging: Pino con output su console e file
- Deploy: Systemd service su Raspberry Pi
git clone https://github.com/simone98dm/raspberry-remote-control.git
cd pi-remote-controlchmod +x setup.sh
./setup.shLo script automaticamente:
- Installa le dipendenze
- Builda l'applicazione
- Copia i file in
/opt/pi-remote-control - Configura il servizio systemd
- Abilita l'avvio automatico
Modifica il file del servizio per cambiare password e JWT secret:
sudo nano /etc/systemd/system/pi-remote-control.serviceJWT_SECRET e AUTH_PASSWORD prima dell'uso in produzione!
sudo systemctl start pi-remote-control
sudo systemctl status pi-remote-controlL'applicazione sarร disponibile su: http://[IP-RASPBERRY]:3000
# Avvia/arresta/riavvia
sudo systemctl start pi-remote-control
sudo systemctl stop pi-remote-control
sudo systemctl restart pi-remote-control
# Stato e log
sudo systemctl status pi-remote-control
sudo journalctl -u pi-remote-control -f
# Abilitare/disabilitare avvio automatico
sudo systemctl enable pi-remote-control
sudo systemctl disable pi-remote-control- Systemd:
sudo journalctl -u pi-remote-control - File log:
/var/log/pi-remote-control.log
- Vai a
http://[IP-RASPBERRY]:3000 - Inserisci la password configurata (default:
admin123) - La sessione rimane attiva per 7 giorni
La dashboard mostra:
- Stato sistema: Uptime, temperatura CPU, memoria, disco
- Container Docker: Lista container attivi/inattivi
- Controlli sistema: Pulsanti per riavvio/spegnimento
- Controlli Docker: Gestione container con nomi personalizzabili
- Riavvia:
sudo reboot - Spegni:
sudo shutdown now
- Avvia container:
docker start [nome-container] - Arresta container:
docker stop [nome-container]
Tutte le azioni richiedono conferma tramite popup modale.
Modifica /etc/systemd/system/pi-remote-control.service:
Environment=JWT_SECRET=your-very-long-and-random-secret-key
Environment=AUTH_PASSWORD=your-secure-password
Environment=HOST=0.0.0.0
Environment=PORT=3000
Environment=NODE_ENV=productionPer consentire l'esecuzione di comandi di sistema senza password, aggiungi al sudoers:
sudo visudoAggiungi la riga:
simone ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /usr/bin/docker
sudo ufw allow 3000/tcp
sudo ufw enablesudo apt install nginx
sudo nano /etc/nginx/sites-available/pi-remote-controlConfigurazione Nginx:
server {
listen 80;
server_name your-pi.local;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}npm installnpm run devnpm run build
npm startpi-remote-control/
โโโ app/
โ โโโ app.vue # App principale
โโโ assets/
โ โโโ css/main.css # Stili custom
โโโ composables/
โ โโโ useAuth.ts # Gestione autenticazione
โ โโโ useSystem.ts # Gestione sistema
โโโ middleware/
โ โโโ auth.ts # Middleware autenticazione
โโโ pages/
โ โโโ index.vue # Homepage
โ โโโ login.vue # Pagina login
โ โโโ dashboard.vue # Dashboard principale
โโโ server/api/
โ โโโ auth/
โ โ โโโ login.post.ts # Endpoint login
โ โ โโโ verify.post.ts # Verifica token
โ โโโ system/
โ โโโ control.post.ts # Controlli sistema
โ โโโ status.get.ts # Stato sistema
โโโ systemd/
โ โโโ pi-remote-control.service # File servizio
โโโ types/
โ โโโ index.ts # Definizioni TypeScript
โโโ setup.sh # Script installazione
# Controlla i log
sudo journalctl -u pi-remote-control --no-pager
# Verifica la configurazione
sudo systemctl status pi-remote-control
# Testa manualmente
cd /opt/pi-remote-control
node .output/server/index.mjs# Ripristina permessi
sudo chown -R simone:simone /opt/pi-remote-control
sudo chown simone:simone /var/log/pi-remote-control.log# Verifica configurazione sudoers
sudo visudo -c
# Testa manualmente
sudo -u simone sudo reboot --help# Verifica porta in ascolto
sudo netstat -tulpn | grep :3000
# Controlla firewall
sudo ufw status- Cambia sempre JWT_SECRET e AUTH_PASSWORD in produzione
- Limita l'accesso alla porta 3000 tramite firewall
- Usa HTTPS in produzione con certificati SSL
- Monitora i log per tentativi di accesso non autorizzati
- Aggiorna regolarmente le dipendenze Node.js
I contributi sono benvenuti! Per favore:
- Fai fork del progetto
- Crea un branch per la feature (
git checkout -b feature/AmazingFeature) - Commit delle modifiche (
git commit -m 'Add some AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Apri una Pull Request
Questo progetto รจ distribuito sotto licenza MIT. Vedi il file LICENSE per maggiori dettagli.
Simone - @simone98dm