Per uno dei miei progetti attuali (che in seguito diventerà un prodotto commerciale) cercavo un modo per eseguire aggiornamenti al software e ho trovato la seguente soluzione:
Dettagli del progetto:
Il progetto è basato (attualmente) su un Raspberry Pi ma sono state testate anche altre schede Linux (quindi Debian).
Sulla base di quel Sistema Linux c'è un'Applicazione del Flask Web (server Socket-IO e ampletletlet - quindi senza Apache, ecc.) che dà agli Utenti l'accesso a diverse funzioni del progetto / prodotto.
L'intero codice è scritto in Python. L'applicazione web viene distribuita tramite eventlet-Network-Library
utilizzata insieme a Flask-SocketIO
per fornire aggiornamenti al client tramite Web-Sockets
.
Questa "Applicazione Web principale" viene avviata subito dopo l'avvio del sistema Linux e il completamento dell'avvio. L'applicazione Web viene avviata da un singolo punto di accesso, eseguendo "Main.py"
Per aggiornare, aggiungere o rimuovere questa funzionalità in seguito, ho trovato la seguente soluzione:
Meccanismo di aggiornamento
Oltre all'applicazione Web esistente ci sarà una seconda, in esecuzione su una porta diversa ma con lo stesso concetto (ad esempio, un singolo punto di ingresso, un eventlet-server, ecc.)
Questa seconda applicazione Web, chiamiamola "Applicazione Web di aggiornamento", verrà avviata subito dopo l'avvio del sistema, quindi sostituendo l'applicazione Web principale.
L'Applicazione web principale sarà incorporata in un file immagine che verrà montato e avviato dallo script di applicazione Web di aggiornamento subito dopo l'avvio.
Quando l'utente ha bisogno di aggiornare il sistema, chiama Update Web-Application e carica una nuova immagine che sostituirà quella corrente. (Alcuni controlli prima, certo)
In questo modo aggiungo un meccanismo di aggiornamento al sistema senza mai toccare il sistema Linux sottostante poiché in quasi tutti i casi questo non è necessario perché non ci sono cambiamenti nell'hardware, ecc. Si tratta solo di aggiungere diverse funzionalità, ecc. in seguito .
Non c'è dubbio che questo è un concetto di lavoro, ma sto cercando un feedback su questo. È un buon modo per gestire gli aggiornamenti di un'applicazione in esecuzione su un sistema Linux (quando non ci sono ancora aggiornamenti Web, ecc.)? Ci sono delle strutture che non ho ancora inciampato? Ogni feedback in generale è molto apprezzato!