воскресенье, 19 февраля 2017 г.

Магазин для своего сервера Minecraft.

Установка магазина на 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/ создаем файл .htaccess

Options -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