Este é um passo a passo que ilustra como disponibilizar um aplicativo Flask usando uma Gunicorn e Supervisor.
- Flask: Server backend
- Nginx: Reverse proxy
- Gunicorn: Deploy flask app
- Supervisor: Monitor and control gunicorn process
sudo apt-get install nginx supervisor python-pip python-virtualenv
pip install Flask gunicorn
Se você não estiver usando ambientes virtuais python, você deve! Ambientes virtuais criam ambientes python isolados. Isso permite executar várias versões de bibliotecas na mesma máquina.
Digamos que a nossa aplicação se chamará SISCAD. Vamos criar um diretório para esta aplicação
sudo mkdir /opt/siscad
E crie um arquivo chamado application.py com o seguinte conteúdo
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World"
if __name__ == '__main__':
app.run(debug=True)
Teste o aplicativo Flask executando o seguinte comando:
python application.py
Mas não é seguro usar o servidor de desenvolvimento do Flask para um ambiente de produção. Então, você pode usar o Gunicorn para servir o código Flask.
Para testar a execução do aplicativo pelo Gunicorn, digite:
gunicorn application:application -b localhost:5000
Você pode fazer o processo Gunicorn ouvir qualquer porta aberta.
Se você adicionar um & ao final do comando:
nohup gunicorn app:app -b localhost:5000 &
Isso fará com que seu processo Gunicorn seja executado em segundo plano.
Uma melhoria que pode ser feita aqui é executar o Gunicorn via Supervisor.
O supervisor permite monitorar e controlar processos.
O supervisor irá cuidar do processo Gunicorn e certificar-se de que eles sejam reiniciados se algo der errado, ou para garantir que os processos sejam iniciados no momento da inicialização.
Digamos que o nome da aplicação seja SISCAD. Então faça o seguinte:
sudo mkdir /var/log/siscad/
sudo chmod 777 /var/log/siscad/
sudo touch /var/log/siscad/siscad.err.log
sudo touch /var/log/siscad/siscad.out.log
sudo touch /var/log/siscad/siscad.log
sudo chmod 777 /var/log/siscad/siscad.err.log
sudo chmod 777 /var/log/siscad/siscad.out.log
sudo chmod 777 /var/log/siscad/siscad.log
Crie o arquivo siscad.conf dentro de /etc/supervisor/conf.d/
touch /etc/supervisor/conf.d/siscad.conf
Insira o seguinte conteúdo:
[program:siscad]
directory=/opt/siscad
command=/usr/local/bin/siscad/gunicorn_start
user=sistemas
stderr_logfile=/var/log/siscad/sigproext.err.log
stdout_logfile=/var/log/siscad/sigproext.out.log
environment=HOME='/opt/siscad/'
startsecs = 0
autorestart=false
Para ativar a configuração, execute os seguintes comandos:
sudo supervisorctl reread
sudo service supervisor restart
Isso deve iniciar um novo processo. Para verificar o status de todos os aplicativos monitorados, use o seguinte comando:
sudo supervisorctl status