16 июля 2024 Время чтения: 7 минут

Python в ispmanager: добавляем сайты с фреймворком Django, работаем с API и утилитами прямо в панели

ispmanager

Ispmanager поддерживает Python — так удобнее управлять сайтами, веб-серверами и средой прямо в панели. Расскажем, как без проблем добавить в панель сайт на Python — c Django или без него, настроить работу по API или работать через утилиту mgrctl.

Python или PHP

Считается, что PHP и Python — самые популярные языки программирования. Есть версия, что PHP подходит для сложных сайтов, а Python — для приложений. Какой язык выбрать — зависит от знаний разработчика и задач проекта.

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

С Python:

  • легче искать ошибки, чем в PHP
  • проще понять код другого разработчика
  • работать с Python быстрее благодаря сторонним библиотекам

PHP чаще используется для разработки сайтов — так удобнее работать с веб-страницами.

С PHP:

  • позволяет встраивать код сразу в HTML
  • лучше справляется с большим количеством запросов
  • быстрее работает на веб-серверах, чем Python

В ispmanager между PHP и Python выбирать не нужно — можно работать одновременно и с тем и другим для разных проектов на одном сервере.

Настройка Python в ispmanager

Настроить Python в панели управления интуитивно просто:

1. Включаем Python. Переходим в «Настройки» → «Конфигурация ПО» → выбираем строчку с Python → «Установить ПО».

Как выглядит настройка:

new slave srever
В результате мы установили все доступные версии Python

2. Выбираем нужные версии. Все версии Python не всегда нужны в работе — они занимают дополнительное место. Чтобы после установки не удалять лишнее, можно сразу выбрать нужные версии.

Выделяем строку с Python → «Настройки работы ПО» → выбираем нужные версии ПО → «Сохранить».

Как выглядит установка версий Python:

python

Важно: чтобы установить Python, нужен nginx. Если nginx нет, то устанавливаем веб-сервер так же, как и Python — через конфигурацию ПО.

3. Меняем права пользователей. По умолчанию, у пользователей права на работу с Python выключены — если вы планируете создавать сайты, то права нужно выдать. Для новых пользователей права можно настроить сразу вместе с другими параметрами.

Как поменять права пользователя:

python
Выбираем пункт «Может использовать Python», чтобы поменять права существующему пользователю

Рекомендация: для дополнительной безопасности лучше использовать системного пользователя, чтобы скрипты не работали из-под root.

Добавляем сайт на Python без Django

Как добавить сайт на Python в панель управления, если вы работаете без фреймворка Django:

1. Создаем сайт. Включаем Python → раздел «Сайты → «Создать сайт». Вводим данные и выбираем обработчик Python. Если в списке нет обработчика, то у пользователя нет доступа к Python.

python

2. Открываем файлы и загружаем сайт:

python
python

3. Указываем нужные пакеты — в файле requirements.txt

4. Устанавливаем библиотеки. После загрузки сайта нажимаем на три точки в конце строки и переходим в раздел «Просмотр пакетов Python» — выбираем и устанавливаем нужные библиотеки.

python

Дополнительно можно перейти в консоль с активированной Python-средой с помощью пункта «Shell-клиент»:

python

5. Перезапускаем Python. Нажимаем три точки в конце строки и выбираем «Перезапустить Python». Иконка Python должна стать зеленой — значит, проект работает стабильно.

6. Проверяем, что все работает корректно. Добавляем в файл hosts запись формата IP example.com

  • IP — адрес вашего сервера
  • example.com — адрес сайта

Как найти файл hosts в разных ОС — рассказали в документации →

Добавляем сайт на Python с Django

Действия немного отличаются от предыдущего раздела: нужно выполнить дополнительные настройки, а в разделе «Конфигурация ПО» — включить компоненты nginx, Python и MySQL.

Как подготовить и настроить панель ispmanager к работе Django-проекта — подробно рассказали в документации →

Если есть вопросы — приходите в телеграм-сообщество ispmanager →

Python в панели для скриптов и ботов

Как разместить скрипт Python в ispmanager, чтобы запускать его по cron

  • Используем сущность «Сайт» — так мы никогда не забудем название Python-среды, но получим дополнительные записи в разделе «Сайты». Записи влияют на число доступных сайтов — их количество сократится. Дополнительно будет визуальный интерфейс для установки пакетов вместо консоли.
  • Скрипт размещаем так же, как и сайт на Python в ispmanager. Разница только в одном — загружаем скрипт, а не файлы сайта.

  • Создаем среду самостоятельно. Название Python-среды можно забыть, потому что оно будет только в файловом менеджере. Дополнительной записи в разделе «Сайты» не будет — количество доступных сайтов в лицензии ispmanager не поменяется.

Как разместить скрипт вручную:

1. Включаем Python → переходим в shell-клиент.

2. Создаем окружение с помощью команды:

/opt/ispmanager/pythonВЕРСИЯ/bin/pythonВЕРСИЯ -m venv

ВЕРСИЯ — нужная версия Python.

Имя-вашего-окружения — имя окружения.

3. Активируем окружение, если вам нужно работать внутри него.

Активируем с помощью команды:

source имя-вашего-окружения/bin/activate

4. Устанавливаем библиотеки.

Используем команды:

pip install имя-библиотеки после активации окружения

или

pip3 install имя-библиотеки после активации окружения

Как выглядят команды в shell-клиенте:

python

5. Загружаем файлы на сервер. Сохраняем путь до скрипта — он понадобится для запуска.

6. Запускаем скрипт с помощью команды:

имя-вашего-окружения/bin/python3.11 путь-до-файла

Используем cron планировщик, если нужно сделать запуск автоматическим.

Как выглядит новое задание для cron планировщика:

python
Можно выбрать любой способ — cron или запускать скрипт с помощью команды

Обращаемся к другой панели по API

Ispmanager поддерживает работу по API с помощью Python — удобно обращаться к скриптам и приложениям на другом сервере. Структура запросов к API одинаковая, независимо от языка.

Структура запроса:

http(s)://адрес:порт/ispmgr?авторизация&func=функция&параметры&out=тип-вывода

Какие значения указываем в запросе →

«Авторизация»:

  • тип авторизации, в случае с запросами по API
  • уникальный номер сессии
  • параметр authinfo
  • ключ авторизации — используется для перенаправления пользователя из другой системы без экрана авторизации

Подробнее о методах авторизации рассказали в документации →

В примере используем authinfo — метод подойдет, когда взаимодействовать с панелью нужно один раз, потому что передается логин и пароль.

«Func» — нужная нам функция. С помощью функций можно выполнять операции с сущностями: показывать список, редактировать, создавать, выключать или включать.

Где найти полный список функций:

/usr/local/mgr5/sbin/mgrctl -m ispmgr -i

Что делать, если не нашли нужную функцию:

1. Указываем в shell-клиенте команду:

tail -f /usr/local/mgr5/var/ispmgr.log | grep Request

2. Выполняем нужную задачу в интерфейсе панели.

3. Возвращаемся в shell-клиент — там найдем список вызванных функций.

«Параметры» — параметры функции. Обычно, параметры уточняют, к какой именно сущности мы обращаемся. Список находится в документации или его можно получить с помощью команды:

tail -f /usr/local/mgr5/var/ispmgr.log | grep Request

«Out» — тип вывода. В большинстве случаев используется json или xml Полный список форматов и их описание хранятся в документации

Можно сделать свой формат вывода — подробное руководство в документации

Важно: ispmanager поддерживает только методы GET и POST.

Для работы с API ispmanager с помощью Python подойдет любая библиотека, работающая с запросами. Для примера используем стандартную библиотеку requests

Как выглядит запрос:

Import requests
Api_request = requests.request(‘get’, ‘https://domain.com:1500/ispmgr?authinfo=LOGIN:PASS&func=wireguard.user&out=xml’

Ответ выглядит так:

python
Ответ на запрос — список пользователей WireGuard в формате xml

К другим функциям запросы формируются по такому же принципу.

Обращаемся к другой панели через утилиту mgrctl

Обращаться напрямую к панели через утилиту удобно, когда скрипт расположен на том же сервере, что и панель. Запрос через mgrctl формируется одинаково и не зависит от его содержания, как и в случае с API.

Структура запроса:

/usr/local/mgr5/sbin/mgrctl -m ispmgr [функция] [параметры]
  • функция — одна из списка функций панели
  • параметры — параметры функции

Для mgrctl не нужна авторизация, потому что мы обращаемся к панели внутри сервера. Дополнительно нам нужна библиотека subprocess — просто добавить строчку выше в Python не получится.

Как выглядит запрос:

Import subprocess
subprocess.run([url], shell=True)
  • url — полная команда для mgrctl , например:
‘/usr/local/mgr5/sbin/mgrctl -m ispmgr wireguard.user.suspend elid=elid sok=ok’
  • shell — параметр для использования оболочки. Если значение отличается от True , то запрос не будет работать корректно.

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

Полезные материалы по теме

Статьи на Хабре:

Еще больше интересных статей — в блоге ispmanager на Хабре , подписывайтесь.

Полезное из документации ispmanager: