• личный кабинет

Python/WSGI — быстрый старт

страница из 1GbWiki

Хостинг 1Gb.ru поддерживает развёртывание Python-приложений в режиме WSGI (через gunicorn) и в standalone-режиме (через прямой запуск скрипта). HTTP-запросы с портов 80 и 443 автоматически проксируются хостингом на внутренний порт 5000 вашего приложения.

Содержание

[править] Подготовка

1. В разделе личного кабинета полный список функций -> HTTP службы добавьте поддержку Python/WSGI для сайта (если сайта у вас ещё нет, то предварительно создайте его с главной страницы личного кабинета по ссылке Зарегистрировать, привязать домен и создать сайт [1], тип сервера "Лучший для PHP").

Добавление поддержки Python/WSGI

[править] Виртуальное окружение

Для развёртывания Python приложений рекомендуется использовать виртуальное окружение. Это исключает конфликты пакетов, упрощает их установку и обновление, позволяет запускать проекты без вмешательства в системный Python, установленный на сервере.

1. Подключитесь к серверу по SSH.

2. Создайте окружение с любым именем, например myvenv:

$ python -m venv myvenv

3. Перейдите в виртуальное окружение myvenv:

$ source ~/myvenv/bin/activate

[править] Управление приложением

[править] Файл ~/conf.d/wsgi

~/conf.d/wsgi — является основным конфигурационным файлом службы Python/WSGI, файл поддерживает следующие основные переменные:

PYTHON_DIR
PYTHON_VENV
PYTHON_START

PYTHON_DIR — название папки, где лежит ваше приложение
PYTHON_VENV — название вашего виртуального окружения
PYTHON_START — команда запуска WSGI приложения

Дополнительная необязательная переменная:

PYTHON_MODE="exec"

может принимать единственное значение exec, используется в том случае, если вы запускаете приложение в режиме standalone (см. примеры ниже).

[править] Файл ~/init.d/wsgi

~/init.d/wsgi — менеджер веб-сервера gunicorn

Примеры:

~/init.d/wsgi start
~/init.d/wsgi stop
~/init.d/wsgi restart

[править] Папка ~/logs_wsgi

В папке содержатся лог-файлы приложения:

stderr.log
stdout.log

[править] Примеры

Во всех примерах будем использовать запуск приложения из ранее созданного виртуального окружения с именем myvenv. Все команды запускаются внутри виртуального окружения.

[править] Запуск standalone приложения: "Hello world"

1. Создайте папку для приложения с любым именем, например myapp:

(myvenv) $ mkdir ~/myapp


2. Разместите файл app.py в папку ~/myapp с содержимым:

from http.server import BaseHTTPRequestHandler, HTTPServer

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.end_headers()

        self.wfile.write(b"""
        <style>
          .block {
            font-size: 40px;
            height: 85%;
            width: 100%;
            position: fixed;
            display: flex;
            align-items: center;
            justify-content: center;
            color: #5e5e5e;
          }
        </style>
        <div class='block'>Hello! I'm here.</div>
        """)

if __name__ == "__main__":
    server = HTTPServer(("0.0.0.0", 5000), Handler)
    server.serve_forever()

3. Запуск

(myvenv) ~/myapp $ python app.py

Открыв свой сайт через обозреватель, вы увидите Hello! I'm here.

4. Чтобы добавить приложение в автозапуск, отредактируйте файл ~/conf.d/wsgi следующим образом:

PYTHON_DIR="myapp"
PYTHON_VENV="myvenv"
PYTHON_START="python app.py"
PYTHON_MODE="exec"

[править] Запуск Flask

1. Установите flask

(myvenv) $ pip install flask

1. Создайте папку для приложения с любым именем, например flaskapp:

(myvenv) $ mkdir ~/flaskapp

2. Разместите файл app.py в папку ~/flaskapp с содержимым:

from flask import Flask
app = Flask(__name__)

@app.route("/")

def hello():
    return """
            <style>
              .block {
                font-size: 40px;
                height: 85%;
                width: 100%;
                position: fixed;
                display: flex;
                align-items: center;
                justify-content: center;
                color: #5e5e5e;
                background-image: url('https://static.1gb.ru/img/flask_logo.png');
                background-size: 25%;
                background-repeat: no-repeat;
              }
            </style>
            <div class='block'>Hello! I'm here.</div>
    """

if __name__ == "__main__":
    app.run()

4. Отредактируйте файл ~/conf.d/wsgi следующим образом:

PYTHON_DIR="flaskapp"
PYTHON_VENV="myvenv"
PYTHON_START="app:app"

Приложение автоматически запустится через несколько секунд.

[править] Запуск Django

1. Установите Django

(myvenv) $ pip install django

2. Создайте django-проект и сайт:

(myvenv) $ django-admin startproject mysite djangoapp

3. В файле ~/djangoapp/mysite/settings.py измените переменную ALLOWED_HOSTS на:

ALLOWED_HOSTS = ["*"]

4. Отредактируйте файл ~/conf.d/wsgi следующим образом:

PYTHON_DIR="djangoapp"
PYTHON_VENV="myvenv"
PYTHON_START="mysite.wsgi"

Приложение автоматически запустится через несколько секунд.