Установка связки Apache+MySQL+Python без фреймворка на сервер Ubuntu 14.04

Данное руководство покажет, как установить Python 3, MySQL и Apache2 без фреймворка. В результате вы сможете запускать базовую систему в производство.

Как правило, для работы с Python используется Django; этот фреймворк совместим со всеми версиями Python, поставляется с пользовательским сервером и даже позволяет установить базу данных в один клик.

Данное руководство будет пользоваться только менеджерами пакетов (apt-get и Pip).

Примечание: Менеджеры (или инсталляторы) пакетов – это небольшие программы, которые упрощают код установки и делают его более управляемым. Без них поддержка библиотек, модулей и остального кода была бы гораздо сложнее.

Требования

Чтобы следовать руководству, понадобится:

  • Сервер Ubuntu 14.04;
  • Пользователь с правами sudo (подробнее – здесь).

1: Настройка стандартной версии Python

Сначала нужно настроить Python 3 как стандартную версию, которая будет запускаться командой python.

Проверьте текущую стандартную версию Python.

python --version

На свежем сервере Ubuntu 14.04 результат будет таким:

Python 2.7.6

Теперь нужно изменить текущую стандартную версию Python 3. Для начала удалите бинарные файлы Python 2.7:

sudo rm /usr/bin/python

Затем создайте символьную ссылку на бинарные файлы Python 3.

sudo ln -s /usr/bin/python3 /usr/bin/python

Снова проверьте текущую версию Python.

python --version

На экране должно появиться:

Python 3.4.0

2: Установка Pip

Теперь можно приступать к установке Pip, менеджера пакетов Python. Сначала нужно обновить список пакетов системы, чтобы устаревшие пакеты не повлияли на установку.

sudo apt-get update

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

sudo apt-get install python3-pip

Примечание: Подробнее о pip можно прочесть в руководстве «Общие инструменты Python: использование virtualenv, установка пакетов с помощью pip и управление пакетами».

3: Установка MySQL

На данном этапе нужно становить и настроить СУБД MySQL.

Система MySQL проста в установке:

sudo apt-get install mysql-server

Установите надёжный пароль для root-пользователя MySQL. Сервер MySQLбудет запущен сразу после завершения установки. Запустите:

mysql_secure_installation

Этот скрипт задаст ряд вопросов. Укажите только что созданный root-пароль. Скрипт спросит, нужно ли изменить root-пароль, но поскольку он был создан только что, введите n. В ответ на остальные вопросы можно просто нажать Enter, чтобы принять стандартные настройки.

Python 3 требует настройки для подключения к MySQL. Существует множество вариантов настройки (например, MySQLclient), но для простоты в данном руководстве используется pymysql. Установите этот модуль при помощи Pip:

sudo pip3 install pymysql

4: Установка Apache 2

Теперь нужно установить Apache 2 и убедиться, что веб-сервер распознаёт файлы Python как исполняемые.

Установите Apache с помощью apt-get:

sudo apt-get install apache2

Как и MySQL, сервер Apache запустится разу после установки.

Примечание: После установки веб-сервера появляются открытые порты.

Теперь нужно поместить root-каталог сайта в надёжную точку системы. Стандартный каталог находится в /var/www/html. Следуя конвенции, создайте тестовый подкаталог по имени test в этом каталоге.

sudo mkdir /var/www/test

В завершение нужно настроить взаимодействие Python и Apache. Отключите многопоточные процессы.

sudo a2dismod mpm_event

После этого предоставьте Apache расширенные права на запуск скриптов.

sudo a2enmod mpm_prefork cgi

Затем измените настройки Apache, чтобы явно объявить файлы Python как исполняемые и разрешить запускать их. Откройте конфигурационный файл с помощью nano или любого другого текстового редактора.

sudo nano /etc/apache2/sites-enabled/000-default.conf

После строки <VirtualHost *:80\> добавьте следующий код:

<Directory /var/www/test>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py

Убедитесь, что блок <Directory> помещён в блок <VirtualHost>.

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
<Directory /var/www/test>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...

Этот блок Directory позволяет настроить поведение Apache для этого каталога. Он сообщает Apache, что каталог /var/www/test содержит исполняемые файлы, задаёт index.py в качестве стандартного файла и затем определяет исполняемые файлы.

Также нужно разрешить исполняемые файлы в каталоге сайта. Для этого измените путь для DocumentRoot. Найдите строку, которая начинается с DocumentRoot /var/www/html, и измените её:

DocumentRoot /var/www/test

Теперь файл имеет такой вид:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
<Directory /var/www/test>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...
DocumentRoot /var/www/test
...

Сохраните и закройте файл. Чтобы изменения вступили в силу, перезапустите Apache.

sudo service apache2 restart

Примечание: Apache 2 может вывести предупреждение о FQDN сервера. Его можно проигнорировать, так как директива ServerName еще не настроена.

Если в конце вывода находится строка [ OK ], Apache успешно перезапущен.

5: Тестирование настройки

Теперь нужно проверить, работает ли связка должным образом. Для этого создайте тестовую веб-страницу и БД.

Для начала создайте БД. Войдите в MySQL, введя root-пароль.

mysql -u root -p

Теперь создайте тестовую БД (для примера назовём её example):

CREATE DATABASE example;

Откройте новую БД:

USE example;

Добавьте таблицу для данных Python:

CREATE TABLE numbers (num INT, word VARCHAR(20));

Нажмите CTRL+D, чтобы выйти.

Затем создайте новый файл для простого приложения Python.

sudo nano /var/www/test/index.py

Скопируйте и внесите в него следующий код. В строке passwd укажите свой root-пароль MySQL.

#!/usr/bin/python
# Turn on debug mode.
import cgitb
cgitb.enable()
# Print necessary headers.
print("Content-Type: text/html")
print()
# Connect to the database.
import pymysql
conn = pymysql.connect(
db='example',
user='root',
passwd='your_root_mysql_password',
host='localhost')
c = conn.cursor()
# Insert some example data.
c.execute("INSERT INTO numbers VALUES (1, 'One!')")
c.execute("INSERT INTO numbers VALUES (2, 'Two!')")
c.execute("INSERT INTO numbers VALUES (3, 'Three!')")
conn.commit()
# Print the contents of the database.
c.execute("SELECT * FROM numbers")
print([(r[0], r[1]) for r in c.fetchall()])

Сохраните и закройте файл.

Затем установите права на новый файл.

Примечание: Более подробную информацию о правах можно найти в руководстве «Основы привилегий Linux».

sudo chmod 755 /var/www/test/index.py

При помощи браузера откройте http://ip_адрес_сервера. Появится такой вывод:

http://your_server_ip
[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]

Заключение

Теперь сервер поддерживает Python 3 с надёжной базой данных на бэкэнде. Кроме того, управление пакетами стало гораздо проще, поскольку на сервере установлены удобные менеджеры пакетов.

Однако на данном этапе сервер несколько уязвим и требует дополнительной настройки. SSL-шифрование не является обязательным компонентом для работы сервера, однако это может значительно повысить уровень безопасности. Чтобы узнать, как получить и установить SSL-сертификат на веб-сервер Apache, читайте это руководство.

Tags: , , , ,

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