Автоматический запуск Postfix в Mac OS X
В Mac OS X уже установлен Postfix, только вот запускается он только по запросу и выключается через минуту работы. Для того, чтобы можно было отправлять письма через локальный SMTP нужно, чтобы Postfix постоянно работал.
Для того, чтобы Postfix автоматичеки запускался и не останавливался нужно отредактировать конфигурационный файл /System/Library/LaunchDaemons/org.postfix.master.plist.
Убираем остановку master процесса через 60 секунд:
<string>60</string>
Добавляем запуск при загрузке системы (вставляем перед </dict>):
<true />
<key>OnDemand</key>
<false />
В результате получаем такой файл:
Используем Postfix для web-разработки
При разработке web-приложений необходима возможность проверить отправленные письма локально.
Чаще всего письма отправляют используя команду sendmail или с помощью SMTP. Сделать полноценную заглушку почтового сервера, сохраняющую всю почту в одно место, сможет Postfix.
Устанавливаем Postfix (этот процесс зависит от используемой системы, например, sudo apt-get install postfix в debian-based linux) и немного изменяем конфигурационные файлы.
В конец файла /etc/postfix/main.cf добавляем строки:
virtual_alias_maps = regexp:$config_directory/virtual-regexp
Первое ограничит подключение к SMTP серверу только через loopback интерфейс, а второе задает файл с маппингом виртуальных алиасов.
Создаем файл /etc/postfix/virtual-regexp:
где localuser - ваш локальный пользователь, который будет получать всю отправляемую почту.
После изменения конфигурационных файлов перезапускаем Postfix.
Теперь осталось настроить почтовую программу на получение писем из локального почтового ящика.
Лог медленных запросов в mysql
При оптимизации запросов в mysql нельзя обойтись без лога медленных запросов. Для того, чтобы лог писался, добавляем в секцию [mysqld] конфигурационного файла my.cnf параметры:
- log_slow_queries указывает путь к логу медленных запросов,
- long_query_time — минимальное время в секундах для попадания запроса в лог.
Пример:
long_query_time = 2
В этом случае все запросы, выполняющиеся 2 и более секунды, запишутся в файл /var/log/mysql/mysql-slow.log.
Настройка ssh клиента
Для задания настроек ssh клиента существует конфигурационный файл ~/.ssh/config.
Базовые возможности и синтаксис этого файла можно увидеть на простом примере. Допустим есть 2 сферических хоста в вакууме (example.com и example.org), с которыми необходимо достаточно часто работать. Предположим, что для доступа к ним ипользуются команды:
ssh -p 2222 another@example.org
Чтобы не делать спецальных скриптов для подключения или все время не писать вручную эти команды в ~/.ssh/config указываем следующее:
HostName example.com
User someuser
Host example2
HostName example.org
Port 2222
User another
Теперь можем подключаться к этим хостам следующим образом: ssh example1 для example.com и ssh example2 для example.org.
Также в директиве Host можно указывать символы * и ?, например, настройки в секции Host * будут применяться для всех хостов, а в Host *.org.ru - для хостов в доменной зоне .org.ru.
Полный список настроек можно посмотреть с помощью man ssh_config.
Сохранение пароля для консольного mysql
Чтобы избавиться от необходимости постоянно указывать имя пользователя и пароль при использовании консольных команд mysql и mysqldump можно создать в домашней директории файл .my.cnf следующего содержания:
user=имя_пользователя
password=пароль
В целях безопасности нужно не забыть поставить права 0600 на этот файл.
Установка nginx на Ubuntu
Установить последнюю версию nginx на Ubuntu можно с помощью нехитрых действий.
Добавляем в sources.list (hardy замените названием вашего релиза дистрибутива):
deb-src http://deb.sjinks.pro/ hardy main
Поддерживаемые релизы: dapper (6.06), hardy (8.04), intrepid (8.10), jaunty (9.04), karmic (9.10). Архитектуры: amd64, i386.
Выполняем следующие команды:
sudo apt-get update
sudo apt-get install nginx
PHP Soap client и WS-Security
Для того, чтобы отправить soap-запрос с цифровой подписью, можно конечно использовать extension WSF и переделывать все свои запросы, основанные на SoapClient.
Но есть и вариант попроще с использованием библиотеки soap-wsse:
class SecuredSoapClient extends SoapClient {
public function __doRequest($request, $location, $action, $version, $one_way = 0) {
$doc = new DOMDocument('1.0');
$doc->loadXML($request);
$pem = file_get_contents('client.pem'); // файл с сертификатом и private ключом
$wsse = new WSSESoap($doc);
// добавляем в запрос сертификат
$bin_token = $wsse->addBinaryToken($pem);
// получаем private ключ для подписи
$sec_key = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private'));
$sec_key->loadKey($pem);
// добавляем цифровую подпись в запрос
$wsse->signSoapDoc($sec_key);
// добавляем в цифровую подпись ссылку на сертификат
$wsse->attachTokentoSig($bin_token);
return parent::__doRequest($wsse->saveXML(), $location, $action, $version, $one_way);
}
}
Используя класс SecuredSoapClient вместо SoapClient, запросы будут отправляться уже с цифровой подписью.