2012-09-04 12 views

risposta

15

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/

ci sono anche uWSGI e FastCGI opzioni disponibili

+2

È possibile ottenere un aggiornamento 2014 a questa risposta?Il "sostanzialmente no" è ambiguo come + ensnare pone due domande. –

+0

risposta aggiornata per rimuovere l'ambiguità. il resto della risposta sembra ancora perfettamente valida. i collegamenti rimandano ancora agli ultimi documenti relativi ai flaconi. –

41

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.

+1

Io uso 'supervisor' +' gunicorn' + 'nginx'. È davvero facile da configurare e mantenere. –

+0

"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

+0

"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

Problemi correlati