Установка связки Apache+MySQL+Python без фреймворка на сервер Ubuntu 14.04
mySQL, Python, Ubuntu | Комментировать запись
Данное руководство покажет, как установить 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: Apache 2, MySQL, pip, Python 3, Ubuntu 14.04