Автор оригинала: Joaquin Guardado.
Flask-это веб-фреймворк для python, то есть он предоставляет простой интерфейс для динамической генерации ответов на веб-запросы. Давайте начнем с запуска сервера Flask на экземпляре Amazon Web Services EC2.
1. Запуск экземпляра EC2
1. Запустите экземпляр EC2.
- Войдите в консоль AWS здесь
- Выберите EC2 из сервисов AWS.
- Нажмите на кнопку Запустить экземпляр.
- Выберите 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 (который также должен быть установлен).
$ 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:
WSGIDaemonProcess flaskapp threads=5 WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgiWSGIProcessGroup 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. Пусть приложение 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
Если вам понравился этот урок, пожалуйста, дайте мне несколько лайков. Счастливого кодирования!