Рубрики
Без рубрики

Развертывание Приложения Flask На AWS EC2

Разверните приложение Flask в AWS EC2 за 12 простых шагов

Автор оригинала: Joaquin Guardado.

Flask-это веб-фреймворк для python, то есть он предоставляет простой интерфейс для динамической генерации ответов на веб-запросы. Давайте начнем с запуска сервера Flask на экземпляре Amazon Web Services EC2.

1. Запуск экземпляра EC2

1. Запустите экземпляр EC2.

  1. Войдите в консоль AWS здесь
  2. Выберите EC2 из сервисов AWS.
  3. Нажмите на кнопку Запустить экземпляр.
  4. Выберите Ubuntu Server 16.04 LTS (HVM), SSD Volume Type — ami-43a15f3e вместо Amazon Linux. Точные версии могут меняться со временем.
  • Нажмите на кнопку Обзор и запуск.
  • Настройте группы безопасности, как показано ниже. Этот параметр позволяет получить доступ к порту 80 (HTTP) из любого места, а ssh-доступ только с любого IP-адреса.

2. Настройка экземпляра

Теперь, когда мы подключились к экземпляру, пришло время установить некоторые из программ, которые нам понадобятся. 1. Подключитесь к экземпляру с помощью ssh из терминала. $ ssh -i "ваше приложение.pem" ubuntu@yourapppublicinstance.compute-1.amazonaws.com 2. Установите веб-сервер apache и mod_wsgi.

$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi

Если вы наведете браузер на публичное DNS-имя вашего экземпляра, то увидите страницу сервера apache “Это работает!”. 3. Установите Flask с помощью инструмента pip (который также должен быть установлен).

Если вы наведете браузер на публичное DNS-имя вашего экземпляра, то увидите страницу сервера apache
$ sudo apt-get install python-pip
$ sudo pip install flask

4. Создайте каталог для нашего приложения Flask. Мы создадим каталог в нашем домашнем каталоге для работы и свяжемся с ним из корня сайта, определенного в конфигурации apache ( /var/www/html по умолчанию см. /etc/apache2/sites-enabled/000-default.conf для текущего значения).

$ mkdir ~/flaskapp
$ sudo ln -sT ~/flaskapp /var/www/html/flaskapp

Чтобы убедиться, что наша операция работает, создайте простой index.html файл.

$ cd ~/flaskapp
$ echo "Hello World" > index.html

Теперь вы должны увидеть “Hello World”, отображаемый при переходе к приложению (ваш экземпляр public DNS)/flask в вашем браузере.

Теперь вы должны увидеть

3. Запуск простого приложения Flask

1. Создайте приложение. Мы будем использовать простой пример “Hello world” из документации Flask. Поместите следующее содержимое в файл с именем flaskapp.py :

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
  return 'Hello from Flask!'
if __name__ == '__main__':
  app.run()

2. Создайте файл .wsgi для загрузки приложения. Поместите следующее содержимое в файл с именем flaskapp.wsgi :

#flaskapp.wsgi
import sys
sys.path.insert(0, '/var/www/html/flaskapp')

from flaskapp import app as application

3. Включите mod_wsgi. Сервер apache по умолчанию отображает html-страницы, но для обслуживания динамического контента из приложения Flask нам придется внести несколько изменений. В конфигурационном файле apache, расположенном по адресу/etc/apache2/sites-enabled/000-default.conf, добавьте следующий блок сразу после строки DocumentRoot/var/www/html:

3. Включите mod_wsgi. || Сервер apache по умолчанию отображает html-страницы, но для обслуживания динамического контента из приложения Flask нам придется внести несколько изменений. В конфигурационном файле apache, расположенном по адресу/etc/apache2/sites-enabled/000-default.conf, добавьте следующий блок сразу после строки DocumentRoot/var/www/html:
WSGIDaemonProcess flaskapp threads=5
WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi


    WSGIProcessGroup flaskapp
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all

4. Перезагрузите веб-сервер. Используйте эту команду для перезапуска сервера с новой конфигурацией $ sudo service apache2 restart 5. Тестовая конфигурация. Если вы снова перейдете в свой браузер к общедоступному DNS-серверу экземпляра EC2, то увидите текст, возвращаемый функцией hello_world нашего приложения: “Привет из Flask!” Наш сервер теперь работает и готов к сжатию некоторых данных (если что-то не работает, попробуйте проверить файл журнала в /var/log/apache2/error.log .

4. Перезагрузите веб-сервер. || Используйте эту команду для перезапуска сервера с новой конфигурацией || $ sudo service apache2 restart || 5. Тестовая конфигурация. || Если вы снова перейдете в свой браузер к общедоступному DNS-серверу экземпляра EC2, то увидите текст, возвращаемый функцией hello_world нашего приложения:

4. Пусть приложение Flask работает

Теперь, когда у нас есть сервер, готовый к работе, мы настроим простой сервис для обеспечения подсчета букв из входной строки. 1. Соберите информацию с URL-адреса. Flask позволяет нам направлять запросы к функциям на основе запрошенного URL-адреса. Мы также можем получить входные данные из URL-адреса для передачи в функцию. Добавьте к этому следующее flaskapp.py:

# flaskapp.py
@app.route('/countme/')
def count_me(input_str):
    return input_str

Эта функция count_me() будет возвращать что-либо после count me/части URL-адреса. Перезагрузите веб-сервер, чтобы увидеть его в действии: $ sudo service apache2 restart

2. Обрабатывайте информацию Давайте сделаем нашу функцию count_me() немного интереснее. Изменить flaskapp.py вот так:

# flaskapp.py
from collections import Counter
...
@app.route('/countme/')
def count_me(input_str):
    input_counter = Counter(input_str)
    response = []
    for letter, count in input_counter.most_common():
        response.append('"{}": {}'.format(letter, count))
    return '
'.join(response)

Перезагрузите сервер и просмотрите результаты: $ sudo service apache2 restart

Обратите внимание, что форматирование HTML-ответов внутри этих функций является плохой практикой, вместо этого обычно следует использовать шаблоны. Вся функция count_me() может быть записана в одну логическую строку:

return '
'.join('"{}": {}'.format(let, cnt) for let, cnt in Counter(in_str).most_common())

Если приложение выдает какие-либо ошибки, журнал ошибок может помочь вам в отладке. $ sudo tail -f/var/log/apache2/error.log

Если вам понравился этот урок, пожалуйста, дайте мне несколько лайков. Счастливого кодирования!