Метка: php

Настройка мониторинга php-fpm через Datadog

Для настройки мониторинга необходимо внести некоторые изменеия в pool, который собираемся мониторить, настройку хоста в nginx и подключить конфиг агенту datadog.

Для начала откроем файл пула и раскоментируем следующие строки:

pm.status_path = /status
ping.path = /ping
ping.response = pong

TL;DR


Создано: 20.07.2016 23:33

Symfony DistributionBundle. Could not open input file: app/console.

Обновляя свою Siteforever CMS до версии 0.8, в которой ядро уже работает на ядре Symfony 2.8, столкнулся с проблемой. Как это выглядит, можно посмотреть на Travis CI. При выполнении composer install получаю ошибку:

  An error occurred when executing the "'cache:clear --no-warmup'" command:  

  Could not open input file: app/console   

Ошибка вызвана post-install-cmd скриптом Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache.

Дело в том, что Symfony 2.8 может работать с путями как в стиле 2.x, так и в стиле 3.x. Второй вариант мне нравится больше и версия CMS 0.8 именно его и использует. Т.е. console она должна искать в папочке bin. Для этого в файл composer.json надо прописать параметр:

  "extra": {
    "symfony-bin-dir": "bin",
  },

Но, почему-то эта настройка не помогает заставить работать DistributionBundle нормально.

TL;DR


Создано: 06.07.2016 13:18

Запуск тестов в selenium на сервере без монитора

Selenium

Перед каждым разработчиком рано или поздно встает вопрос тестирования его кода. При чем unit-тестирование покрывает не всегда и не все нужды. Для более полного обеспечения качества создаваемого проекта приходится прибегать и к приемочному тестированию.

На сегодняшний день дела обстоят более менее не плохо. Есть набивший многим оскомину селениум. Есть Mink Константина Кудряшова, который позволяет писать функциональные/приемочные тесты в достаточно дружелюбном стиле. И при чем в качестве драйвера использовать не только селениум, среди перечня доступных есть вполне достойный безголовый zombie. Но, после моих тестов наиболее точным тестирование оказалось только через селениум. Зомби по каким-то причинам выкидывал ошибки при парсинге jquery.

Но, минус селениума в том, что ему для работы нужен браузер (по традиции firefox). А firefox требует для запуска дисплей. А на моем сервере, который используется для Continuous Integration монитора нет (это же сервер). Решение было найдено в лице утилиты Xvfb, представляющей из себя виртуальный дисплей.

TL;DR


Создано: 17.06.2014 15:39

Введение в фреймворк Kriswallsmith Assetic

Пожалуй, одной из самых мощных библиотек для управления статическими файлами (стилями, джава-скриптами, изображениями) через PHP-скрипты является Assetic. Тем не менее, начать с ходу использовать Assetic под силу далеко не каждому профессионалу. Не говоря уже о новичках, для которых серьезным барьером является и английский язык.

Библиотека решает такие задачи, как:

  • Публикация статических фалов, находящихся в модулях за пределами директории веб-сервера
  • Объединение мелких файлов скриптов или стилей в один для ускорения загрузки
  • Встраивание мелких изображений в файлы стилей в кодировке base64 для ускорения загрузки
  • Обработка и компиляция стилей и скриптов из различных языков, таких как less или coffeescript в нативные css и javascript
  • Сжатие стилей и скриптов средствами различных оптимайзеров по вкусу
  • Оптимизация изображений PNG и Jpeg без потери качества

Данный перевод из официальной документации является введением в Kriswallsmith Assetic

Assetic

Assetic - это фреймворк для управления статическими активами для PHP-приложений.

<?php

use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\Asset\GlobAsset;

$js = new AssetCollection(array(
    new GlobAsset('/path/to/js/*'),
    new FileAsset('/path/to/another.js'),
));

// код объединяет файлы при выгрузке
echo $js->dump();

TL;DR


Создано: 28.04.2014 00:45

Устанавливаем composer глобально

В наше время стремительного роста веб-технологий только мёртвый не стоит на месте. Так и мой любимый язык php развивается семимильными шагами. Так три года назад появился и менеджер зависимостей composer построенный на базе symfony2.

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

Залогинимся с правами суперпользователя

sudo su

Перейдем в директорию /usr/local/bin

cd /usr/local/bin

Скачаем в нее композер

curl -sS https://getcomposer.org/installer | php

Сделаем композер запускным

chmod 0755 composer.phar

Сделаем короткий симлинк

ln -s composer.phar composer

Добавим в расписание обновление композера

crontab -e

и в открывшееся окно редактора впишем

5 1 * * 1 /usr/local/bin/composer.phar self-update > /dev/null 2>&1

чтобы композер обновлялся каждый понедельник

Профит!!

Теперь любом месте к композеру можно обратится как

composer install

или

composer update

и не думать о том, что он может устареть.

TL;DR


Создано: 01.04.2014 14:27

Отслеживаем реферальные ссылки

Во многих случаях маркетологу, при получении заявки с сайта, интересно знать, откуда пришел посетитель? Также для отслеживания объявлений используются специальные utm метки.

Рассмотрим пример, при котором пользователь приходит на одностраничный сайт и заполняет на нем форму.

<form method="POST">
    <input type="text" name="name" placeholder="Ваше имя"><br>
    <input type="text" name="phone" placeholder="Ваш телефон"><br>
    <button type="submit">Отправить</button>
</form>

А обрабатывается форма скриптом на языке PHP:

<?php
if (isset($_POST['name']) && isset($_POST['phone'])) {
    $to      = 'nobody@example.com';
    $subject = 'Запрос с сайта';
    $message = "Имя: {$_POST['name']}\nТелефон: {$_POST['phone']}";
    $headers = "From: {$to}\r\n" . "Reply-To: {$to}\r\n" . 'X-Mailer: PHP' . phpversion();

    mail($to, $subject, $message, $headers);
}
?>

TL;DR


Создано: 12.11.2013 13:49

Файл запуска в SiteForeverCMS

Запуск системы стартует при обращении к скрипту index.php.

По умолчанию скрипт работает с маршрутом index, который указывает на страницу по-умолчанию.

Для того, чтобы послать запрос на работу с другим маршрутом, нужно необходимый маршрут после index.php. Т.е., чтобы обратиться к странице about, нужно выполнить запрос index.php/about. Для страницы about/contacts необходимо выполнить запрос index.php/about/contacts. Чтобы сделать запросы более понятными человеку, можно воспользоваться настройками mod_rewrite, входящего в состав сервера apache, либо другим механизмом, выполняющим аналогичные действия у других веб-серверов.

TL;DR


Создано: 04.08.2013 01:23

Настройка VDS на Hetzner с дистрибутивом Ubuntu 12.04. Памятка.

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

Сразу после установки получаем работающего пользователя root, из под которого управляем системой без использования su. И получаем к нему доступ сразу по ssh после ввода пароля.

Любой админ знает, что это очень опасно. Т.к. если злоумышленнику удастся скомпрометировать ваш пароль, он получит доступ ко всей системе.

TL;DR


Создано: 28.07.2013 23:26

Настройка на VDS Nginx+PHP-FPM+SiteForeverCMS

В продолжении статьи о базовой настройке VDS на Hetzner, разберем вопрос настройки Nginx и PHP-FPM и рассмотрим некоторые вопросы по работе сайта на этой связке на примере SiteForeverCMS.

Для начала удалим установленный на VDS апач (мне он все равно больше не понадобится).

sudo apt-get purge apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5

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

dpkg-query -W --showformat='${Package}\n' | grep apache

Дальше нам надо установить nginx и php-fpm:

sudo apt-get install nginx
sudo apt-get install php5-fpm

TL;DR


Создано: 28.07.2013 21:23

Fork me on GitHub