Python на сервере Apache под Ubuntu

Apache2 + Python

Не все знают, что сайты можно писать не только на PHP, но и на Python. Настройка этого языка для Apache требует немного больше действий, чем для PHP. Попробуем настроить Python на сервере.

Для начала небольшое вступление. На чистом PHP сайты никто не пишет, есть достаточно большое количество фреймворков. Для Python ситуация аналогичная, нет смысла самому писать с нуля элементарные операции вроде запросов к базе данных. Поэтому будем настраивать Pyhton для фреймворка Flask.

Фреймворком называют каркас для построения приложений. Его использование позволяет ускорит разработку и избавиться от написания рутинного кода.

Считаем, что вы знаете, как установить Apache, подключить PHP и настроить сайты. Предположим, что ваш домен называется domain.ru и файлы для него располагаются в папке /var/www/domain.ru.

Настраиваем конфигурацию сайта

По умолчанию файлы с настройками сайтов для Apache хранятся в папке /etc/apache2/sites-available. Ищем в ней файл, соответствующий вашему domain.ru и открываем его для редактирования:

sudo nano /etc/apache2/sites-available/domain.ru.conf

Содержимое файла будет примерно таким (закомментированные строки пропущены):

<IfModule mod_ssl.c>
<VirtualHost 11.22.33.44:443>
    ServerName domain.ru
    ServerAlias www.domain.ru

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/domain.ru

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

    <Directory /var/www/domain.ru>
        Options Indexes FollowSymLinks MultiViews Includes
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/www.domain.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.domain.ru/privkey.pem
</VirtualHost>
</IfModule>

Если у вас нет SSL, номер порта будет 80 и не будет трёх строк перед </VirtualHost>.

Для начала убираем (или комментируем) блок <Directory /var/www/domain.ru> ... </Directory> – для работы Python он не нужен.

Далее после параметра DocumentRoot добавляем следующие строки:

WSGIScriptAlias / /var/www/domain.ru/flaskapp.wsgi
<Directory /var/www/domain.ru/flaskapp>
    Order deny,allow
    Allow from all
</Directory>

Файл сохраняем и закрываем – с ним работа завершена. Apache пока что не перезапускаем – пока всё не настроим, он не будет работать. Поэтому продолжаем настраивать Python на сервере.

Добавляем нужные файлы

Переходим в папку с файлами сайта:

cd /var/www/domain.ru

В ней создаём файл flaskapp.wsgi:

touch flaskapp.wsgi

Добавляем в файл следующее содержимое:

#!/usr/bin/python3
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/domain.ru/")
from flaskapp import app as application
application.secret_key = 'ВАШ_СЕКРЕТНЫЙ_КЛЮЧ'

Далее там же создаёте папку flaskapp и переходите в неё:

mkdir flaskapp
cd flaskapp

Здесь нужно создать папку для виртуального окружения и сделать предварительные настройки:

virtualenv venv

При создании виртуального окружения у меня на исполняемые файлы права по умолчанию были 644. Файлы с такими правами запускаться не будут. Используйте команду chmod для добавления права на выполнение.

Все нужные пакеты устанавливаются в этом виртуальном окружении. Актвируется оно командой:

source venv/bin/activate

Пакеты устанавливаются как обычно:

pip3 install package-name

Для выхода из виртуального окружения используется команда deactivate.

После всех операций можно перезапускать Apache и начинать создавать свой проект на Python.

Для тестирования работы сервера можно в папке /var/www/domain.ru/flaskapp создать файл __init__.py и поместить в него следующий код:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

Комментарии:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *