Поиск по сайту:

Как настроить сервер Apache, MySQL и Python (LAMP) без фреймворков в Ubuntu 14.04


Введение

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

Django часто является универсальным магазином для всего, что связано с Python; он совместим почти со всеми версиями Python, поставляется в комплекте с настраиваемым сервером и даже имеет базу данных, которую можно установить одним щелчком мыши. Настройка ванильной системы без этого мощного инструмента может быть сложной задачей, но вы получите бесценное представление о структуре сервера с нуля.

В этом руководстве используются только установщики пакетов, а именно apt-get и Pip. Установщики пакетов — это просто небольшие программы, которые делают установку кода более удобной и управляемой. Без них поддержка библиотек, модулей и других фрагментов кода может стать чрезвычайно грязным делом.

Предпосылки

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

  • Одна капля Ubuntu 14.04.
  • Пользователь sudo без полномочий root, которого можно настроить, следуя этому руководству.

Шаг 1 — Установка Python 3 по умолчанию

На этом шаге мы установим Python 3 по умолчанию для нашей команды python.

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

  1. python --version

На новом сервере Ubuntu 14.04 это выведет:

Python 2.7.6

Мы хотели бы, чтобы python запускал Python 3. Итак, сначала давайте удалим старый двоичный файл 2.7.

  1. sudo rm /usr/bin/python

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

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

Если вы снова запустите python --version, вы увидите Python 3.4.0.

Шаг 2 — Установка Пипа

В этом разделе мы установим Pip, рекомендуемый установщик пакетов для Python.

Во-первых, обновите системный индекс пакетов. Это гарантирует, что старые или устаревшие пакеты не будут мешать установке.

  1. sudo apt-get update

Pip позволяет нам легко управлять любым пакетом Python 3, который нам нужен. Чтобы установить его, просто запустите следующее:

  1. sudo apt-get install python3-pip

Для обзора Pip вы можете прочитать это руководство.

Шаг 3 — Установка MySQL

В этом разделе мы установим и настроим MySQL.

Установка SQL проста:

  1. sudo apt-get install mysql-server

Введите надежный пароль для пользователя root MySQL, когда будет предложено, и запомните его, потому что он понадобится нам позже.

Сервер MySQL запустится после завершения установки. После установки запустите:

  1. mysql_secure_installation

Эта настройка проведет вас через ряд не требующих пояснений шагов. Во-первых, вам нужно будет ввести пароль root, который вы выбрали минуту назад. Первый вопрос спросит, хотите ли вы изменить пароль root, но поскольку вы только что его установили, введите n. На все остальные вопросы нажмите ENTER, чтобы принять ответ по умолчанию.

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

  1. sudo pip3 install pymysql

Шаг 4 — Установка Apache 2

В этом разделе мы установим Apache 2 и убедимся, что он распознает файлы Python как исполняемые файлы.

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

  1. sudo apt-get install apache2

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

Примечание. После установки несколько портов открыты для доступа в Интернет. Обязательно ознакомьтесь с заключением этого руководства для ресурсов по безопасности.

Мы хотим разместить корневой каталог нашего сайта в безопасном месте. По умолчанию сервер находится в /var/www/html. Для соблюдения соглашения мы создадим новый каталог для целей тестирования с именем test в том же месте.

  1. sudo mkdir /var/www/test

Наконец, мы должны зарегистрировать Python в Apache. Для начала отключим многопоточные процессы.

  1. sudo a2dismod mpm_event

Затем мы даем Apache явное разрешение на запуск скриптов.

  1. sudo a2enmod mpm_prefork cgi

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

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

Добавьте следующее сразу после первой строки, которая читается как .

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

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


<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, расположенную несколькими строками ниже длинного комментария вверху файла, и измените ее на /var/www/test вместо этого.

DocumentRoot /var/www/test

Теперь ваш файл должен выглядеть следующим образом.


<VirtualHost *:80>
        <Directory /var/www/test>
                Options +ExecCGI
                DirectoryIndex index.py
        </Directory>
        AddHandler cgi-script .py
        
        ...
        
        DocumentRoot /var/www/test
        
		...

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

  1. sudo service apache2 restart

Примечание. Apache 2 может выдать предупреждение о полном доменном имени сервера; это можно игнорировать, так как директива ServerName на данный момент мало применима. В конечном итоге они используются для определения хостинга поддоменов после создания необходимых записей.

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

Шаг 5 — Тестирование конечного продукта

В этом разделе мы подтвердим, что отдельные компоненты (Python, MySQL и Apache) могут взаимодействовать друг с другом, создав пример веб-страницы и базы данных.

Во-первых, давайте создадим базу данных. Войдите в MySQL. Вам нужно будет ввести корневой пароль MySQL, который вы установили ранее.

  1. mysql -u root -p

Добавьте пример базы данных с именем example.

  1. CREATE DATABASE example;

Переключитесь на новую базу данных.

  1. USE example;

Добавьте таблицу для некоторых примеров данных, которые мы добавим в приложение Python.

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

Нажмите CTRL+D, чтобы выйти. Для получения дополнительных сведений об SQL вы можете прочитать это руководство по MySQL.

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

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

Скопируйте и вставьте следующий код. Встроенные комментарии описывают, что делает каждый фрагмент кода. Обязательно замените значение passwd корневым паролем 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.

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

Теперь получите доступ к своему серверу, перейдя по адресу http://your_server_ip в своем любимом браузере. Вы должны увидеть следующее:

[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]

Поздравляем! Теперь ваш сервер онлайн.

Заключение

Теперь у вас есть работающий сервер, на котором может работать Python 3 с надежной базой данных SQL. Сервер теперь также настроен для легкого обслуживания с помощью хорошо документированных и установленных установщиков пакетов.

Однако в текущем состоянии сервер уязвим для посторонних. Хотя такие элементы, как шифрование SSL, не являются обязательными для работы вашего сервера, они являются незаменимыми ресурсами для надежного и безопасного сервера. Узнайте больше, прочитав о том, как защитить свой сервер Linux.