Доброго дня!
Подскажите, пожалуйста, способ разворачивания Flask/Bottle приложений на обычном шаред хостинге Timeweb? Возможно ли это?
Поясню: у клиента есть шаред (тариф битриксовый, Etherno) на Таймвебе, где куча его сайтов, и брать ещё отдельный VDS (особенно дорогущий от Таймвеба) и переносить всё туда — нет желания. Плюс у него там по eCommerce много завязано на текущий IP сервера (как-то так он сказал).
Видела тут в комьюнити про деплой Django, но этот способ не сработал для, например, Flask проекта. Точно так же, всё что предлагает гугл — выдаёт 500 ошибку.
http://flask.pocoo.org/docs/0.12/deploying/cgi/ этот способ тоже попробовала, но тщетно.
Если есть реальный кейс, то поделитесь пожалуйста!
Ответы (5)
Options +ExecCGI
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L]
public_html/index.wsgi:
activate_this = '/home/{user_char}/{user_name}/{path_to_venv}/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import sys
sys.path.insert(0, '/home/{user_char}/{user_name}/flask_test/')
from flask_test.app import app as application
структура проекта:
flask_test/:
-- flask_test/:
---- __init__.py
---- app.py
может это кому-то поможет, я использовал следующие настройки:
public_html/.htaccess: (такой как и советовал Котов Артур Сергеевич)
Options +ExecCGI
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L]
public_html/index.wsgi: (тут заменен execfile на exec и добавлен путь к библиотекам в myenv)
activate_this = '/home/{user_char}/{user_name}/{path_to_venv}/bin/activate_this.py'
#execfile(activate_this, dict(__file__=activate_this))
exec(open(activate_this).read())
import sys
sys.path.insert(0, '/home/{user_char}/{user_name}/projectstar/public_html/projectstar/')
sys.path.insert(1, '/home/{user_char}/{user_name}/{path_to_venv}/lib/python3.4/site-packages/')
from app import app as application
структура проекта:
projectstar/:
-public_html/:
-- projectstar/:
---- __init__.py
---- app.py
---------- .htaccess -------------
Options +ExecCGI
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L]
--------- index.wsgi -------------
import os
import sys
BASE_DIR = '/home/c/[ ля ля ля ]/public_html' # путь до сайта
# Добавляем путь в переменные среды/переменное окружение
sys.path.append(BASE_DIR)
# делаем этот путь активным каталогом (т.е переходим в него)
os.chdir(BASE_DIR)
# $$$ Подключение виртуальной среды python (опционально)
# Указываем путь до активации виртуальной среды (замена source activate)
activate_this = BASE_DIR + '/env/bin/activate_this.py'
# Выполняем активацию
exec(open(activate_this).read())
# Добавляем путь в переменные среды пакеты python
sys.path.append(BASE_DIR + '/env/lib/python3.4/site-packages')
# $$$
# Bottle в данной конфигурации поставлен как свой пакет обычной копипастой(нужно если не использовать virtualenv)
from bottle.bottle import default_app
# Если используем virtualenv то устанавливаем окружение, заходим в него и ставим пакет bottle
# следовательно его подключение будет выглядеть так from bottle import default_app
# подключаем наш проект (стартовый файл)
from main import main
# загружаем приложение
application = default_app()