Il server è in bundle con Flask sicuro per la distribuzione in un ambiente di produzione? In caso negativo, cosa dovrei usare per distribuire Flask in produzione?Il server è in bundle con Flask sicuro da utilizzare in produzione?
risposta
Fondamentalmente, no. Il server di sviluppo integrato non è sicuro per la distribuzione in un ambiente di produzione.
Il server di sviluppo integrato è proprio per questo. Per l'utilizzo in produzione, è necessario seguire uno dei passaggi descritti in dettaglio here.
Questi includono server diversi che implementano le specifiche WSGI, come Apache/mod_wsgi o uno di questi server autonomo WSGI http://flask.pocoo.org/docs/deploying/wsgi-standalone/
No. Il server in bundle è un server di sviluppo . Non è progettato pensando agli ambienti di produzione.
- Non gestirà più di una richiesta alla volta per impostazione predefinita.
- Se si lascia la modalità di debug e si apre un errore, si apre una shell che consente l'esecuzione di codice arbitrario sul server (si pensi a
os.system('rm -rf /')
). - Il server di sviluppo non viene scalato correttamente.
Flask utilizza server di sviluppo di Werkzeug, e la documentazione dice la stessa cosa:
Il server di sviluppo non è destinato ad essere utilizzato su sistemi di produzione. È stato progettato appositamente per scopi di sviluppo e funziona male con carichi elevati. Per le configurazioni di implementazione, consulta le pagine Application Deployment.
L'approccio consigliato è use a production WSGI server per eseguire l'applicazione Flask. C'è un'intera sezione dedicata alla distribuzione nella documentazione: Deployment Options
Se si sta servendo tutti i beni statici, come immagini o video, hanno bisogno di basso livello di caching, o che hanno esigenze di concorrenza più elevati, si consiglia di utilizzare un server web come nginx e mantieni tutte le tue richieste.
In formato ASCII scadente:
+----------+
| Client 2 |
+----------+
|
V
+----------+ +-------+ +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+ +-------+ +----------+
^
|
V
/--------------------\
| useful nginx stuff |
| like asset serving |
| and rate limiting |
\--------------------/
|
V
+-------------+
| WSGI server |
+-------------+
Per effettivamente corsa il processo server WSGI, è possibile utilizzare Supervisor. Riavvia automaticamente il server in caso di errore per qualche motivo, conserva i log e viene eseguito come un demone in modo che il servizio venga avviato all'avvio del server.
Io uso 'supervisor' +' gunicorn' + 'nginx'. È davvero facile da configurare e mantenere. –
"Non gestirà più di una richiesta alla volta" - non è vero, vedi threaded ed elabora gli argomenti: http://werkzeug.pocoo.org/docs/0.11/serving/ – HaveAGuess
"se si apre un errore, si apre su una shell che consente l'esecuzione di codice arbitrario sul tuo server "- non è che debug = True mode? – HaveAGuess
Sebbene leggero e facile da usare, il server integrato di Flask non è adatto per la produzione poiché non si adatta bene e di default serve solo una richiesta alla volta. http://flask.pocoo.org/docs/0.12/deploying/
È possibile ottenere un aggiornamento 2014 a questa risposta?Il "sostanzialmente no" è ambiguo come + ensnare pone due domande. –
risposta aggiornata per rimuovere l'ambiguità. il resto della risposta sembra ancora perfettamente valida. i collegamenti rimandano ancora agli ultimi documenti relativi ai flaconi. –