?

Log in

No account? Create an account

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


  1. Если выйдет из строя диск, или физический сервер, у вас не будет ни сайта, ни бекапа.

  2. Постоянное бекапирование может сожрать дисковое пространство и сайт перестанет работать.

  3. Место для хранения на сервере как правило стоит много дороже (особенно если это VPS), чем место для хранения где либо ещё.

Мой выбор - бекап-сервер, стоящий дома на антресоли, на котором поднята серверная Windows 2008 SR2. На бекап-сервере помимо всего прочего крутятся разные, требующие большого времени и процессорной мощности задачи (например, переиндексация картинок на сайте, пересчёт дублей текстов и т.п.)
Изначально для нескольких проектов бекап осуществлялся самым кондовым способом: ночью по расписанию запускался RAR, архивировавший весь контент для каждого сайта:

rar a -v500m -ep2 -m1 -ow -r -rr15p -y -inul -x*Sessions* /var/store/BackUp/2018-04-29-SiteName-Content /var/www/sitefolder/htdocs/

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

Однако, даже при такой схеме со временем упёрся в ограничение - ежемесячный полный бекап разросшегося сайта приводил к парализации работы сайта почти на сутки, и частым сбоям.
На текущий момент найдено гораздо более удобное и правильное решение - ежедневные инкрементальные бекапы с помощью утилиты Rsync, которая сама умеет сравнивать сохранённое ранее состояние файлов на бекап-сервере с текущим на сервере, приводит "мастер-каталог" с полным бекапом в идентичное серверному состояние, а файлы, которые были удалены или изменены кладёт в указанные Rsync папки, например с текущей датой. Т.к. облазив кучу документации, короткого но полного описания, как это делается не нашёл, счел полезным отобразить это здесь.
На сервере устанавливается Rsync. В конфиге Rsync (обычно это /etc/rsyncd.conf) описываются основные настройки, и бекап-модули (каждый модуль описывает бекапирование какого-то каталога).

pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = false
munge symlinks = yes
hosts allow = 145.123.157.123
uid = root
read only = yes
list = no
auth users = backup
secrets file = /etc/rsyncd.scrt

[site1]
path = /var/store/www/site1/data/www/site1.ru/
exclude = webstat/* Download/*

[site2]
path = /var/store/www/site2/data/www/site2.com/
exclude = webstat/* exchange/* admin/dump/*

[system]
path = /
exclude = /var/* /proc/* /run/* /sys/* /dev/* /mnt/* /media/* /tmp/* /lost+found/*



Здесь, вроде, всё понятно, но хочется отметить важные директивы:
hosts allow - указывается IP, с которого разрешены обращения к Rsync;
uid - пользователь, от которого запускается Rsync. У данного пользователя должны быть права на бекапируемые каталоги;
secrets file - путь к файлу с логином и паролем для доступа. Логин и пароль в файле хранятся в незашифрованном виде:

backup:MyPass12345


На бекап-сервере, как я уже сказал, у меня Windows. Пакет Rsync для винды называется cwRsync. Два момента, с которыми долго пришлось возиться:
1. В файле rsyncd.scrt для cwRsync указывается только пароль:

MyPass12345


2. Пути к файлам и каталогам в параметрах cwRsync задаются через странные конструкции /cygdrive/c/ (это диск C:) /cygdrive/d/ (это диск D:)
В итоге вызов cwRsync на скачивание модуля site1 сервера происходит следующим образом:
"C:\Program Files (x86)\cwRsync\bin\rsync.exe" -av --password-file="rsyncd.scrt" --delete --backup --backup-dir='/cygdrive/d/SitesContent/site1_folder/2018-04-29' backup@192.124.119.118::site1 "/cygdrive/d/SitesContent/site1_folder/FullBackup">"C:\Program Files (x86)\cwRsync\site1.log"

В папке FullBackup cwRsync сохраняет весь контент сайта, а разницу с предыдущим состоянием FullBackup сохраняет в папке с текущей датой (в примере 2018-04-29).
Надеюсь, этот короткий мануал сэкономит кому-то несколько часов поисков и экспериментов, которые провёл я, чтобы наладить бекапирование UNIX сервера на WINDOWS машину через Rsync. Приведённой здесь инфрмации в одном документе не было нигде.
Столкнулся со странной проблемой после установки нового Apache на Ubuntu.
Обычно, в целях безопасности по умолчанию листинг директорий по HTTP закрыт. Чтобы расшарить его нужно в конфиге Apache или в файле .htaccess прописывать разрешение листинга, примерно так:

< Directory /usr/local/apache2/htdocs/listme>
  Options +Indexes
< /Directory>


Чтобы выключить, соответственно, нужно прописать:

< Directory /usr/local/apache2/htdocs/listme>
  Options -Indexes
< /Directory>


Однако, выключить не получалось совсем. Куда только не запихивал директиву, и в глобальный конфиг Apache, и в доменный, и в .htaccess НЕ РАБОТАЕТ!
Решение нашлось не в интернетах, которые безуспешно перерыл, а в параллельной задаче. Настраивая модули для оптимизации загрузки файла наткнулся на активный модуль (находится в папке /etc/apache2/mods-enabled/) autoindex.load, удалив который наконец то добился желаемого результата - директории перестали листится.
Строго говоря, можно, наверное, не удаляя модуль настроить его на отображение только нужных директорий, но т.к. не нужно было нигде, проще было удалить.

Диву даёшься, сколько времени иногда приходится искать в интернетах решения достаточно распространённых, можно сказать классических задач. И сколько находишь не полной документации, битых ссылок, неработающих примеров.


Вот очередная такая — генерить PDF-файл из PHP-скрипта, разумеется, с использованием кириллицы. Как говорится в некоторой части мануалов (а есть и такие "чудесные" уроки мастерства, которые эту тему тупо опускают, а все примеры содержат англоязычное "Hello world!", или $pdf->Write($Text);), проблема эта решается несколькими способами с помощью разных доп. пакетов. Правильный (кросс-платформенный) способ — инклюдить используемые шрифты в документ. Кодировка документа может быть и UTF-8, однако, при копировании строк такого документа, например, в Word, вместо букв могут получиться квадратики или знаки вопроса. Почему это проблема, если сам pdf-документ отображается нормально? Например, вы генерите счет на оплату. Клиент получает счет, открывает, видит всё нормально. Копирует название вашей фирмы в интернет-банк — получает крякозябры, расстраивается, и оплачивает счет... вашего конкурента.


С этим я и столкнулся, сначала помучившись с пакетом UFPDF и таки добившись вывода кириллицы вовремя заметил, что копировать такой русский текст из созданных документов не получается. В итоге одним из последних наткнулся на правильный мануал: http://i-novice.net/generiruem-pdf-s-pomoshhyu-tcpdf/ по которому и задействовал правильный пакет TCPDF, и всё получилось.

При активации некоторых программ ;) с помощью KMSAuto Net может возникнуть ошибка:
Активация ошибочна с кодом исключения 0xc004F074
Служба лицензирования ПО сообщила, что компьютер не может быть активирован. Служба Управления Ключами не доступна

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

Столкнулся с проблемой, когда старый добрый CuteFtp перестал запрашивать такие подтверждения на новом сервере (Centos + ProFtpd).
Проблема решается двумя способами:
1. Добавить в конфиг ProFtpd в конец строчку: DefaultTransferMode binary и перезагрузить ProFtpd.
2. Установить binary mode по умолчанию в настройках CuteFtp:
- или в общих настройках, в русской версии Инструменты \ Общие параметры \ Передать \ Способ передачи установить в "Двоичные файлы"
- или в настройках ftp-узла Тип \ Тип передачи установить в "Двоичные файлы".

13-ая статья Конституции Российской Федерации запрещает государству иметь свою идеологию:

1. В Российской Федерации признается идеологическое многообразие.
2. Никакая идеология не может устанавливаться в качестве государственной или обязательной.
С одной стороны, выглядит волне себе демократично и толерантненько - свобода и никакого "совка". С другой стороны, государство не может сказать владельцу телевизионного канала или газеты: "знаешь, мы тут пытаемся строить развитое в научном, культурном и нравственном отношении общество, а ты, сукин сын, с утра до вечера тупость и скотство воспеваешь". А очень хотелось бы, чтобы наконец сказало. Пример того, к чему приводит отсутствие такой позиции у государства, можно посмотреть на одном из главных новостных порталов страны, принадлежащих государственной компании ВГТРК. Открываем раздел "НАУКА (!!!!)" и видим то, что по мнению сотрудников редакции является соременной наукой: "Найдены критерии привлекательности пенисов..."

В разделе "Выбор редакции" материалы тоже как на подбор. Помимо просто идиотских и пустых псевдоновостных материалов, сплошные весёлые фаллосы:
"Сотни секс игрушек зависли на проводах...", "Пилот рейса Лондон-Нью-Йорк дал порулить порноактрисе..."


С одной стороны понятно, что в коллектив редакции молодой, в головах у них те же фаллосы... С другой стороны это всё-таки популярные государственные СМИ, которые должны понимать глубину и ответственность, ибо формируют взгляды и задают стандарты...

Очередная головоломка - сделать простейший (на первый взгляд) 301-й редирект со страницы вида www.site.ru/forum/topic.php на адрес forum.site.ru/topic.php. Вроде бы тривиально. Написал по памяти через RewriteCond - RewriteRule - не пашет ни хрена. Прочитал 100500 мануалов, попробовал столько же вариантов. Решения нет.
Вроде все тривиально, а не пашет. Хотелось, чтобы было как-то так:

RewriteCond %{HTTP_HOST} ^www.site.ru$
RewriteCond %{REQUEST_URI} ^/forum/(.*)$
RewriteRule ^(.*)$ http://forum.site.ru/$1 [R=301,L]

В итоге сработало лишь подходящее на 99% случаев:

RedirectMatch 301 ^/forum/([a-z\.]+)$ http://forum.site.ru/$1

Ребёнок подрос. 6 лет - это уже самостоятельная, общительная и много перемещающаяся в пространстве личность. Чтобы быть на связи нужен телефон. Но чтобы не вырос дебилом, нужен телефон без интернета и игр (доказывать не буду, для меня это аксиома). Все современные телефоны, даже очень простые и дешёвые продаются с встроенным набором Java-игр. Такой порядок вещей зиждется на небезосновательной надежде производителей игр и телефонов, заработать на постпродажах этих самых игр, т.к. в основном в базе стоят демо версии за апгрейд которых до полных версий нужно башлять.

После долгих поисков нашел, наконец, свою мечту - "бабушкофон". Телефон для пожилых людей, с большими кнопками, маленьким экраном и полностью без игр. Купил модель Fly Ezzy 5, которая оказалась куском дерьма, по причине жуткой запутанности всех функций (у меня сложилось впечатление, что производители люто ненавидят тех кому за 60). Впрочем, сынуля быстро во всем разобрался, везде полазил, откопал много разных бесполезных в том числе мультимедиа функций...

Казалось бы вопрос закрыт. Ребёнок будет на связи, но будет привязан не к гаджету, а к родителям.

В моих розовых мечтах чадо должно было несколько раз в сутки звонить и радостным голосом сообщать что-то вроде: "Папа, у меня три пятерки по математике, физике и микробиологии..." или "Папа, можно я пойду на дополнительные занятия по китайскому?"

К реальности меня быстро вернул сотовый оператор Мегафон. Буквально через пару дней ребенок сообщил, что деньги на счету закончились.

[Что было дальше...]

Стал проверять: со счета списано 400 с чем то рублей. Детализация счета показала, что бабки списали за всякого рода "контент-услуги", скачивание приложений, подписки и прочую хрень, активно навязываемую Мегафоном, отключить которые непросто, а подключаются они как бы сами собой.

Денег было не жалко, но бесило, когда моральные уроды наживаются на детях, и на нашей неспособности их от этих уродов защитить. Без особой надежды на успех написал письмо Мегафону:

17-го числа подключил услугу "Стоп-контент". Отключил интернет, все возможные уведомления. Телефоном пользуется ребёнок 6-ти лет, которому ваши сервисы настойчиво предлагают ознакомиться с контентом 18+.
Не смотря на все запреты и отключения, с баланса телефона за последние сутки было списано 400 с лишним рублей за пользование услугами, которые физически на телефоне fly ezzy5 не могут быть предоставлены: (игры, приложения и т.д.)
Прошу:
1. Отключить услугу MegaFonPro и все возможные сервисы рассылок на данный номер.
2. Предоставить детализацию, какие именно услуги были оказаны на эту сумму и каким именно образом (не смотря на подключенную услугу "Стоп-контент" и отсутствие на аппарате возможности ваши приложения скачивать).
3. Восстановить баланс счета т.к. никакие реальные услуги не были (и не могли быть!) оказаны.
В случае отказа буду вынужден обратиться в Роспотребнадзор и другие надзорные органы.

К моему удивлению сработало! К удивлению, т.к. интернет пестрит похожими жалобами на Мегафон, которые удовлетворены не были. Мне же ответили:

Добрый вечер!
Списания происходили покупки в приложении MegafonPRO (SIM-menu). Сожалеем, но в системе не отображается информация о том, какие именно покупки были совершены. Обращение, для удаления Sim-menu зафиксирована. По факту рассмотрения Вас оповестят в sms.
В рамках исключения сумма в размере 449,97 руб. возвращена на счет. Благодарим за обращение.

Разумеется, этим дело не закончилось.
То ли Мегафон отключил все услуги, а потом что-то включил снова, то ли сынулька какое-то время не развлекался с телефонным меню. Но несколько месяцев прошли тихо, и вдруг опять: "Папа, деньги на телефоне кончились." Смотрим детализацию: опять контент-услуги. На этот раз подписки на погоду, новости, спорт, стоимостью 5 рублей в сутки (150 в месяц, 1800 руб. в год за каждую подписку!, если кто этим дерьмом пользуется год).
А как вам нравится такое в телефоне первоклассника?
Мне не понравилось, поэтому я написал Мегафону очередное письмо:
17-го января подключил услугу "Стоп-контент". Отключил интернет, все возможные уведомления.
Телефоном пользуется ребёнок 7-ти лет. Не смотря на все запреты, отключения и предыдущие обращения с подобными вопросами в поддержку Мегафона, сейчас в телефоне показывается неотключаемое меню Мегафона Фанбокс, в котором ребёнку предлагается на выбор Анекдоты 18+, Эро-гороскоп, Советы о сексе.
За последние дни с баланса телефона было списано около 300 рублей за пользование контент-услугами, которые мы не подключали, а именно: новости (в т.ч. о массовых убийствах и терактах), анекдоты, гороскопы и т.п.
В связи с этим прошу:
1. Окончательно и бесповоротно отключить для данного номера все возможные сервисы рассылок, отправку SMS на короткие номера, любые другие контент и интернет услуги.
2. Восстановить баланс счета т.к., во-первых, данные контент-услуги мы не запрашивали, во-вторых, компания Мегафон нарушает действующее законодательство, предоставляя семилетнему пользователю явно не подходящий для его возраста контент.
В случае отказа буду вынужден обратиться в Роспотребнадзор и другие надзорные органы.

На этот раз я был послан, т.к., во-первых, #самвиноват, во-вторых, бабла то жалко:
Здравствуйте!
Услугу "Запрет вызовов на платные короткие номера" я подключила.
Действующие услуги. а именно: Дальше-Больше, Шутки дня, Новости дня , Anecdote, Новости спорта , Кинопремьеры , Horoscope, Pogoda я отключила.
К сожалению возврат средств не производится, так как услуги были подключены самостоятельно абонентоми были предоставлены. Благодарю за обращение!

Пока все. Будет время, обязательно изучу вопрос с возможностью подачи жалобы на Мегафон в надзорные органы. Есть ощущение, что закон то они нарушают, (хотя бы 436-ФЗ "О защите детей от информации, причиняющей вред их здоровью и развитию").

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

Для отладки наиболее важных частей сайта (ключевых классов, функций) полезно знать время выполнения и количество потребляемой памяти (не столько общей, сколько относительной, например, до, во время и после выполнения функции). Если для отслеживания времени выполнения существуют инструменты анализа, например Xdebug + анализаторы логов, типа WinCacheGrind или встроенный анализатор от PhpStorm, то для отслеживания состояния памяти инструмента не встречал.
Чтобы на коленке отладить какой-нибудь скрипт пишем простенькую функцию:

function PrintTimeMem($Status = ''){
    static $MTime = 0;
    static $Mem = 0;
    $Out = '<br>'.$Status;
    if($MTime > 0){
      $Out .= ' Time: '.(microtime(true) - $MTime);
    }
    $Out .= ' Memory: '.number_format(memory_get_usage(), '0', '.', ' ');
    if($Mem > 0){
      $Out .= ' ['.number_format(memory_get_usage() - $Mem, '0', '.', ' ').']';
    }
    $MTime = microtime(true);
    $Mem = memory_get_usage();
    echo $Out;
}

Вставляем её вызовы в разные части скрипта, указывая в переменной $Status что-нибудь, чтобы было понятно, в каком месте скрипта функция была вызвана, например:

PrintTimeMem();//Первый вызов в начале скрипта инициализирует переменную $MTime
...
PrintTimeMem('Connect DB');
...
PrintTimeMem('Class Init');
...
PrintTimeMem('GetTree');
...
PrintTimeMem('PrintTree');
...


На выходе получаем красивый листинг:

Memory: 356 312
Connect DB Time: 0.013000965118408 Memory: 363 064 [6 752]
Class Init Time: 0.59403395652771 Memory: 7 341 816 [6 978 744]
GetTree Time: 0.2440140247345 Memory: 8 866 000 [1 524 168]
PrintTree Time: 2.7691578865051 Memory: 10 114 384 [1 248 376]

Позвонил сегодня бот. Официальным женским голосом сообщил: "Вас приветствует Сбербанк России! Ваша карта заблокирована в целях безопасности. Перезвоните по номеру, который у вас определился." Номер у нас определился +7(499)404-08-85
Ну, ежу понятно, мошенники. Позвонил в Сбербанк - подумал, может эта информация заинтересует их службу безопасности. Юноша в коллцентре спросил с какого номера звонили. Я сказал. Юноша сообщил мне то, что я знал и без него - что это номер не их, и звонить туда не нужно.
По-моему, ничего больше по этому поводу делать они не собирались...

Profile

новосельцев новосел
novoselcev
Новосельцев
Новосёл.ру

Latest Month

April 2018
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom
Powered by LiveJournal.com