Flask на хостинге
Введение | |
Подключение к серверу | |
Установка Flask | |
Создание необходимых файлов и директорий | |
.htaccess | |
passenger_wsgi | |
Flask API для сайта на PHP | |
Другие статьи о Flask |
Введение
Эта статья именно про запуск на виртуальном хостинге.
Про деплой на своём сервере есть отдельная статья:
«Запуск Flask приложения на сервере Linux (Nginx + Gunicorn)»
Про Flask в
Docker
читайте
здесь
Конечно, многое зависит от хостинга но основные проблемы, думаю, везде одинаковые.
Flask на хостинге
В интернете очень много статей о том как запустить Flask локально. Но мало руководств по настройке на виртуальном хостинге (UPD: за последние пару лет стало больше).
За материал к этому руководству, я благодарю техподдержку хостинга
beget.ru
их статью о настройке
Flask
на хостинге можете изучить
здесь
Начало работы с Flask на хостинге
Сперва нужно подключиться к своему аккаунту на хостинге через ssh.
В
Linux
ssh клиент скорее всего встроен.
В
Windows
Можно этого можно использовать терминал,
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
Обновите pip
python3 -m pip install --upgrade pip
Установите flask
python3 -m pip install flask
или
pip3 install flask --user --ignore-installed
Создание необходимых файлов и директорий
Создадим простейшее web приложение в корне вашего сайта.
Если у Вас на сайте уже есть папка public_html - сохраните её куда-нибудь в надёжное место и удалите
с сайта.
Начинаем в абсолютно пустой директории, наша цель - создать такую структуру (skeleton)
. └── flask ├── 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
С файлом .htaccess разобрались, теперь редактируем passenger_wsgi.py
passenger_wsgi
# -*- coding: utf-8 -*-
import sys, os
# указываем директорию с проектом
sys.path.append('/home/a/username/aredel.com/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/aredel.com/ нужно заменить на адрес Вашего сайта от корня хостинга.
С файлом 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
На это действие у вас недостаточно прав - поэтому нужно попросить это сделать техническую поддержку
Если Вы ещё не определилсь с выбором хостинга советую прочитать мою статью
«Какой хостинг выбрать»