Skip to content

Commit 4583d63

Browse files
committed
Adicionando post sobre como configurar o openshift + flask + gunicor com python 3.5
1 parent 357d046 commit 4583d63

File tree

1 file changed

+171
-0
lines changed

1 file changed

+171
-0
lines changed
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
Title: Configurando OpenShift com Python 3.5 + Flask + Gunicorn
2+
Slug: configurando-python-3.5-openshift-flask-gunicorn
3+
Date: 2017-04-23 20:37:39
4+
Category: Python
5+
Tags: python,tutorial,install,cloud
6+
Author: Horácio Dias
7+
Email: horacio.dias92@gmail.com
8+
Gravatarid:57db1afcce141efc81193425d4a5bbf0
9+
Github: nenodias
10+
Linkedin: nenodias92
11+
Facebook: nenodias
12+
Summary: Tutorial básico de como configurar o python 3.5 com o openshift + flask + gunicorn, utilizando o diy (Do It Yourself), carregando um cartridge customizado ...
13+
14+
Configurando OpenShift com Python 3.5
15+
16+
### Introdução
17+
18+
O [OpenShift](https://www.openshift.com/) é uma plataforma de PasS que possibilita aos desenvolvedores "subir" aplicações na nuvem de uma maneira simples e rápida. Ele funciona a partir de gears(engrenagens) que representam máquinas que irão rodar as aplicações. Dentro de cada gear é possível instalar serviços, os são chamados de "cartridges".
19+
20+
Existem 3 planos:
21+
22+
+ Online (gratuito, com três gears)
23+
+ Enterprise (pago com suporte)
24+
+ Origin (versão da comunidade e pode ser utilizado livremente)
25+
26+
Um problema que me deparei ao utilizar o Openshift é que ele não possui um cartridge com Python3.5. Porém existe uma forma um pouco mais complicada de resolver esse problema.
27+
28+
Após fazer seu cadastro no OpenShift e instalar o [client tools](https://developers.openshift.com/managing-your-applications/client-tools.html) que contém as ferramentas necessárias para configurar nossa aplicação.
29+
30+
Após tudo isso vamos colocar a mão na massa, abra seu terminal e vamos lá.
31+
32+
### Criando a aplicação
33+
34+
``` shell
35+
rhc app create <app-name> https://raw.githubusercontent.com/Grief/openshift-cartridge-python-3.5/master/metadata/manifest.yml diy-0.1
36+
```
37+
Substituindo "<app-name>" pelo nome de sua aplicação.
38+
O arquivo manifest.yml criado por Changaco(github) e "forkeado" por Grief(github) contém as configurações de um cartridge customizado que contém o python 3.5.
39+
40+
Para os curiosos o conteúdo do arquivo
41+
```
42+
---
43+
Name: python
44+
Cartridge-Short-Name: PYTHON
45+
Display-Name: Only Python
46+
Description: 'An embedded cartridge that provides only python, nothing else.'
47+
Version: '3.5.0'
48+
Versions: ['3.5.0', '2.7.11']
49+
License: The Python License
50+
License-Url: http://docs.python.org/3/license.html
51+
Vendor: python.org
52+
Cartridge-Version: 0.0.2
53+
Cartridge-Vendor: praisebetoscience
54+
Categories:
55+
- service
56+
- python
57+
- embedded
58+
Website: https://github.com/praisebetoscience/openshift-cartridge-python-3.5
59+
Help-Topics:
60+
Developer Center: https://www.openshift.com/developers
61+
Provides:
62+
- python
63+
Publishes:
64+
Subscribes:
65+
set-env:
66+
Type: ENV:*
67+
Required: false
68+
set-doc-url:
69+
Type: STRING:urlpath
70+
Required: false
71+
Scaling:
72+
Min: 1
73+
Max: -1
74+
Version-Overrides:
75+
'2.7.11':
76+
Display-Name: Python 2.7
77+
License: The Python License, version 2.7
78+
Provides:
79+
- python-2.7
80+
- python
81+
- python(version) = 2.7
82+
'3.5.0':
83+
Display-Name: Python 3.5
84+
License: The Python License, version 3.5
85+
Provides:
86+
- python-3.5
87+
- python
88+
- python(version) = 3.5
89+
```
90+
91+
Após isso sua aplicação já estárá executando, caso deseje acessar o endereço da mesma deverá ser http://<app-name>-<username>.rhcloud.com.
92+
Você verá que a página do seu projeto não é nada mais do que o diy (Dot It Yourself), que é uma aplicação Ruby de exemplo que você pode alterar, e é o que vamos fazer.
93+
94+
Se você acessar o diretório do seu projeto verá que existe um diretório ".openshift", dentro desse diretório existe um outro diretório chamado "action_hooks", e dentro desse diretório existem dois arquivos "start" e "stop".
95+
96+
+ "<app-name>/.openshift/action_hooks/start"
97+
+ "<app-name>/.openshift/action_hooks/stop"
98+
99+
Os dois arquivos são respectivamente os comandos para "subir" e "pausar" sua aplicação.
100+
101+
### Flask
102+
Vamos criar um projeto de exemplo, bem simples, que apenas nos retorne a versão do python utilizada.
103+
Primeiramente vamos criar nosso requirements.txt, com gunicorn e o flask.
104+
105+
"requirements.txt"
106+
```
107+
gunicorn
108+
flask
109+
```
110+
111+
Depois disso vamos criar o arquivo app.py que conterá nossa aplicação.
112+
113+
"app.py"
114+
```
115+
import sys
116+
from flask import Flask
117+
118+
app = Flask(__name__)
119+
120+
@app.route('/')
121+
def index():
122+
return sys.version
123+
124+
```
125+
Após isso basta fazer o commit de suas alterações.
126+
127+
``` shell
128+
git add .
129+
git commit -am 'Minhas alterações'
130+
```
131+
132+
Após isso você verá que sua aplicação não está rodando, pois ainda não alteramos os arquivos "start" e "stop".
133+
134+
### Configurando o Gunicorn no Start e Stop
135+
O projeto diy do openshift nos deixa uma variável de ambiente $OPENSHIFT_DIY_IP com o IP da máquina, dessa forma podemos passar a variável e porta ao gunicorn.
136+
137+
"start"
138+
``` shell
139+
#!/bin/bash
140+
nohup $HOME/python/usr/bin/pip3 install -r $OPENSHIFT_REPO_DIR/requirements.txt
141+
cd $OPENSHIFT_REPO_DIR
142+
nohup $HOME/python/usr/bin/gunicorn app:app --bind=$OPENSHIFT_DIY_IP:8080 |& /usr/bin/logshifter -tag diy &
143+
```
144+
145+
A primeira linha é o [Shebang](https://pt.wikipedia.org/wiki/Shebang), o que significa que esse arquivo será executado pelo bash.
146+
Na segunda linha vemos [nohup](https://pt.wikipedia.org/wiki/Nohup), que executa os comandos em uma sessão separada, vemos logo apóes vemos o uma chamada ao pip para instalar nossas dependências.
147+
Na terceira linha vemos o nohup, e depois o gunicorn inicializa nossa aplicação flask.
148+
149+
Isso só funciona pois o cartridge customizado instala o python3.5 dentro da pasta home do servidor do openshift.
150+
151+
"stop"
152+
``` shell
153+
#!/bin/bash
154+
source $OPENSHIFT_CARTRIDGE_SDK_BASH
155+
156+
# The logic to stop your application should be put in this script.
157+
if [ -z "$(ps -ef | grep gunicorn | grep -v grep)" ]
158+
then
159+
client_result "Application is already stopped"
160+
else
161+
kill `ps -ef | grep gunicorn | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1
162+
fi
163+
```
164+
Podemos ver que o comando ps procura algum processo do gunicorn, caso ele exista o kill será chamado.
165+
166+
Após isso, é só fazer o commit das alterações e você verá sua aplicação rodando.
167+
168+
Espero que o post ajude a quem quer subir alguma aplicação com python3.5 e só tem o heroku como opção.
169+
170+
### Referências
171+
- [Imaster](https://www.profissionaisti.com.br/2015/04/openshift-paas-de-verdade/)

0 commit comments

Comments
 (0)