Immagino che questa domanda sembrerà incredibilmente banale per alcuni lettori, ma come qualcuno che è uno sviluppatore ma con poca esperienza di distribuzione di app in qualcosa di diverso da un manuale, colpisci e spero in un certo senso, spero che capirai che è piuttosto scoraggiante vedere il numero di approcci e strumenti diversi che ci sono, quindi potrei fare con un po 'di consigli per farmi iniziare nella giusta direzione.
Sono uno sviluppatore, ora solo nel mio tempo libero, che è limitato. Fino ad ora ho lavorato con Java, costruendo webapp e sono stato ragionevolmente felice di distribuire un file di guerra in un ambiente Tomcat che mantiene le cose ben incapsulate.
Ora sto lavorando in Python e Django, ma man mano che mi avvicino al punto in cui devo implementare, voglio impostare un flusso di lavoro devops solido per automatizzare il più possibile e assicurarmi di poterlo implementare in modo affidabile, ma dato che il mio il caso d'uso è relativamente semplice, voglio evitare di imparare un set di strumenti di grandi dimensioni che è troppo ingegnerizzato per le mie esigenze e che richiede un grande investimento di tempo, preferirei usare la codifica della mia app.
Quindi sto cercando una via di mezzo che mi consenta di distribuire e gestire in modo affidabile le mie app senza investire molto tempo nell'impostazione e nell'apprendimento di un grande ecosistema Devops.
Qualche dettaglio in più ...
Contesto
- Sviluppo su un Mac, usando PyCharm per creare Django 2, Python 3.
- Uso git (ma non su github) per gestire il controllo delle versioni del software.
- Sono a mio agio con altre lingue e linguaggi di scripting e ho scritto alcuni script bash (probabilmente abbastanza amatoriali), anche se non mi piace bash. Mi sono anche dilettato con Perl, che mi sono reso conto che in realtà non è una lingua per dilettarsi (cioè devi passare del tempo ad impararlo correttamente)
- Ho intenzione di distribuire su un ambiente VPS, probabilmente DigitalOcean.
- La mia app non è mission-critical, ma è importante che io sappia se il sito non funziona e, in caso affermativo, devo avere un modo per ripristinare in modo affidabile, sia che si tratti di riavviare l'app, riavviare il server o passare a un altro server ( o altro).
Requisiti specifici
Possibilità di configurare un nuovo ambiente per ricevere l'app.
Fino ad ora, mentre sto imparando, questo è stato manuale e ogni volta che l'ho fatto ho iniziato da zero con un nuovo Droplet. Vorrei che questo fosse molto più semplice (automatizzato) in modo che se dovessi creare un nuovo ambiente in caso di emergenza, posso farlo in modo affidabile.
Capacità di distribuire l'app in un ambiente di staging il più possibile identico a quello live, idealmente come un processo automatizzato innescato da una git push usando un approccio di integrazione continua (che non avevo mai fatto prima).
Possibilità di "premere il pulsante" quando sono soddisfatto dell'app in ambiente di gestione temporanea per spingere idealmente automaticamente in un ambiente live.
Modo per monitorare il sito (solo un sondaggio per una pagina farà)
Modo per passare al sito live su un altro server se ho bisogno di recuperare da un'app o un errore del server sul sito live. Penso che forse un approccio blu-verde avrebbe funzionato per me?
Cosa ho provato o considerato?
Configurazione manuale dell'ambiente live con l'app Django, quindi copia manualmente la nuova base di codice su di essa quando si verifica una modifica. Questo è soggetto a errori umani e temo di fare un errore in una distribuzione causando un errore irreversibile.
Docker. Devo ammettere che quando ho scoperto Docker mi è sembrato un sogno diventato realtà, ma dopo un po 'di sperimentazione e ricerca sono spaventato da quanto devo imparare e sapere per farlo funzionare e gestirlo. Può darsi che ne valga la pena perché, una volta che funziona, ha un rischio molto basso, ma al momento sembra un investimento più grande del mio tempo di quanto spero.
Script Bash. Usali per configurare l'ambiente originale e per attività specifiche come l'aggiornamento dell'app. La mia preoccupazione al riguardo è che gli script saranno codice che deve essere testato e temo che ci vorrebbe molto tempo per costruire un set di strumenti affidabile in questo modo.
Ho esaminato le opzioni di Digital Ocean per gli indirizzi IP mobili e la possibilità di avere due server per un approccio "blu verde" che sembra abbastanza ragionevole. Se seguo questa strada, devo ancora essere in grado di automatizzare la distribuzione.
Quindi ... sto cercando consigli su un approccio devops che trovi il giusto equilibrio tra minimizzare il rischio (ad es. Il rischio di rompere l'app live con un aggiornamento o il rischio di non riuscire a recuperare da un errore) e minimizzare il tempo investimento che devo fare per impostare gli ambienti e il flusso di lavoro.