Série API em Flask - Parte 14 - Arquivos de configuração para Deploy na Digital Ocean
Opa beleza galera. Vamos preparar nosso aplicativo criando alguns arquivos de configuração para fazer um deploy de nossa aplicação na Digital Ocean.
Para entendimento, segue os capítulos que serão abordados.
Capítulo 1: Introdução, configuração e Hello World
Capítulo 2: Organizando as dependências e requerimentos
Capítulo 3: Configurando o pytest e nosso primeiro teste
Capítulo 4: Configurando o Makefile
Capítulo 5: Adicionando o MongoDB
Capítulo 6: Criando e testando o modelo de usuários
Capítulo 7: Criando usuários
Capítulo 8: Listando usuários
Capítulo 9: Buscando usuários
Capítulo 10: Editando um usuário
Capítulo 11: Deletando um usuário
Capítulo 12: Autênticação por JWT
Capítulo 13: Criando um container Docker
Capítulo 14: Deploy Flask na Digital Ocean Estamos aqui
Capítulo 15: Automatizando o processo de deploy com Fabric
Capítulo 16: CI e CD com Jenkins, Python, Flask e Fabric
Capítulo 17: Utilizando o RabbitMQ com Flask e Sendgrid para enviar e-mails de boas vindas e ativar a conta do usuário
O repositório com todo o código fonte esta aqui. Os capítulos estão em branches
.
Arquivo de configuração do gunicorn
Crie um diretório, mkdir confs
na raíz do diretório. E em seguida crie um novo arquivo vim confs/gunicorn_api_users.conf.py
.
Sendo que o conteudo deste arquivo será:
import os
bind = "127.0.0.1:9000"
workers = (os.sysconf("SC_NPROCESSORS_ONLN") * 2) + 1
loglevel = "error"
pidfile = "/home/apiflask/run/app.pid"
accesslog = "/home/apiflask/logs/gunicorn/access-app.log"
errorlog = "/home/apiflask/logs/gunicorn/error-app.log"
secure_scheme_headers = {
'X-FORWARDED-PROTOCOL': 'http',
'X-FORWARDED-PROTO': 'http',
}
Atenção no nome do usuário das chaves pidfile, accesslog e errorlog
. Altere de acordo com o seu projeto.
Próximo arquivo é o supervisor
Crie um novo arquivo vim confs/supervisor_api_users.conf
.
E seu conteúdo é:
[group:api_users]
programs=gunicorn_api_users
[program:gunicorn_api_users]
command=/home/apiflask/venvs/bin/gunicorn -c /home/apiflask/scripts/gunicorn_api_users.conf.py application:app
directory=/home/apiflask/sites/flask-api-users/
user=apiflask
group=apiflask
stdout_logfile=/home/apiflask/logs/supervisor/access-site-api-users.log
stderr_logfile=/home/apiflask/logs/supervisor/error-site-api-users.log
autostart=true
autorestart=true
redirect_stderr=True
Atenção no nome do usuário das chaves command, directory, stdout_logfile e stderr_logfile
. Altere de acordo com o seu projeto.
Por último nosso Nginx
Crie dois arquivos touch nginx_api_users.conf nginx_api_users_https.conf
Edite o primeiro arquivo vim nginx_api_users.conf
e cole o conteúdo:
upstream gunicorn_api_users {
server 127.0.0.1:9000;
}
server {
listen 80;
listen [::]:80;
server_name default_server;
client_max_body_size 10M;
keepalive_timeout 15;
access_log /home/apiflask/logs/nginx/access-site-api-users.log;
error_log /home/apiflask/logs/nginx/error-site-api-users.log error;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://gunicorn_api_users;
break;
}
}
}
Edite o segundo arquivo vim nginx_api_users.conf
e cole o conteúdo:
upstream gunicorn_api_users {
server 127.0.0.1:9000;
}
server {
listen 80;
listen [::]:80;
server_name default_server;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl ;
client_max_body_size 10M;
keepalive_timeout 15;
server_name default_server;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include snippets/ssl-params.conf;
access_log /home/apiflask/logs/nginx/access-site-api-users.log;
error_log /home/apiflask/logs/nginx/error-site-api-users.log error;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://gunicorn_api_users;
break;
}
}
}
Atenção no nome do usuário das chaves access_log, error_log
. Altere de acordo com o seu projeto.
O próximo artigo Deploy Flask na Digital Ocean - Parte 1 - Criando um droplet será uma nova série chamada Deploy na Digital Ocean. Espero por vocês lá. Abraços