Flask на хостинге

Содержание
Введение
Подключение к серверу
Подготовка окружения
Установка Flask
Создание необходимых файлов и директорий
.htaccess
passenger_wsgi
Flask API для сайта на PHP
Скрипт для автоматической установки
Другие статьи о Flask

Введение

Эта статья именно про запуск на виртуальном хостинге.

Про деплой на своём сервере есть отдельная статья:

«Запуск Flask приложения на сервере Linux (Nginx + Gunicorn)»

Про Flask в Docker читайте здесь

Конечно, многое зависит от хостинга но основные проблемы, думаю, везде одинаковые.

Flask Logo

Flask на хостинге

В интернете очень много статей о том как запустить Flask локально. Но мало руководств по настройке на виртуальном хостинге (UPD: за последние пару лет стало больше).

За материал к этому руководству, я благодарю техподдержку хостинга beget.ru их статью о настройке Flask на хостинге можете изучить здесь

Начало работы с Flask на хостинге

Сперва нужно подключиться к своему аккаунту на хостинге через SSH.

В Linux SSH клиент скорее всего встроен.

В Windows можно установить SSH из Powershell или Windows Settings или использовать дополнительный терминал подобный Putty или MobaXterm

Подключиться к аккаунту проще всего по имени домена

ssh username@your_domain

Можно подключиться и по IP. Чтобы его узнать - выполнить

ping your_domain

ssh username@ip

Если на Вашем хостинге установлен Docker - перейдите в контейнер командой

ssh localhost -p222

Слева в приглашении командной строки появится (docker)

(docker) username@server:~/your_domain.ru

Если это beget.ru , либо узнайте как это сделать на вашем хостинге, задав вопрос в техподдержку.

Подготовка окружения

После того как вы подключились к своему хостингу и зашли в докер окружение, вам возможно понадобится подготовить рабочее окружения для установки Flask.

Нужно установить Python 3.6 или выше. Подробнее про установку с помощью configure make install вы можете прочитать здесь .

Если Python версии 3.10 и выше, то нужно будет обновить openssl

Рекомендуется создать в домашней директории временную папку

cd ~/.beget
mkdir tmp

Обновление OpenSSL

cd ~/.beget/tmp wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz tar -xvzf openssl-1.1.1l.tar.gz && cd openssl-1.1.1l ./config --prefix=$HOME/.local --openssldir=$HOME/.local/ssl '-Wl,--enable-new-dtags,-rpath,$(LIBRPATH)'

… ********************************************************************** *** *** *** OpenSSL has been successfully configured *** *** *** *** If you encounter a problem while building, please open an *** *** issue on GitHub <https://github.com/openssl/openssl/issues> *** *** and include the output from the following command: *** *** *** *** perl configdata.pm --dump *** *** *** *** (If you are new to OpenSSL, you might want to consult the *** *** 'Troubleshooting' section in the INSTALL file first) *** *** *** **********************************************************************

make -j$((`nproc`/4)) && make install
~/.local/bin/openssl version

OpenSSL 1.1.1l 24 Aug 2021

Установка Python

На момент написания этой статьи на хостинге Beget гарантированно можно установить Python 3.11.0. Если вы пользуетесь другим хостингом - уточните какова последняя поддерживаемая версия.

cd ~/.beget/tmp wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz tar -xvzf Python-3.11.0.tgz && cd Python-3.11.0 ./configure --prefix=$HOME/.local --with-openssl=$HOME/.local --with-openssl-rpath=auto --enable-optimizations --enable-loadable-sqlite-extensions LDFLAGS="-Wl,-rpath /usr/local/lib" make -j$((`nproc`/4)) && make install python3 -V

Python 3.11.0

Установка Flask

Обновите pip

python3 -m pip install --upgrade pip

Установите flask

python3 -m pip install flask

или

pip3 install flask --user --ignore-installed

Создание необходимых файлов и директорий

Создадим простейшее web приложение в корне вашего сайта.

Если у Вас на сайте уже есть папка public_html - сохраните её куда-нибудь в надёжное место и удалите с сайта.

Начинаем в абсолютно пустой директории, наша цель - создать такую структуру (skeleton)

. └── your_domain.ru ├── HelloFlask │ └── __init__.py ├── .htaccess ├── passenger_wsgi.py └── tmp

Создайте две директории HelloFlask и tmp

mkdir HelloFlask tmp

Создаём два файла в корневой директории .htaccess и passenger_wsgi

touch .htaccess
touch passenger_wsgi.py

Если Вы умеете редактировать файлы на хостинге - продолжайте читать эту статью. Если это вызывает проблемы - прочитайте мою статью «Текстовый редактор vi»

.htaccess

Если вы этого ещё не сделали - в корневой директории проекта выполните

touch .htaccess

В файле .htaccess напишите

PassengerEnabled On PassengerPython /home/a/username/.local/bin/python3

Причём /home/a/username/.local/bin/python3 Вам нужно будет заменить на путь до Вашего python3.

Чтобы его узнать выполните

which python3

Нужно именно which python3 так как which python вернёт путь до Python 2.7.17 /usr/bin/python

С файлом .htaccess разобрались, теперь редактируем passenger_wsgi.py

passenger_wsgi

# -*- coding: utf-8 -*- import sys, os # указываем директорию с проектом sys.path.append('/home/a/username/testsetup.ru/HelloFlask') # указываем директорию с библиотеками, куда поставили Flask sys.path.append('/home/a/username/.local/bin/flask') from HelloFlask import app as application # Когда Flask стартует, он ищет application. # Если не указать 'as application', сайт не заработает from werkzeug.debug import DebuggedApplication # Опционально: подключение модуля отладки application.wsgi_app = DebuggedApplication(application.wsgi_app, True) # Опционально: включение модуля отадки application.debug = False # Опционально: True/False устанавливается по необходимости в отладке

Где в /home/a/username/ нужно везде заменить a/username на ваше имя пользователя

А testsetup.ru нужно заменить на ваш домен.

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

С файлом passenger_wsgi.py разобрались, переходим в папку HelloFlask

cd HelloFlask

Создаём там файл __init__.py

touch __init__.py

И пишем там

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

С файлом __init__.py разобрались, возвращаемся в корневую директорию

cd ..

И выполняем

ln -s public_html public
touch tmp/restart.txt

Открывайте Ваш сайт и убедитесь, что там написано Hello Flask!

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

touch tmp/restart.txt

Flask API для сайта на PHP

Допустим у вас уже есть сайт на PHP и нужно сделать для него REST API на основе Flask. Для этого не обязательно заказывать выделенный сервер - на хостинге Beget вам помогут реализовать эту идею даже на самом простом тарифе.

В корневой директории сайта создайте директорию flaskapi

Она будет на одном уровне с public_html

Там же создайте файл .htaccess

mkdir flaskapi
touch .htaccess
ls -a

flaskapi public_html .htaccess

vi .htaccess

PassengerEnabled On PassengerPython /home/u/user/.local/bin/python3 PassengerAppRoot /home/u/user/domainname.ru/flaskapi PassengerBaseURI /flaskapi

Перейдтие в директорию flaskapi создайте ссылку public , папку с проектом HelloFlask и создайте там файл passenger_wsgi.py

cd flaskapi
ln -s public_html public
mkdir HelloFlask
touch HelloFlask/__init__.py
touch passenger_wsgi.py
vi passenger_wsgi.py

# -*- coding: utf-8 -*- import sys, os # указываем директорию с проектом sys.path.append('/home/u/user/domainame.ru/flaskapi/HelloFlask') # указываем директорию с библиотеками, куда поставили Flask sys.path.append('/home/u/user/.local/lib/python3.7/site-packages') #from flaskapi import app as application from HelloFlask import app as application # Когда Flask стартует, он ищет application. # Если не указать 'as application', сайт не заработает from werkzeug.debug import DebuggedApplication # Опционально: подключение модуля отладки application.wsgi_app = DebuggedApplication(application.wsgi_app, True) # Опционально: включение модуля отадки application.debug = False # Опционально: True/False устанавливается по необходимости в отладке

Отредактируйте второй .htaccess файл - тот, который в public_html

Нужно убедиться, что PassengerEnabled off

vi public_html/.htaccess

PassengerEnabled off

Теперь нужно роутинга директорий на Apache Virtual Host добавить:

Alias /flaskapi /home/user/user/domainname.ru/flaskapi

На это действие у вас недостаточно прав - поэтому нужно попросить это сделать техническую поддержку

Если Вы ещё не определилсь с выбором хостинга советую прочитать мою статью

«Какой хостинг выбрать»

Скрипт для автоматической установки

Если вы установили Python3 и убедились, что стоит нужная OpenSSL - вы можете воспользоваться моим скриптом для запуска тестового Flask.

Создайте в абсолютно пустой директории вашего сайта скрипт install_flask_vhost.sh скопируйте туда следующий код, замените LETTER, USER и DOMAIN на ваши значения и запуститите скрипт

# install Flask on Beget # author: Andrey Olegovich # for: www.devhops.ru LETTER="t" USERNAME="tester" DOMAIN="testsetup.ru" python3 -m pip install --upgrade pip python3 -m pip install flask mkdir HelloFlask tmp touch .htaccess passenger_wsgi.py echo "PassengerEnabled On" > .htaccess echo "PassengerPython /home/${LETTER}/${USERNAME}/.local/bin/python3" >> .htaccess echo "import sys, os" > passenger_wsgi.py echo "" >> passenger_wsgi.py echo "sys.path.append('/home/${LETTER}/${USERNAME}/${DOMAIN}/HelloFlask')" >> passenger_wsgi.py echo "sys.path.append('/home/${LETTER}/${USERNAME}/.local/bin/flask')" >> passenger_wsgi.py echo "from HelloFlask import app as application" >> passenger_wsgi.py echo "from werkzeug.debug import DebuggedApplication" >> passenger_wsgi.py echo "application.wsgi_app = DebuggedApplication(application.wsgi_app, True)" >> passenger_wsgi.py echo "application.debug = False" >> passenger_wsgi.py echo "" >> passenger_wsgi.py cd HelloFlask touch __init__.py echo "from flask import Flask" > __init__.py echo "app = Flask(__name__)" >> __init__.py echo "" >> __init__.py echo "@app.route('/')" >> __init__.py echo "def hello_world():" >> __init__.py echo " return 'Hello Flask!'" >> __init__.py echo "if __name__ == '__main__':" >> __init__.py echo " app.run()" >> __init__.py echo "" >> __init__.py cd .. ln -s public_html public touch tmp/restart.txt

touch install_flask_vhost.sh chmod +x install_flask_vhost.sh ./install_flask_vhost.sh

Похожие статьи
Flask
Основы
Python
Запуск Flask на хостинге
Запуск Flask на Linux сервере
Flask в Docker
Первый проект на Flask
Шаблоны Jinja
Web Forms
Blueprint - Чертежи Flask
Как разбить приложение Flask на части
Flask FAQ
Ошибки
Декораторы в Python
HTML
CSS
Фреймворки

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: