Установка магазина на Apache
Установка mod_wsgi
В первую очередь необходимо установить модуль wsgi. Либо воспользовавшись исходным кодом (что я и сделал, когда впервые потребовалось прикрутить python к apache) следуя по инструкции. Либо взять готовый модуль из репозитория:
~$ sudo apt-get install libapache2-mod-wsgi
Настройка виртуального хоста
Для этого перейдем в директорию:~$ cd /etc/apache2/sites-enabled/и отредактируем наш конфигурационный файл:
~$ sudo vi kalinchyk-ssl.conf
должно получиться что-то в этом роде:
<VirtualHost *>
ServerName www.kalinchyk.com
ServerAdmin viacheslav@kalinchyk.com
DocumentRoot /var/www/minecraft
WSGIDaemonProcess wsgi user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias /api /var/www/wsgi/app.wsgi
<Directory /var/www/wsgi>
WSGIProcessGroup wsgi
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
Здесь мы сообщили Apache, что необходимо при обращении клиента к директории /api выполнять python wsgi-скрипт (который физически размещен в директории /var/www/wsgi/app.wsgi) от имени пользователя www-data.
Обязательно проверьте, что вашему пользователю доступны импортируемые библиотеки и все файлы он может читать, а при необходимости и вносить изменения.
Также в настройках виртуального хоста указана основная директория с которой будет клиент работать (/var/www/minecraft).
В этом кусочке конфигурации я убрал строки для настройки ssl-сертификата, логирования и т.д., чтобы не перегружать пример.
После изменений конфигурационных файлов Apache требуется перезапустить:
~$ sudo service apache2 restart
BackEnd
Сначала устанавливаем backend (API магазина). Для этого забираем исходные коды с git-репозитория. Распаковываем архив и содержимое wsgi копируем в нашу wsgi директорию (в моем случае это /var/www/wsgi/).
Т.к. мы для повышения безопасности указали, что python скрипты должны выполняться от имени www-data, то необходимо проверить чтобы директория и содержимое принадлежат этому пользователю.
~$ sudo chmod -R 644 /var/www/wsgi
~$ sudo chown -R www-data:www-data /var/www/wsgi
Первым делом необходимо создать базу данных, выполнив db_update.py от имени нашего пользователя.
~$ python db_update.py
А также при последующих обновлениях необходимо не забывать про эту операцию. Этот скрипт выполняет важные изменения в структуре базы данных. Хоть скрипт самостоятельно сделает резервную копию базы, но необходимо об этом также не забывать и периодически самостоятельно архивировать критически важные данные.
Устанавливаем зависимости
Для корректной работы python приложения необходимо установить несколько зависимостей, а именно bottle, bottle_sqlite, bottle_errorrest. Их можно установить из пакетного менеджера pip:
~$ sudo apt-get install python-pip
~$ sudo -u www-data -H pip install pip
~$ sudo -u www-data -H pip install bottle
~$ sudo -u www-data -H pip install bottle_sqlite
~$ sudo -u www-data -H pip install bottle_errorsrest
И обязательно устанавливаем их для нашего пользователя (параметр -u ww-data), под которым будет выполняться скрипт (параметр -H).
Проверяем работу приложения
В браузере указав адрес своего сервера и директорию, которая обслуживает wsgi, а также суффикс /whoami мы должны получить положительный отклик от сервера.
~$ curl https://test.kalinchyk.com/api/whoami
{"object": "CUSTOMER"}
Настраиваем приложение
Для настройки приложения необходимо создать файл с именем minecraft.json:
{
"minecraft": {
"acquiring": {
"form_method": "post",
"form_url": "https://sci.interkassa.com/",
"id": "[идентификатор_кассы_в_interkassa]",
"sign": "[секретный_ключ_для_формирования_подписи]",
"sign_test": "[секретный_ключ_для_проверки_подписи_(тест)]",
"type": "interkassa"
},
"admin_username": "[логин_администратора]",
"admin_password": "[пароль_администратора]",
"cookie_name": "minecraft_cookie",
"cookie_sign": "minecraft_secret",
"server_host": "[адрес_к_серверу_minecraft]",
"server_query_port": 25565,
"server_rcon_password": "[пароль_к_rcon]",
"server_rcon_port": 25575,
"server_url": "https://test.kalinchyk.com/",
"server_api": "https://test.kalinchyk.com/"
}
}
FrontEnd
Теперь можно приступить к установке веб-интерфейса магазина. Из ранее извлеченного архива, который был получен на сайте, содержимое minecraft копируем в нашу minecraft директорию (в моем случае это /var/www/minecraft/).
Настраиваем frontend
В директории /var/www/minecraft/ создаем файл .htaccessOptions -Indexes +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /var/www/minecraft/index.html [L]
DirectoryIndex index.html
Здесь мы включаем модуль rewrite и перенаправляем все запросы на несуществующие файлы/директории будут перенаправлены на index.html