Создание поддомена на голой VPS без контрольной панели (КП) от хостинга

Возникла у меня сегодня мысль написать одну утилику, которая бы парсила входящую почту по IMAP, сохраняла бы их в БД и отображала на веб-странице. Но речь сегодня не об этом.

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

1) Добавил A-запись в DNS c названием нового поддомена и айпи-адресом сервера. Так как я пользуюсь Cloudflare, то записи поменял в их КП. В ином случае нужно было бы менять DNS записи в КП хостинга.

2) Создал и настроил виртуальные хосты на Apache, руководствуясь этим старым гайдом (если CentOS, то желательно юзать этот гайд, хотя в принципе подходит и тот и другой). Вообще-то говоря, это самая важная часть. При создании веб-сервера, нужно в первую очередь создавать и настраивать виртуальные хосты, чтобы в случае чего можно было без проблем добавить поддомены.

Итак, я всё сделал, файлы сайта перенёс в новую директорию и… сайт с поддоменом не открывается – браузер пишет, что имя домена не найдено. В чём же дело? Оказалось, что дело в моем тупом корпоративном интернете (да, я занимаюсь этой фигней во время рабочего дня), который очень долго хранит локальный DNS-кэш. Так что если вдруг новый поддомент открываться не будет – нужно попробовать очистить DNS-кэш.

Пишу себе на будущее, вдруг вновь пригодится.

Принцип работы email на mediawiki

Оказывается, в mediawiki недостаточно просто настроить smtp на сервере, чтобы она могла отправлять письма. При таком варианте появляется ошибка Unknown error in PHP’s mail() function, несмотря на то, в консоли функция mail() отправляет письмо успешно:

# php -r "mail('test_user@test_email.ru', 'hello', 'blablablah');"

Чтобы отправка email начала функционировать в медиавики, нужно в файл настроек добавить переменную $wgSMTP:

$wgSMTP = ['host'     => 'smtp.mail.com', // could also be an IP address. Where the SMTP server is located. If using SSL or TLS, add the prefix "ssl://" or "tls://".
'IDHost'   => 'lopar-wiki.tk',      // Generally this will be the domain name of your website (aka mywiki.org)
'port' => 587, // Port to use when connecting to the SMTP server
'auth' => true, // Should we use SMTP authentication (true or false)
'username' => 'lopario@lopar-wiki.tk', // Username to use for SMTP authentication (if being used)
'password' => '********' // Password to use for SMTP authentication (if being used)];

То есть отправка почты идёт мимо настроенного на сервере msmtp и функции mail(), а через свою имплементацию протокола SMTP в библиотеке классов PEAR, который в свою очередь использует класс Net_Socket::, использующий API для подключения через TCP/IP сокеты. 

Вопрос – зачем тогда вообще на сервере настраивать smtp, если это может делать сама php?