Lucas Simon

Web Developer. lucassrod@gmail.com

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.

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