Вступление
Эта статья проведет вас через настройку сервера с Python 3, MySQL и Apache2 без помощи фреймворка. К концу этого урока вы сможете полностью запустить систему barebones в производство.
Джанго часто является единственной остановкой для всех вещей Python; он совместим практически со всеми версиями Python, поставляется с пользовательским сервером и даже имеет базу данных, устанавливаемую одним щелчком мыши. Настройка ванильной системы без этого мощного инструмента может быть сложной задачей, но она дает вам неоценимое понимание структуры сервера с нуля.
В этом руководстве используются только установщики пакетов, а именно apt-get и Pip. Package installers - это просто небольшие программы, которые делают установку кода намного более удобной и управляемой. Без них обслуживание библиотек, модулей и других фрагментов кода может стать чрезвычайно грязным делом.
Предпосылки
Чтобы следовать этому уроку, вам понадобится:
-
Одна Ubuntu 14.04 Droplet.
-
Пользователь не-root, который вы можете настроить, следуя https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-an-ubuntu-14-04- VPS [этот урок].
Шаг 1 - сделать Python 3 по умолчанию
На этом шаге мы установим Python 3 по умолчанию для нашей команды + python +
.
Сначала проверьте текущую версию Python.
python --version
На свежем сервере Ubuntu 14.04 это выдаст:
Python 2.7.6
Мы бы хотели, чтобы + python
запускал Python 3. Итак, во-первых, давайте удалим старый двоичный файл 2.7.
sudo rm /usr/bin/python
Затем создайте символическую ссылку на двоичный файл Python 3 на его месте.
sudo ln -s /usr/bin/python3 /usr/bin/python
Если вы снова запустите + python --version +
, вы увидите + Python 3.4.0 +
.
Шаг 2 - Установка Pip
В этом разделе мы установим Pip, рекомендуемый установщик пакетов для Python.
Сначала обновите индекс пакета системы. Это гарантирует, что старые или устаревшие пакеты не будут мешать установке.
sudo apt-get update
Pip позволяет нам легко управлять любым пакетом Python 3, который мы хотели бы иметь. Чтобы установить его, просто запустите следующее:
sudo apt-get install python3-pip
Обзор Pip вы можете прочитать в этом учебнике по адресу th руководства.
Шаг 3 - Установка MySQL
В этом разделе мы установим и настроим MySQL.
Установить SQL просто:
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 запустится после завершения установки.
-
Примечание *: после установки несколько портов открыты для интернета. Обязательно ознакомьтесь с заключением этого урока по ресурсам по безопасности.
Мы хотим разместить корневой каталог нашего сайта в безопасном месте. Сервер по умолчанию находится в + / 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/>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
Убедитесь, что ваш блок + <Directory> +
вложен в блок + <VirtualHost> +
, вот так. Удостоверьтесь в правильности отступа для вкладок.
/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
<Directory /var/www/>
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/
Ваш файл должен теперь выглядеть следующим образом.
/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
<Directory /var/www/>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...
DocumentRoot /var/www/
...
Сохраните и выйдите из файла. Чтобы эти изменения вступили в силу, перезапустите Apache.
sudo service apache2 restart
-
Примечание *: Apache 2 может выдавать предупреждение о полном доменном имени сервера; это может быть проигнорировано, поскольку директива ServerName имеет небольшое применение на данный момент. В конечном итоге они используются для определения хостинга поддоменов после того, как ne Необходимые записи.
Если в последней строке вывода указано + [OK] +
, Apache успешно перезапустился.
Шаг 5 - Тестирование конечного продукта
В этом разделе мы подтвердим, что отдельные компоненты (Python, MySQL и Apache) могут взаимодействовать друг с другом, создав пример веб-страницы и базы данных.
Во-первых, давайте создадим базу данных. Войдите в MySQL. Вам нужно будет ввести пароль root MySQL, который вы установили ранее.
mysql -u root -p
Добавьте пример базы данных с именем * example *.
CREATE DATABASE example;
Переключиться на новую базу данных.
USE example;
Добавьте таблицу для некоторых примеров данных, которые мы добавим в приложение Python.
CREATE TABLE numbers (num INT, word VARCHAR(20));
Нажмите * CTRL + D *, чтобы выйти. Для получения дополнительной информации о SQL вы можете прочитать этот учебник MySQL.
Теперь создайте новый файл для нашего простого приложения Python.
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='',
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()])
Сохранить и выйти.
Затем исправьте права доступа для вновь созданного файла. Для получения дополнительной информации о трехзначном коде разрешений см. Учебное руководство по адресу https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps. [Linux права доступа].
sudo chmod 755 /var/www/test/index.py
Теперь получите доступ к вашему серверу, перейдя в + http: // +
, используя ваш любимый браузер. Вы должны увидеть следующее:
your_server_ip»> Http: //
[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]
Поздравляем! Ваш сервер сейчас онлайн.
Заключение
Теперь у вас есть рабочий сервер, на котором можно запустить Python 3 с надежной базой данных SQL. Сервер теперь также настроен на простое обслуживание с помощью хорошо документированных и установленных установщиков пакетов.
Однако в своем текущем состоянии сервер уязвим для посторонних. В то время как такие элементы, как шифрование SSL, не являются необходимыми для работы вашего сервера, они являются необходимыми ресурсами для надежного и безопасного сервера. Узнайте больше, прочитав о how для настройки Apache , how для создания сертификата Apache SSL и https: //www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers[how для защиты вашего сервера Linux].