LEMP + CentOS = ❤

Данный пост скорее заметка для самого себя, дабы не забыть чего при новой итерации. Нового в ней ничего нет, ставим пакеты да настраиваем. У нас имеется новый и девственно чистый сервер под управлением CentOS 7.2 (minimal). Задача — поставить на него nginx + php + php-fpm + mysql и чтоб всё это шустро работало, да обновлялось самостоятельно из репозиториев (при возможности). Так же необходим тот же phpMyAdmin и настроенная отправка почты с сервера. В общем — минимальный web-stack, на котором хоть разработкой занимайся, хоть что-то вордпресо-подобное разворачивай. Сервер, к слову, располагается на hetzner.de.
Подробнее под катом

Собираем и настраиваем msmtp

msmtp — это простой консольный клиент для отправки сообщений электронной почты по протоколу SMTP.

Можно, конечно, пойти сложным путем и поставить полноценный почтовый сервер, но зачем? Нам ведь требуется просто позволить скриптам и демонам отправлять почту, а заморачиваться с DKIM, SPF, заголовками и прочим — крайне лень. Поэтому мы будем отправлять почту с помощью почтового ящика на yandex.ru, и поможет нам в этом приложение под названием msmtp.

Важное замечание — в моем случае домен уже делегирован на яндекс, в DNS имеются все необходимые записи, почтовый ящик создан на странице pdd.yandex.ru, к нему прописаны алиасы вида no-reply, noreply, donotreply, do-not-reply для того, что бы была возможность иметь почтовый ящик с именем [email protected], но успешно отправлять письма от имени, например, [email protected].

Единственное но — в репозиториях находится старая и бажная версия. Самый критичный для нас баг — это неизменяемое поле Sender, т.е. мы не можем указать имя (или адрес? не помню) отправителя. Смотрим что есть в репозиториях:

$ yum info msmtp
# ...
Name        : msmtp
Version     : 1.4.32
Release     : 1.el7
Size        : 120 k
# ...

Смотрим информацию о релизах на официальном сайте — на момент написания этих строк это версия 1.6.5 (уже без описанного выше бага).

Все манипуляции производились на «чистой» системе CentOS 7.2.

Скачаем исходники и соберем приложение ручками.
Подробнее под катом

CentOS — обновляем php до 5.6

Задался вопросом — при разработке web-приложений под какую версию php их «затачивать»? Ответ оказался проще некуда — достаточно посмотреть на календарь релизов и понять, что на данный момент поддерживаемой является версия 5.6.19:

PhpCurrentlySupportedVersions

И ну никак не та (5.4.16), что встала из репозитория epel «по умолчанию». Для того чтоб исправить сложившуюся ситуацию выполним совсем не сложные действия, описанные ниже.

Подробнее под катом

Автоматическая сборка PHP-проектов с помощью PhiNG

Что я подразумеваю под сборкой? Сборка — это процесс действий, которые выполняются над кодом проекта перед его деплоем. Она может включать в себя создание копии проекта, очистка директории с кэшем, минификация CSS и JS файлов, упаковка результата в один zip-архив. Так же возможно ещё и автоматическое развертывание проекта а удаленном сервере, но сегодня речь об этом идти не будет.

Другими словами — это автоматизация однотипных и рутинных действий. А там где есть однотипные действия — там место автоматизации :) Сегодня мы рассмотрим на живом примере один из способов с применением PhiNG, причем всё будем делать с самого начала — скачаем исходники, интерпритатор (в нашем случае это PHP), и всё это дело настроим.

Подробнее под катом

Сниппеты для WordPress (ч. 1)

Кэп, «по умолчанию» все сниппеты добавляются в ./wp-content/%theme%/functions.php твоей темы

Изменяем путь к статике темы

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

if(!defined('THEME_ASSETS_URL')) {
  $home_url = esc_url(home_url('/'));
  define('THEME_ASSETS_URL', $home_url.'assets', true);
} else {
  define('THEME_ASSETS_URL', get_template_directory_uri(), true);
}

В корне сайта создаем директорию /assets, и после в теме используем, например, таким образом:

wp_enqueue_style('responsive', THEME_ASSETS_URL.'/css/responsive.css');
// или
echo '<img src="'.THEME_ASSETS_URL.'/images/user.png" alt="" />';

Заменяем путь к файлу style.css темы

В дополнение к описанному выше сниппету — заменяем %site_url%/wp-content/themes/%theme_name%/style.css на %site_url%/assets/style.css:

add_filter('stylesheet_uri', 'wpi_stylesheet_uri', 10, 2);
function wpi_stylesheet_uri($stylesheet_uri, $stylesheet_dir_uri){
  return THEME_ASSETS_URL.'/style.css';
}

Подробнее под катом

Чистим интернет от назойливой рекламы (AD Blocker для MikroTik)

Данная статья является копией публикации на хабре (написанной мной же)

Данная статья является логическим завершением небольшой дискуссии с тов. vvzvlad, которая развернулась под топиком «Чистим домашний интернет от очень назойливой рекламы (Ad’s blocker для OpenWRT)«, где автор с помощью wget, sed и cron на OpenWRT успешно сливает файлы рекламных хостов, парсит и подсовывает dns-серверу dnsmasq.

Переадресовывая клиента при запросе «рекламного» домена, например, на loopback (127.0.0.1 — 127.255.255.255), вместо котента рекламы клиент получит благодатное «ничего» (разумеется, при условии, что у нас не работает локальный веб-сервер который слушает локалхост). Механизм фильтрации довольно старый и не лишен недостатков. Например, нельзя указать маски хостов (*.ad-domain.tld) или «вырезать» рекламу, баннеры которой хостятся на запрашиваемых ресурсах. Но зато не привязан к какому-то либо протоколу и довольно прост в эксплуатации. Более того, если его использовать, например, на домашнем или офисном маршрутизаторе, который используется в качестве DNS сервера, реклама успешно порежется на всех гаджетах, где IP нашей железки прописан первым в качестве DNS сервера.

Но что если у нас вместо роутера с кастомной прошивкой используется.. MikroTik (RouterOS), функционал которого накладывает некоторые ограничения? Под катом вы узнаете каким образом удалось успешно «сконвертировать» файл хостов в пригодный для него формат, как автоматизировать это дело и что для хабралюдей в качестве бонуса был создан небольшой сервис как раз для автоматизации этого процесса (маленький, абсолютно бесплатный и с открытыми исходниками).

Подробнее под катом

Как «накрутить лайки» в Instagram, используя уязвимость приложения «GetLikes» для iOS

Данный пост является повторением действий, описанных хабраюзером jo1n в его посте на хабре

Дисклеймер: Все действия носят сугубо познавательный характер. Более того — «накручивать лайки» — дело лишенное какого-либо смысла, всё рассмотренное ниже стоит рассматривать только как познавательный материал

Для того, чтоб «накрутить лайки» мы будем использовать одну уязвимость, найденную тов. jo1n в приложении «GetLikes» для iOS, которая позволяет получать «монеты» в одноименном приложении без выполнения каких-либо действий (таких как установка «лайков» другим участникам приложения), и в последствии тратить их на то, чтоб нам к нашим фотографиям ставили массово эти самые «лайки».

Подробнее под катом