Skip to content

Commit 4cd0115

Browse files
committed
add post "Publicando Seu Hello World no Heroku"
1 parent 5275091 commit 4cd0115

2 files changed

Lines changed: 153 additions & 0 deletions

File tree

30.9 KB
Loading
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
Title: Publicando seu Hello World no Heroku
2+
Slug: publicando-seu-hello-world-no-heroku
3+
Date: 2015-01-25 11:30
4+
Tags: web,tutorial,heroku,flask,git,deploy
5+
Author: Diego Garcia
6+
Email: drgarcia1986@gmail.com
7+
Github: drgarcia1986
8+
Site: http://www.codeforcloud.info
9+
Twitter: drgarcia1986
10+
Linkedin: drgarcia1986
11+
Category: heroku
12+
13+
14+
15+
<figure style="float:left;">
16+
<img style="border-radius: 50%;" src="/images/drgarcia1986/heroku.png">
17+
</figure>
18+
</br>
19+
20+
O que é uma aplicação web se ela não está efetivamente na web? Não precisa ser efetivamente uma aplicação de produção, as vezes precisamos validar protótipos, compartilhar ferramentas online ou até mesmo publicar uma aplicação pela satisfação de publicar. Para isso não é necessário se preocupar com infraestrutura ou gastar dinheiro em aluguel de servidores. Existem diversas opções gratuitas e simples para isso, uma delas é o **Heroku**.
21+
22+
<!-- MORE -->
23+
24+
## Heroku
25+
26+
O Heroku é uma das opção mais populares de [plataforma como serviço](http://pt.wikipedia.org/wiki/Plataforma_como_servi%C3%A7o) que suporta app escritos em diversas linguagens, dentre elas, **Python**. Nele existem [planos pagos e gratuitos](https://www.heroku.com/pricing) de acordo com o uso do serviço.
27+
Para conhecer um pouco do processo de _deploy_ do heroku, criaremos um simples **Hello World** utilizando **Flask**.
28+
29+
### O que você irá precisar?
30+
#### Uma conta no Heroku
31+
Não se preocupe, você pode criar uma conta gratuita e usufruir do serviço sem problemas. Entre no [_Sign up_](https://signup.heroku.com/) e crie uma conta informando seu nome e seu e-mail.
32+
33+
#### Git
34+
O Heroku utiliza o Git para realizar o deploy dos app. Você verá mais adianta que um simples `git push` é o suficiente para enviarmos nosso app para o heroku.
35+
36+
#### Python, Pip, VirtualEnv
37+
Bem, você vai criar sua aplicação em python não? Além da boa organização e isolamento para seu ambiente proporcionado pelo **virtualenv**, manter seu app em um virtualenv proporciona algumas praticidades.
38+
39+
### Instalando o Toolbet
40+
O **Toolbet** é uma poderosa ferramente de linha de comando do heroku. É através dela que iremos criar nosso app no heroku.
41+
No ubuntu (ou outras distribuições baseadas no debian) para instalar não poderia ser diferente, basta usar o todo poderoso `apt-get`.
42+
```bash
43+
user@machine:~/$ sudo apt-get install heroku
44+
```
45+
46+
> Se você estiver usando outro sistema operacional, você pode baixar o instalador direto do [site oficial](https://toolbelt.heroku.com/).
47+
48+
Após a instalação, faça o login no heroku através do toolbet para se certificar que tudo deu certo.
49+
```bash
50+
user@machine:~/$ heroku login
51+
Enter your Heroku credentials.
52+
Email: your@email.com
53+
Password (typing will be hidden):
54+
Authentication successful.
55+
```
56+
57+
### Preparando o App
58+
Iremos agora criar nosso app que será compartilhado com o mundo. Nesse processo não tera nada de anormal, apenas a criação de uma aplicação web como qualquer outra.
59+
Criaremos um diretório chamado `heroku_hello_world`.
60+
```bash
61+
user@machine:~/$ mkdir heroku_hello_world
62+
user@machine:~/$ cd heroku_hello_world
63+
user@machine:~/heroku_hello_world$
64+
```
65+
Nele iremos criar um `virtualenv` e ativa-lo.
66+
```bash
67+
user@machine:~/heroku_hello_world$ virtualenv venv
68+
New python executable in venv/bin/python
69+
Installing setuptools, pip...done.
70+
user@machine:~/heroku_hello_world$ source venv/bin/activate
71+
(venv)user@machine:~/heroku_hello_world$
72+
```
73+
Como disse anteriormente, iremos fazer o deploy de um simples **Hello World**. A intenção aqui é ter um **how-to** de como fazer o deploy de um app simples no heroku. Sendo assim, o **Flask** é uma excelente opção para isso. Para instalar o Flask em nosso virtualenv, use o `pip`.
74+
```bash
75+
(venv)user@machine:~/heroku_hello_world$ pip install flask
76+
```
77+
E finalmente vamos criar nosso _Hello World_ no arquivo `hello.py`.
78+
```python
79+
import os
80+
from flask import Flask
81+
82+
83+
app = Flask(__name__)
84+
85+
86+
@app.route("/")
87+
def index():
88+
return "<h1>Hello World</hi>"
89+
90+
if __name__ == "__main__":
91+
port = int(os.environ.get("PORT", 5000))
92+
app.run(host='0.0.0.0', port=port)
93+
94+
```
95+
Um detalhe importante fica por conta da variável `port`. No heroku não é possível subir o app na porta 5000 (porta default do Flask), mas o heroku seta a variável de ambiente `PORT` em seu ambiente, definindo em qual porta a aplicação deve rodar. Da maneira como está implementado nosso app, iremos conseguir podar tanto no heroku como localmente (através da porta 5000).
96+
97+
O heroku precisa conhecer as dependências de nosso app para que, no momento do deploy ele construa o ambiente de forma correta. Seguindo o padrão, o heroku procura pelas dependências através do arquivo `requirements.txt`. Como já isolamos nosso app em um virtualenv, basta utilizar o `pip freeze` para listar os packages instalados e direcionar a saida desse comando para o arquivo _requirements.txt_
98+
```bash
99+
(venv)user@machine:~/heroku_hello_world$ pip freeze > requirements.txt
100+
```
101+
### Preparando o Deploy
102+
Iremos criar agora o arquivo `Procfile`, onde será escrito o comando que o heroku deverá usar para executar nosso app, basicamente o mesmo comando que utilizaríamos para rodar a aplicação localmente. Esse arquivo (assim como o _requirements.txt_) deverá estar na raiz da aplicação.
103+
104+
```bash
105+
(venv)user@machine:~/heroku_hello_world$ echo "web: python hello.py" > Procfile
106+
```
107+
Agora que já possuímos todos os arquivos necessários, iremos iniciar o processo efetivo de deploy da aplicação. Como disse anteriormente, o heroku utiliza o git, sendo assim, nossa aplicação deverá estar em um repositório. Para isso, basta criar um repositório no diretório atual através do comando `git init`.
108+
```bash
109+
(venv)user@machine:~/heroku_hello_world$ git init
110+
Initialized empty Git repository in /home/user/heroku_hello_world/.git/
111+
```
112+
Para não _sujar_ nosso repositório com arquivos desnecessários como por exemplo o virtualenv, crie um arquivo chamado `.gitignore` na raiz do repositório e nele iremos determinar quais arquivos o git deve ignorar.
113+
```
114+
*.pyc
115+
venv
116+
```
117+
Vamos adicionar e commitar nossos arquivos nesse repositório através dos comandos `git add .` para adicionar todos os arquivos e `git commit` para criar nosso commit inicial.
118+
```bash
119+
(venv)user@machine:~/heroku_hello_world$ git add .
120+
(venv)user@machine:~/heroku_hello_world$ git commit -m 'initial commit'
121+
[master (root-commit) 33f63b5] initial commit
122+
4 files changed, 25 insertions(+)
123+
create mode 100644 .gitignore
124+
create mode 100644 Procfile
125+
create mode 100644 hello.py
126+
create mode 100644 requirements.txt
127+
(venv)user@machine:~/heroku_hello_world$
128+
```
129+
Agora vamos criar nosso app no heroku através do commando `heroku apps:create [nome do app]`. O nome da aplicação deverá ser único, pois o heroku utiliza o nome da aplicação para compor a url.
130+
```bash
131+
(venv)user@machine:~/heroku_hello_world$ heroku apps:create dg-hello-world
132+
Creating dg-hello-world... done, stack is cedar-14
133+
https://dg-hello-world.herokuapp.com/ | https://git.heroku.com/dg-hello-world.git
134+
Git remote heroku added
135+
```
136+
> É importante ter realizado o login no heroku através do toolbet antes.
137+
138+
No resultado do comando `heroku apps:create` já são apresentadas duas das coisas mais importantes para nosso app, a url de acesso e repositório git onde deverá ser enviada nossa aplicação.
139+
140+
> Se você executou esse comando no mesmo diretório onde criou seu repositório do git, o heroku já cria o apontamento para o repositório remoto com o nome de `heroku`, não sendo necessário utilizar o comando `git remote add`.
141+
142+
Basicamente a url será no padrão `https://[nome do app].herokuapp.com/`.
143+
144+
### Efetivando o Deploy
145+
Finalmente iremos realizar o deploy de nossa aplicação. Todos os passos anteriores foram passos preparatórios, o que significa que basta executá-los uma vez. Daqui em diante, para fazer o deploy de nosso app, basta enviar os commits do repositório local, para o repositório do heroku, através do comando `git push heroku master`.
146+
```bash
147+
(venv)user@machine:~/heroku_hello_world$ git push heroku master
148+
```
149+
E pronto, basta agora acessar a url do seu app (no caso desse exemplo foi [https://dg-hello-world.herokuapp.com/](https://dg-hello-world.herokuapp.com/)) e compartilhar com seus amigos =].
150+
151+
**Referências**<br \>
152+
[(Heroku) Getting Started With Python](https://devcenter.heroku.com/articles/getting-started-with-python)<br />
153+
[Deployment on the Heroku Cloud](http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xviii-deployment-on-the-heroku-cloud)

0 commit comments

Comments
 (0)