INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / Thingiverse / RSS / GPG

Настройка NGINX Unit под PHP

№ 8544 В разделе "Sysadmin" от October 12th, 2017,
В подшивках: ,

У меня целый гребаный зоопарк из разных версий php на домашнем сервере и мне это порядком надоело. Что можно сделать? Можно скинуть раритетное барахло в unit контейнеры, поднять Nginx Unit и работать уже с приложениями, а не кормить все старые проекты одному php-fpm’у. В настоящее время есть поддержка только одной точки входа, но в будущем создатели побожились, что сделают нормальный роутинг (update: сделали). С установкой Nginx Unit любой дурак справится благодаря отличному мануалу здесь, рассасывать тут я его не буду.

Вот готовых config файла для unit:

А теперь давайте поговорим о настройке Unit. Допустим, у вас есть невероятно важная программа, выводящая информацию об установленном php в браузер и лежит она в /var/www/info/info.php.

Теперь сделаем конфиг для вашей невероятно важной программы вывода информации о php

{
    "listeners":{
        "*:8300":{
            "application":"phpinfoprogram"
        }
    },
    "applications":{
        "phpinfoprogram":{
            "type":"php",
            "workers":2,
            "root":"/var/www/info",
            "index":"info.php"
        }
    }
}

Напоминаю, что это ваш самый первый конфиг, а в будущем вам придется сначала выгрузить из unitd текущий, дополнить его и загрузить вновь.

Выгрузка в файл curl --unix-socket /var/run/control.unit.sock http://localhost/ > unitd.json
Загрузка из файла в unitd curl -X PUT -d @unitd.json --unix-socket /var/run/control.unit.sock http://localhost/

Здесь можно подробнее прочитать об управлении конфигурацией. Надеюсь, кто-нибудь не ленивый скоро создаст красивую веб морду для него.

Теперь можно посмотреть открытые порты и видеть ваше невероятно важное приложение внутри LXC контейнера на порту 8300

root@nginx-unit:/# netstat -tlpn|grep unit
tcp        0      0 0.0.0.0:8300            0.0.0.0:*               LISTEN      175/unit: router

Теперь в nginx достаточно добавить location, указывающий на ваше приложение

location /info { 
    proxy_pass http://10.0.2.23:8300;
    proxy_set_header Host $host; 
}

Один Nginx Unit может держать много приложений и открытых портов. Допустим, у вас есть два LXC контейнера для приложений на PHP 5.6 и 7.0. Устанавливаете обычный php без всяких fpm в ваши контейнеры, все нужные модули и ваши приложения с разными версиями php уже никогда не пересекутся и не будут конфликтовать или еще как-нибудь парить мозг при обновлениях. Конечно же, не стоит валить все ваши проекты в одно место. Лучше разделить их по разным контейнерам в зависимости от контекста.

Нет комментариев »

Торрент трекер для WordPress (плагин)

№ 7686. В разделе " Programming " от November 15th, 2015

В подшивках: , ,

Парсинг торрент файла на php, получение сидеров и личеров

№ 7268 В разделе "Programming" от May 31st, 2015,
В подшивках: ,

Я как-то уже писал торрент трекер для нашего опенсорс сообщества, но реализация была полностью на пхп и не отличалась особой скоростью. Поскольку мне понадобилось интегрировать поддержку торрентов в Distr CMS я начал искать пути ускорения работы с торрентами. На глаза попался офигенский модуль к php, который задачу парсинга берет на себя. А вот остальные функции все равно нужно писать самому.

Задача нулевая. Установка модуля.

Нужно поставить пакеты для сборки модуля sudo apt-get install php5-dev build-essential subversion

Далее получаем модуль и собираем его
svn checkout http://php-bencode-extension.googlecode.com/svn/trunk/ php-bencode
cd php-bencode
phpize
./configure --with-php-config="`whereis php-config|awk '{ print $2 }'`"
make

Теперь нужно скопировать модуль в директорию к остальным модулям. У меня это была директория /usr/lib/php5/20131226. У вас будет что-нибудь похожее.

В конце нужно создать конфиг для загрузки модуля в память при старте php. У меня используется php-fpm, поэтому этот конфиг положил в /etc/php5/fpm/conf.d/cg_bcode.ini

Текст конфига
extension=cg_bcode.so

Модуль установлен, делаем рестарт php-fpm, apache или что у вас там.

Задача первая. Нужно посмотреть сидеров и личеров.

Установленый модуль добавляет функции bdecode и bencode, ускоряя обработку файлов в разы. Однако, это не отменяет необходимости кеширования этих значений при большом количестве посещений.

декодируем содержимое файла в массив $info
$info=bdecode(file_get_contents($url_torrent));

хеш можно получить сделав sha1 только части, отвечающей за информацию о файлах внутри. хеш получается только в бинарном виде, добавив true вторым параметром
$hash = sha1(bencode($info['info']),true);

scrape в большинстве случаев получается просто путем замены announce в урле для анонсов торрента
$announce_url=$info['announce'];
$scrape_url = str_replace("announce","scrape",$announce_url);

делаем get запрос к трекеру и полученый ответ тут же декодируем в массив
$scrape_data = bdecode(file_get_contents($scrape_url.'?info_hash='.urlencode($hash)));
echo "Полных раздач: ".$scrape_data['files'][$hash]['complete'];

Задача вторая. Список файлов внутри торрента.

Код ниже только для разовых обращений к файлу. При высокой посещаемости и большом количестве торрент файлов эти данные нужно кешировать в БД или memcached. Вам тут решать уже.

foreach($info['info']['files'] as $file) {
echo $file['path'][0]." Размер ".round($file['length']/1024/1024)." Мб
";
}

distr cms 03

Еще кое-что интересненькое о торрентах:

5 комментариев »

Плагин WordPress для автоматической загрузки файлов в хранилище Selectel

№ 4620 В разделе "Programming" от April 25th, 2015,
В подшивках: , ,

Плагин капитально обновился. Наконец у меня дошли сделать все не через жопу, а через curl. Если у вас ранее стоял плагин этот, то он состоял из нескольких файлов и теперь они не нужны. Все в одном месте.

Скачайте, распакуйте плагин в директорию плагинов и активируйте его в настройках WordPress. Потом откройте supload.php и впишите туда ваши логин, пароль и пути.

Далее в настройках WordPress установите URL вашего хранилища (у меня это blindage.org).

Media Settings ‹ INT 21h — WordPress

Плагин срабатывает на публикацию или обновление записи, закачивая все содержимое uploads в ваше хранилище. После закачки директория uploads очистится. В случае неуспешной закачки плагин пожалуется 🙂 Также до публикации просмотр изображений в галерее будет недоступен, т.к. там картинки берутся по URL хранилища, а не куда они были загружены.

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

21 комментариев »

Палитра Windows 8 в PHP массиве

№ 6943 В разделе "Programming" от February 11th, 2015,
В подшивках: ,

Удобно, если делаете плитки на сайте и прочую хрень “типа windows 8”.

$win8pal=array('#A4C400', '#60A917', '#008A00', '#00ABA9', '#1BA1E2', '#0050EF', '#6A00FF', '#AA00FF', '#F472D0', '#D80073', '#A20025', '#E51400', '#FA6800', '#F0A30A', '#E3C800', '#825A2C', '#6D8764', '#647687', '#76608A', '#87794E');

Ну и просто эти цвета в RGB

#A4C400
#60A917
#008A00
#00ABA9
#1BA1E2
#0050EF
#6A00FF
#AA00FF
#F472D0
#D80073
#A20025
#E51400
#FA6800
#F0A30A
#E3C800
#825A2C
#6D8764
#647687
#76608A
#87794E

Нет комментариев »

Яндекс.Метрика

Fortune cookie: Hear about... the new breakfast cereal called Queerios? You simply add milk and they eat each other.