Хостинг 1Gb.ru поддерживает развёртывание Python-приложений в режиме WSGI (через gunicorn) и в standalone-режиме (через прямой запуск скрипта). HTTP-запросы с портов 80 и 443 автоматически проксируются хостингом на внутренний порт 5000 вашего приложения.
Содержание |
1. В разделе личного кабинета полный список функций -> HTTP службы добавьте поддержку Python/WSGI для сайта (если сайта у вас ещё нет, то предварительно создайте его с главной страницы личного кабинета по ссылке Зарегистрировать, привязать домен и создать сайт [1], тип сервера "Лучший для PHP").
Для развёртывания 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. Все команды запускаются внутри виртуального окружения.
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"
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"
Приложение автоматически запустится через несколько секунд.
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"
Приложение автоматически запустится через несколько секунд.