Мега-підручник flask, частина 18 розгортання на heroku cloud, the web land

Мега-підручник flask, частина 18 розгортання на heroku cloud, the web land

У попередній статті ми розглянули варіант традиційного хостингу. Ми бачили два актуальних прикладу хостингу на Linux серверах, спочатку на звичайному сервері під керуванням CentOS, а потім на міні-комп'ютер Raspberry Pi. Ті з читачів, хто не займався адмініструванням Linux систем раніше, можливо, вирішили що це вимагає занадто багато зусиль і могло б бути реалізовано якось простіше.

Сьогодні ми подивимося, чи є розгортання «в хмару» рішенням проблеми зайвої складності процесу.

Але що це означає «розгорнути в хмару»?

Провайдери хмарного хостингу пропонують платформу на якій може бути запущено наш додаток. Все що потрібно від розробника - надати додаток, а все інше включаючи серверне залізо, операційну систему, інтерпретатор мови і базу даних бере на себе сервіс.

Звучить надто добре, щоб бути правдою, чи не так?

Ми розглянемо розгортання додатки на платформі Heroku. однією з найпопулярніших платформ хмарного хостингу. Я вибрав Heroku не тільки через її популярності, але ще й тому, що вона надає безкоштовний рівень сервісу, так що ми розгорнемо наше додаток не витративши при цьому ні цента. Якщо ви хочете більше дізнатися про цей тип послуг, і що пропонують інші провайдери, ви можете ознайомитися зі сторінкою Вікіпедії, присвяченій PaaS.

Хостинг на Heroku


Heroku була однією з перших платформ, які надають послуги PaaS. На початку, вона пропонувала послуги розміщення лише Ruby додатків, але пізніше була включена підтримка багатьох інших мов таких як Java, Node.js і нашого лідера, Python.

Взагалі-то для розгортання програми на Heroku потрібно лише завантажити додаток за допомогою git (ви побачите як це працює вже зовсім скоро). Heroku шукає файл Procfile в кореневій папці програми для отримання інструкцій як додаток повинен виконуватися. Для Python проектів Heroku також очікує побачити файл requirements.txt, що містить список необхідних сторонніх пакетів.

Після завантаження програми, можна вважати що справу зроблено. Heroku застосує свою магію і додаток буде доступно онлайн через лічені секунди. Сума рахунку в кінці періоду, безпосередньо залежить від спожитих обчислювальних потужностей вашим додатком, отже чим більше буде користувачів у вашого застосування, тим більше вам доведеться заплатити.

Чи готові випробувати Heroku? Давайте почнемо!

Установка клієнта Heroku


Незважаючи на те, що деякі завдання можна виконувати прямо з веб інтерфейсу, існують завдання, вирішити які можна тільки з терміналу, тому ми все будемо робити в консолі.

Heroku пропонує утиліту «Heroku клієнт», якій ми будемо користуватися для створення і управління нашим додатком. Ця утиліта може бути запущена під управлінням Windows, Mac OS X і Linux. Якщо для вашої платформи доступний набір інструментів Heroku. то це найпростіший спосіб встановити клієнт Heroku.

На додаток до установок URL, ця команда додає нашому репозитарії віддалений репозитарій (git remote), який ми невдовзі використовуємо для завантаження коду програми в хмару.

Виключаємо локальне зберігання файлів


Деякі функції нашого застосування зберігають інформацію у вигляді файлів на диску.

І тут ми стикаємося з непростим завданням. Додатків, запущеним на Heroku, не доступно постійне зберігання файлів на диску, т. К. Heroku використовує платформу віртуалізації, яка не запам'ятовує дані в вигляді файлів, файлова система очищається від всіх файлів, крім безпосередньо файлів програми, при кожному запуску інстанси. Строго кажучи, додаток може зберігати тимчасові файли на диску, але має бути в змозі відновити ці файли в разі їх зникнення. Крім того, якщо запущено два інстанси, кожен з них використовує свою власну віртуальну файлову систему і немає можливості розділити файли між ними.

Це дійсно неприємні новини для нас. Для початку, це означає, що ми не зможемо використовувати sqlite в якості бази даних.

Наша база повнотекстового пошуку Whoosh також перестане працювати, т. К. Вона зберігає свої дані у вигляді файлів.

Третій проблемний момент - наша система логування. Ми зберігали наш лог в папці / tmp і тепер, при роботі на Heroku, це теж перестане працювати.

Отже, ми позначили 3 основні проблеми для яких нам потрібно шукати рішення.

Першу проблему ми вирішимо міграцією на базу даних, пропоновану Heroku, яка заснована на PostgreSQL.

Для функціонування повнотекстового пошуку у нас немає готової доступної альтернативи. Нам доведеться реалізувати повнотекстової пошук, використовуючи функціональність PostgreSQL, але це вимагає внесення змін до наш додаток. Безумовно шкода, але рішення цієї проблеми зараз відвело б нас далеко в сторону від теми статті, тому для розміщення на Heroku, ми просто відключимо повнотекстової пошук.

І нарешті, т. К. Ми не можемо писати наші логи, ми додамо наші логи до системи логування, використовуваної Heroku, яка, до речі, вельми проста у використанні, т. К. Відправляє в лог все, що виводиться в stdout.

Створення бази даних Heroku


Для створення бази даних ми використовуємо клієнт Heroku:

$ Heroku run init

Running `init` attached to terminal. up. run. 7671

/ App /. heroku / python / lib / python2. 7 / site - packages / sqlalchemy / engine / url. py. 105. SADeprecationWarning. The SQLAlchemy PostgreSQL dialect has been renamed from 'postgres' to 'postgresql'. The new URL format is postgresql [+ driver]. / / . @ /

module = __import__ ( 'sqlalchemy.dialects.% s'% (dialect.)). dialects

compiling catalog 'app / translations / es / LC_MESSAGES / messages.po' to 'app / translations / es / LC_MESSAGES / messages.mo'

Попередження належить SQLAlchemy, т. К. Їй не подобаються URI починаються з postgres: // замість postgresql: //. Цей URI формує Heroku через значення змінної оточення $ DATABASE_URL, так що змінити це не в наших силах. Залишається сподіватися, що цей формат URI пропрацює ще довго.

оновлення програми


Рано чи пізно, прийде час оновити наш додаток. Це буде відбуватися подібно початкового розгортання. Насамперед додаток буде залито на сервер за допомогою git:

Речі начебто стека викликів і інші помилки програми, все будуть в цьому балці.


Тепер ми маємо уявлення про розгортання програми на хмарну платформу, і тому можемо порівняти цей вид хостингу з традиційним варіантом хостингу.

У питанні простоти, перемога за хмарами. Принаймні для Heroku, процес розгортання програми був дуже простий. При розгортанні на виділений сервер або VPS, потрібно було виконати багато підготовчої роботи. Heroku ж бере турботу про це на себе і дозволяє нам зосередитися на нашому додатку.

Питання вартості є спірним моментом. Вартість послуг хмарного хостингу зазвичай дорожче виділених серверів, т. К. Ви платите не тільки за сервер, але і за послуги адміністрування. Типовий тарифний план Heroku, що включає два інстанси і найдешевшу продакшн базу даних, буде коштувати $ 85 (це на момент написання цих рядків. Приблизно, рік тому - прим. Пер.). З іншого боку, якщо ви добре пошукаєте, то цілком зможете підібрати собі цілком пристойний VPS за

У підсумку, мені здається, питання вибору зведеться до вибору того, що важливіше для вас: час або гроші.


Оновлене додаток доступний, як завжди, на github. Або ж ви можете завантажити його у вигляді zip архіву за посиланням:

З розгортанням нашого застосування всіма можливими способами, здається, що наш екскурс добігає кінця.

Я сподіваюся, ці статті були корисним введенням в розробку реального веб додатки, і що той багаж знань, який я вивалив на вас за ці 18 статей, мотивує вас на створення свого власного проекту.

Втім, я не ставлю крапку, і не заперечую ймовірності появи статей про microblog-е. Якщо, і коли, цікава тема прийде на розум, я буду писати ще, але я очікую що частота оновлень тепер дещо спаде. Час від часу, я можу робити якісь дрібні виправлення в додатку, які не заслуговують окремої статті в блозі, так ось ці зміни ви можете відстежувати на GitHub.

Спасибі вам, ще раз, за ​​те, що були лояльним читачем.

Поділитися посиланням:

Схожі статті