Не все знают, что сайты можно писать не только на 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()
Комментарии: