Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8fdcd98

Browse filesBrowse files
authored
добавлен конспект про Heroku
1 parent 70e2bef commit 8fdcd98
Copy full SHA for 8fdcd98

File tree

Expand file treeCollapse file tree

1 file changed

+143
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+143
-0
lines changed

‎Heroku.md

Copy file name to clipboard
+143Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# Heroku
2+
3+
## PaaS
4+
5+
Мы с вами научились выкладывать наши сайты и ботов на Pythonanywhere, но это не единственный вариант. Существуют другие подобные сервисы - [Heroku](https://www.heroku.com/), [Scalingo](https://scalingo.com/), [Openshift](https://www.openshift.com/).
6+
7+
Все они являются PaaS - Platform-as-a-Service, которые позволяют вам очень просто пользоваться облачным хостингом и быстро выкладывать свои приложения вместо того, чтобы самостоятельно настраивать сервер.
8+
9+
## Почему еще и Heroku?
10+
11+
У бесплатных аккаунтов Heroku есть некоторое количество преимуществ перед аналогичными аккаунтами Pythonanywhere:
12+
13+
|Pythonanywhere | Heroku |
14+
| --- | --- |
15+
|только одно приложение | несколько приложений |
16+
| свой домен - платная функция | позволяет использовать собственное доменое имя |
17+
| ограниченный доступ к внешним ресурсам | доступ к внешним ресурсам не ограничен |
18+
19+
__Подробнее про ограниченный доступ__: на Pythonanywhere можно обращаться лишь к тем сайтам, которые входят в белый список разрешенных ресурсов. Т.е. например, наш сайт, который регулярно скачивает новости с hse.ru не будет работать на Pythonanywhere, потому что hse.ru не включен в белый список. На Heroku таких ограничений нет.
20+
21+
__Подробнее про количество бесплатных приложений__: на Heroku можно создавать несколько приложений бесплатно лишь до тех пор, пока у вас есть свободные Dyno (про это будет ниже).
22+
23+
24+
## Подготовка к выкладыванию
25+
26+
1) Чтобы наш фласк-сайт или фласк-бот заработал на Heroku, нужно убедиться, что в конце основной программы написан вот такой код:
27+
28+
```python
29+
if __name__ == '__main__':
30+
import os
31+
app.debug = True
32+
port = int(os.environ.get("PORT", 5000))
33+
app.run(host='0.0.0.0', port=port)
34+
```
35+
36+
37+
2) В директории с вашим фласк-приложением обязательно должны быть следующие три файла:
38+
* __`requirements.txt`__ - в этом файле нужно перечислить все не стандартные питоновские модули, которые необходимы для вашей программы. В списке нужно указать не только название модуля, но и нужную вам версию. Выглядеть это будет примерно так:
39+
40+
```
41+
Flask==0.12.1
42+
pymorphy2==0.8
43+
pymystem3==0.1.5
44+
requests==2.13.0
45+
```
46+
47+
Обратите внимание, что в этот список НЕ НУЖНО писать setuptools и pip!
48+
49+
Когда вы будете выкладывать приложение, Heroku прочитает файл `requirements.txt` и установит все перечисленные модули командой `pip install -r requirements.txt`.
50+
51+
* __`runtime.txt`__ - в этом файле нужно написать одну строчку:
52+
53+
python-3.6.1
54+
55+
Если в директории нет `runtime.txt`, то Heroku будет по умолчанию думать, что ваше приложение написано на Python 2.7.
56+
57+
* __`Procfile`__ - обратите внимание, что у файла нет расширения. В этом файле нужно написать одну строчку:
58+
59+
web: python flask_app.py
60+
61+
Вместо `flask_app.py` нужно написать название вашего файла с фласк-приложением. `Procfile` - это специальный файл, в котором нужно объяснить Heroku, как именно нужно запускать ваше приложение. `web` значит, что мы написали приложение, которое отвечает на http-запросы, `python flask_app.py` обозначает команду, с помощью которой приложение запускается.
62+
63+
64+
3) Для выкладывания приложений на Heroku используется git. Поэтому если в вашей директории с проектом еще нет git-репозитория, его нужно создать. Открываем терминал (Mac, Linux) или командную строку (Windows) и пишем:
65+
* `cd путь-к-директории` - переходим в директорию с нашим фласк-проектом,
66+
* `git init` - создаем в текущей директории репозиторий,
67+
* `git add .` - говорим гиту следить за всеми файлами в репозитории,
68+
* `git commit -m 'Initial commit'` - делаем первый коммит.
69+
70+
71+
## Как выложить сайт на Heroku?
72+
73+
1) Зарегистрироваться на сайте [Heroku](https://www.heroku.com/), ваш email будет логином. Когда вы зарегистрировались, вы попадаете в Dashboard. Сейчас у вас там ничего нет - вам предлагают создать приложение (an app) или пройти туториал по работе с Heroku и выбранного вами языка программирования. Туториал по питону там ориентирован на джанго, мы работаем с фласком, так что наши действия будут слегка отличаться.
74+
75+
2) Скачать установщик для вашей ОС и установить Heroku CLI - Command Line Interface - https://devcenter.heroku.com/articles/heroku-cli
76+
77+
3) Открыть терминал (Mac, Linux) или командную строку (Windows) и выполнить команды:
78+
79+
* __`cd путь-к-директории`__ - переходим в директорию с нашим фласк-проектом,
80+
* __`heroku login`__ - логинимся в наш аккаунт Heroku,
81+
* ввести свой емейл и пароль, с которыми мы зарегистрировались,
82+
* __`heroku create`__ - создаем приложение, которое поможет Heroku получить наш код и запустить его. В этот момент Heroku делает сразу несколько вещей.
83+
84+
Во-первых, он генерирует случайное название для нашего приложения, но можно передать ваше собственное название, например, `heroku create my-app-04062017`. Ваш сайт будет доступен по адресу `имя-приложения.herokuapp.com`.
85+
86+
Во-вторых, к вашему репозиторию добавляется удаленный репозиторий (git remote), который называется `heroku`. У одного локального репозитория на вашем компьютере может быть несколько удаленных (например, у вас может быть `origin` - это ваш удаленный репозиторий на GitHub, и `heroku` - удаленный репозиторий на Heroku.)
87+
88+
* __`git push heroku master`__ - эта команда отправляет наш код на облачный хостринг, и Heroku устанавливает нужные модули.
89+
* __`heroku ps:scale web=1`__ - эта команда говорит запустить наш фласк-сайт на одном dyno.
90+
91+
> A dyno is a lightweight Linux container that runs a single user-specified command.
92+
93+
То есть ваш сайт или бот будет работать на маленьком виртуальном Линукс-"сервере". Бесплатно вам доступно 550 или 1000 таких dyno.
94+
95+
* __`heroku open`__ - эта команда открывает ваш сайт в браузере. Ура! Все готово!
96+
* Если по какой-то причине сайт не заработал, то нужно посмотреть логи:
97+
98+
- __`heroku logs`__ - эта команда распечатает 100 последних строчек логов, т.е. если произошла какая-то ошибка, то информацию об этой ошибке вы увидите в конце логов.
99+
- или __`heroku logs --tail`__ - эта команда показывает логи в реальном времени, т.е. если ваша программа что-то печатает в консоль с помощью `print(...)` или питон печатает сообщение об ошибке, то вы будете в реальном времени видеть, что именно происходит.
100+
- подробнее - https://devcenter.heroku.com/articles/logging
101+
102+
Когда вы меняете что-то в вашей программе\директории, то изменения нужно отправить на Heroku:
103+
104+
git add .
105+
git commit -m "Demo"
106+
git push heroku master
107+
heroku ps:scale web=1
108+
109+
110+
## Секретные ключи
111+
112+
Поскольку мы отправляем все файлы на Heroku через git, возникает небольшая проблема:
113+
114+
Что если у нас есть секретные файлы (например, API-токены или пароли), которые включены в `.gitignore`? Получается, мы никак не сможем отправить эти секретные файлы на облачный хостинг через git.
115+
116+
### Переменные среды
117+
Для работы с секретами рекомендуется использовать [переменные среды](https://en.wikipedia.org/wiki/Environment_variable): ваши ключи будут храниться в текстовых переменных вашей системы и в вашем Heroku-приложении, но при этом они никогда не попадут в открытый git-репозиторий.
118+
119+
Раньше мы с вами писали секретные ключи в игнорируемый файл (например, `TOKEN = "......"` внутри `conf.py`) и импортировали секретные переменные с помощью `from conf import *`.
120+
121+
Вместо этого, можно установить переменную среды прямо в терминале\командной строке:
122+
123+
* Mac, Linux - `export SOME_SECRET_KEY=1c3-cr3am-15-yummy`
124+
* Windows - `set SOME_SECRET_KEY 1c3-cr3am-15-yummy`
125+
* Heroku - `heroku config:set SOME_SECRET_KEY=1c3-cr3am-15-yummy`
126+
127+
После этого и на вашем компьютере, и в облачном хостинге Heroku переменную среды можно прочитать с помощью питона:
128+
129+
```python
130+
>>> import os
131+
>>> os.environ["SOME_SECRET_KEY"]
132+
"1c3-cr3am-15-yummy"
133+
```
134+
135+
136+
То есть строчку `from conf import *` вам придется заменить на строчки вида:
137+
138+
```python
139+
import os
140+
SOME_SECRET_KEY = os.environ["SOME_SECRET_KEY"]
141+
```
142+
143+

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.