python

Flask + Python3.4 на VPS

  • четверг, 8 мая 2014 г. в 03:10:56
http://habrahabr.ru/post/222069/

Потихоньку изучаю Python, взялся сразу за 3.* версию. Естественно первые эксперименты проводил на локальной машине в сочетании с OpenServer 4.8. Позднее задумался о легком VPS под обучение, доступном из любой точки моего местонахождения.

Почему VPS? Потому что повелся на некие российские хостинги, позициирующие себя как Python/Ruby ориентированные. На деле оказалось что действительно подходящий тариф на таком хостинге начинается с ценника в 12$.

Эксперементирую с фреймворком Flask, поэтому статья будет затрагивать основные и самые простые вопросы развертывания рабочего окружения на сервере. Основной вопрос – сделать все максимально просто, на основе того, что уже стоит на сервере.

За исходные данные принимаем:

  • Простой российский VPS за 4$.
  • Сервер Ubuntu версии 13.10 (стоял по умолчанию)
  • Веб-сервер Apache2.4 (аналогично)
  • Интерфейс wsgi

Фактически, все уже стоит из коробки и работает. Но моя задача – получить последние версии Python для работы. Использовать бэкпорты не стал – проще оказалось обновить весь сервер до последнего релиза:

sudo apt-get update
sudo Apt-get upgrade
sudo apt-get install update-manager-core
sudo do-release-upgrade


Обновление элементарное, в процессе отвечаем на редкие вопросы. На весь процесс потрачено около 3-х минут.
В итоге получаем последние версии Ubuntu-servera и Python. Веб-сервер у нас уже стоит (Apache), теперь попробуем развернуть веб-приложение с использованием фреймворка Flask.

Устанавливаем необходимый инструментарий для работы (будем устанавливать версии для 2.7 и 3.4 Python):

sudo apt-get install python-pip python-dev build-essential


Для удобства использования пакетного менеджера установим его версию для Python 3:

sudo apt-get install python3-pip


Теперь ставим сам flask:

sudo pip3 install flask


Ставим wsgi именно для Python 3, он заменяет версию для Python 2 и обратно:

sudo apt-get install libapache2-mod-wsgi-py3


На всякий случай если не подключился модуль на автомате:

sudo a2enmod wsgi


В общем и целом все – теперь необходимо лишь настроить apache:

Создаем виртуальный хост для нашего приложения на Python (/etc/apache2/sites-avaliable/):

<VirtualHost *:80>
ServerAdmin webmaster@youname.ru
ServerName youname.ru
ServerAlias www.youname.ru
DocumentRoot /var/www/youname

WSGIDaemonProcess flask user=www-data group=www-data processes=2 threads=5
WSGIScriptAlias / /var/www/youname/flaskapp.wsgi

<Directory //var/www/youname.ru/>
   WSGIProcessGroup flask
   WSGIApplicationGroup %{GLOBAL}
   Order deny,allow
   Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Затем создаем файл запуска приложения с расширением wsgi (я создал его в папке с сайтом, можно перемещать по желанию с изменением конфига Apache):

Имя файла: flaskapp.wsgi

import sys
sys.path.insert(0, '/var/www/youname)
from youname import app as application


Там же я создал само приложение, очень простое и бессмысленное:

Имя файла: youname.py

from flask import Flask
import sys
app = Flask(__name__)
@app.route("/")
def hello():
    PyVer = "<h1>"+sys.version+"</h1>"
    return "Hello, I am ”+PyVer
if __name__ == "__main__":
    app.run(host="xxx.xxx.xxx.xxx")


Делаем рестарт апача:

sudo service apache2 restart


В результате мы получаем полностью рабочую среду для экспериментов с Flask на Python 3.