Skip to content

Тестовое приложение на Python Flask

  • Установите необходимые пакеты: JSON-процессор jq, Git-клиент, менеджер пакетов PIP, систему управления виртуальными средами virtualenv, набор заголовочных файлов для Python C API и веб-сервер Nginx:

    sudo apt-get --yes install jq git python-pip virtualenv python-dev nginx-full
    
  • Создайте директорию, в которой будет находиться приложение. Также сделайте пользователя, от имени которого вы подключились к ВМ, владельцем директории:

    sudo mkdir /srv/test-app
    sudo chown -R $USER /srv/test-app
    
  • Перейдите в директорию и создайте в ней виртуальное окружение virtualenv:

    cd /srv/test-app
    virtualenv test-venv
    
  • Запустите виртуальное окружение:

    . test-venv/bin/activate
    
  • Установите в виртуальное окружение фреймворк Flask и веб-сервер uWSGI:

    pip install flask uwsgi
    
  • Деактивируйте виртуальное окружение:

    deactivate
    
  • Создайте в директории /srv/test-app файл api.py:

    touch api.py
    
  • Откройте файл api.py любым текстовым редактором и скопируйте в него код на языке Python, который:

    • Принимает на вход текстовую строку в параметре text.
    • Записывает каждое слово из переданной строки наоборот.
    • Возвращает ответ:

      • В формате JSON, если клиентское приложение может принимать JSON.
      • Обычный текст, если клиентское приложение не может принять JSON.
# api.py
import json
from flask import Flask, request, make_response as response

app = Flask(__name__)

@app.route("/")
def index():
    text = request.args.get('text')
    json_type = 'application/json'
    json_accepted = json_type in request.headers.get('Accept', '')
    if text:
        words = text.split()
        reversed_words = [word[::-1] for word in words]
        if json_accepted:
            res = response(json.dumps({'text': reversed_words}), 200)
        else:
            res = response(' '.join(reversed_words), 200)
    else:
        res = response('text not found', 501)
    res.headers['Content-Type'] = json_type if json_accepted else 'text/plain'
    return res
  • Создайте в директории /srv/test-app файл wsgi.py:

    touch wsgi.py
    
  • Откройте файл wsgi.py любым текстовым редактором и скопируйте в него код, запускающий тестовое приложение:

# wsgi.py
from api import app

if __name__ == "__main__":
    app.run()
  • Создайте в директории /srv/test-app файл test-app.ini:

    touch test-app.ini
    
  • Откройте файл test-app.ini любым текстовым редактором и скопируйте в него конфигурацию сервера uWSGI:

# test-app.ini
[uwsgi]
module = wsgi:app

master = true
processes = 1

socket = test-app.sock
chmod-socket = 660
vacuum = true

die-on-term = true
  • Назначьте пользователя www-data владельцем директории /srv/test-app и файлов в ней:
sudo chown -R www-data:www-data /srv/test-app
  • Подготовьте сервис для запуска вашего uWSGI-сервера. Для этого приведите файл /etc/systemd/system/test-app.service к следующему виду:
# /etc/systemd/system/test-app.service
[Unit]
Description=uWSGI instance to serve test API
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/srv/test-app
Environment="PATH=/srv/test-app/test-venv/bin"
ExecStart=/srv/test-app/test-venv/bin/uwsgi --ini test-app.ini

[Install]
WantedBy=multi-user.target
  • Укажите настройки нового виртуального сервера в конфигурации Nginx, приведя файл /etc/nginx/sites-available/test-app.conf к следующему виду:
# /etc/nginx/sites-available/test-app.conf
server {
    #server_name test-app.yandex www.test-app.yandex;

    listen 80;

    location /test/ {
        include uwsgi_params;
        uwsgi_param SCRIPT_NAME /test;
        uwsgi_modifier1 30;
        uwsgi_pass unix:/srv/test-app/test-app.sock;
    }
}
  • Создайте символическую ссылку, указывающую на конфигурационный файл Nginx test-app.conf:

    sudo ln -s /etc/nginx/sites-available/test-app.conf /etc/nginx/sites-enabled/
    
  • Удалите символическую ссылку, указывающую на конфигурацию Nginx по умолчанию:

    sudo unlink /etc/nginx/sites-enabled/default
    
  • Добавьте сервис в список автозапуска системы:

    sudo systemctl enable test-app.service
    

Проверьте работу тестового приложения test-app

Чтобы убедиться, что тестовое приложение работает, а веб-сервер настроен верно, выполните простой запрос.

  • В строке браузера введите URL для проверки работы веб-сервера и приложения:

    http://<публичный_IP-адрес_ВМ>/test/?text=hello_world
    

Источник