Deploy Flask na Digital Ocean - Parte 8 - Configurando o aplicativo
Clonando o repositório
Altere para o nosso diretório cd sites/
e execute o comando para clonar o projeto.
$ git clone git@github.com:lucassimon/flask-api-users.git
Configurando o projeto
Crie o virtualenv com o comando abaixo:
$ python3 -m venv venvs
Ative o virtualenv
$ source venvs/bin/activate
E instale os pacotes necessários
$ pip install -r sites/flask-api-users/requirements/prod.txt
Altere para o nosso diretório sites/
$ cd sites/flask-api-users
Crie um arquivo .env
a partir do .env-example
e configure a entrada correta para o PORT=9000,MONGODB_URI=, SECRET_KEY=
Copiando os scripts de configuração
Os arquivos do repositório podem ser considerados templates ou arquivos modelos. Fazendo a cópia podemos fazer as customizações quando necessárias.
Dado que nossos scripts se localizam no $HOME/sites/flask-api-users/confs
, vamos copia-los para a nossa pasta $HOME/scripts
.
Primeiro:
$ cd $HOME/scripts
E depois:
$ cp $HOME/sites/flask-api-users/confs/* .
Linkando os scripts criados
Acesse o servidor como root
Nginx
Criar apontamento dos links nas configurações do supervisor e nginx.
$ cd /etc/nginx/sites-enabled
Crie o link:
$ ln -s /home/apiflask/scripts/nginx_api_users.conf .
O diretório deve parecer com isso:
root@teste-devops:/etc/nginx/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 34 nov 8 19:49 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root 43 nov 9 20:37 nginx_api_users.conf -> /home/apiflask/scripts/nginx_api_users.conf
Conferir as configurações do nginx.
root@teste-devops:/etc/nginx/sites-enabled# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Supervisor
$ cd /etc/supervisor/conf.d
$ ln -s /home/apiflask/scripts/supervisor_api_users.conf .
Executando os serviços
Primeiro reinicie o supervisord para pegar as informações acima. Também pode ser feito pelo supervisorctl reread e restart
# service supervisor restart
Confira se o serviço esta executando.
root@teste-devops:~# supervisorctl
api_users:gunicorn_api_users RUNNING pid 6205, uptime 0:00:22
supervisor>
E reiniciar o nginx. Pode ser com reload ou restart
root@teste-devops:~# service nginx reload
Logs
Qualquer problema da aplicação ou de configuração pode ser vista na pasta do usuário apiflask
(venvs)
# apiflask @ teste-devops in ~/logs [20:48:34]
$ ls -l
total 12
drwxr-xr-x 2 apiflask apiflask 4096 nov 9 20:47 gunicorn
drwxr-xr-x 2 apiflask apiflask 4096 nov 9 20:44 nginx
drwxr-xr-x 2 apiflask apiflask 4096 nov 9 20:47 supervisor
Testando
# lucas @ notebook in /workspaces/python/flask-api-users on git:capitulo14/deploy-flask-na-digital-ocean x [18:51:08]
$ http -v POST 165.227.213.240/users full_name="07368680629" email="teste@teste.com" password='123456' confirm_password='123456'
POST /users HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 108
Content-Type: application/json
Host: 165.227.213.240
User-Agent: HTTPie/0.9.8
{
"confirm_password": "123456",
"email": "teste@teste.com",
"full_name": "07368680629",
"password": "123456"
}
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 886
Content-Type: application/json
Date: Fri, 09 Nov 2018 20:52:21 GMT
Server: nginx/1.10.3
{
"data": {
"active": false,
"cpf_cnpj": "",
"email": "teste@teste.com",
"full_name": "07368680629",
"id": "5be5f385a2d3a21843f80d10"
},
"message": "Usuário criado(a).",
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NDQzODg3NDEsImlhdCI6MTU0MTc5Njc0MSwibmJmIjoxNTQxNzk2NzQxLCJqdGkiOiJlZWM1Yzg2My0yMGZhLTQyMDktYmU3NC0zY2JhODc2NzZhYzMiLCJ0eXBlIjoicmVmcmVzaCIsImlkZW50aXR5IjoidGVzdGVAdGVzdGUuY29tIn0.ZQdOsOZejcBGwEApn_kOy2Rq9uvp-9K8BXWCZ5xnW_I",
"resource": "Users",
"status": 200,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NDE3OTc5NDEsInVzZXJfY2xhaW1zIjp7ImFjdGl2ZSI6ZmFsc2V9LCJpYXQiOjE1NDE3OTY3NDEsIm5iZiI6MTU0MTc5Njc0MSwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIiwianRpIjoiM2MyOTY1MjctMWZmMy00YTE1LTg3NzMtNGU5Y2VkNzQzODM5IiwiaWRlbnRpdHkiOiJ0ZXN0ZUB0ZXN0ZS5jb20ifQ.oshZpyakyyWxolW6r4bFeJhdTg90U3j2MM7bTs0MfVU"
}