Суть
Зеркальный зал - это:
- человек, который занимается залом и контролирует домен и сервер.
- домен A - главный домен зала.
- сервер, на котором запускаются скрипты и находятся сайт зала c архивами и статические копии X.A Y.A Z.A сайтов X Y Z.
Помощь
Мне уже помогли:
jolaf shutofsky vetta_vetka shaplov eswet rbcf silent_gluk leotsarev katarinka-mur shanilleИерархия
Смысл участия в иерархии в том, что домен A, сервер и человек точно так же не вечны, как и домены X Y Z, их владельцы и сайты. Передавая же эстафету, мы можем надеяться продлить существование.
Если Вы заранее считаете, что создать самому зеркальный зал -
слишком сложно для вас лично - не читайте дальше. :)
По умолчанию предлагаемый для скачивания конфигурационный файл, а также и скрипт генерации нового зала обеспечивает участие в иерархии:
- для зала есть один старый зал - с которого скачиваются скрипты и копии сайтов.
- для тех, что скачает и запустит скрипты с этого зала - этот зал является старым залом.
- зал сообщает о своём доменном имени старому залу при скачивании со старого зала какой-либо информации
Грани
Техническое
Скрипты, используемые в малом зале:- config - глобальные параметры конфига
- functions - библиотека функций обработки
- 1site - обработка 1 сайта
- generate - создание нового зала
- childs - сбор информации с детей и внуков
- allsites - конфиги обновления копий работающих сайтов
- abandoned - сохранённые конфиги для уже неработающих сайтов
- сбор .tar.gz архивов с "дочерних" залов
- функционал генерации виртуального хоста для вебсервера (я не могу охватить всё многообразие)
Ресурсы
Для создания своего зеркального зала нужны следующие ресурсы:- реальный или виртуальный сервер на Linux/FreeBsd/CentOs/Debian... любом другом Unix'e. Root доступ не обязателен.
- веб-сервер с PHP (c работающими функциями file_exists file_get_contents и preg_match)
- возможность создавать произвольное число виртуальных хостов на этом сервере.
- доменное имя, которму можно вписать в зону * IN A .
- bash, wget (версии не менее примерно 1.17), perl, awk, iconv, sed, md5, utf-8 локаль на сервере.
- не вполне кривые руки того, кто будет редактировать эти скрипты и запускать их.
Инструкция
Положим, Вы решили сделать свой зеркальный зал на основе моих скриптов.Домен
Все сайты, которые Вы покажете интернету в своём зеркальном зале, имели свои отдельные исходные доменные имена (чаще всего никак друг с другом не связанные), лежали на разных серверах с разными IP.Все они в предыдущем зале получили отдельные доменные имена третьего, четвёртого или более уровня в домене предыдущего зала.
Так, я владею, например, доменом второго уровня arda.ru, который хочу применить для зеркального зала. И сервером на IP адресе 195.91.162.195. Я захожу в интерфейс управления записями в зоне этого домена (у регистратора доменов или у хостера, или на своём ДНС сервере) и добавляю туда запись A вида:
* IN A 195.91.162.195
и сохраняю зону. Всё. Все необходимые действия с доменом сделаны. Убедиться в результате можно по мере обновления зоны на ДНС серверах, набирая в командной строке любого компьютера ping mirrorpg.arda.ru и убеждаясь, что IP выдаётся тот самый.Если Вы решили задействовать домен третьего или более уровня в принадлежащем Вам домене. Например archive.allrpg.ru в домене allrpg.ru. Следует в интерфейсе управления записями в зоне домена allrpg.ru добавить запись A следующего вида:
*.archive IN A 195.91.162.195
Аналогично - ping mirrorpg.archive.allrpg.ru и убеждаемся в результате.Вебсервер
К сожалению, готовых скриптов, которые бы подошли к любому вебсерверу, сегодня не завезли. Кроме того, авторы всех таких программ систематически меняют синтаксис и параметры конфигурационных файлов, а также способ их расположения в операционной системе.Так как данная система рассчитана на многолетнее существование, я не могу предполагать, что написанный мной сегодня скрипт будет корректно делать конфиг для apache или nginx хотя бы через два года.
Поэтому, если Вы не хотите делать много ручной работы - Вам придётся написать минимальный скрипт для Вашего вебсервера самостоятельно. Пример для apache 2.2:
echo "<VirtualHost 195.91.162.195:80> ServerName $2 ServerAlias $3 $4 ServerAdmin webmaster@mirrorpg.arda.ru DocumentRoot /home/www/servers/$2/html </VirtualHost> ">>/usr/local/etc/apache22/Includes/mirrorpg.conf mkdir /home/www/servers/$2/html
Конфигурация
Правильнее всего все дальнейшие действия совершать в Unix Shell. Если Вы не умеете этим пользоваться - научитесь.mkdir ~/mirrorpg cd ~/mirrorpg wget http://mirrorpg.arda.ru/mirrorpg/mirrorpg-config sh ./mirrorpg-config
Этот скрипт скачает все остальные скрипты и установит им возможность исполнения.Теперь отредактируйте скачанный mirrorpg-config, указав в нём все требуемые параметры. Описание того, каков смысл этих параметров непосредственно там же и написан, поэтому здесь я его не привожу.
Создание зала
Запускаете ./mirrorpg-generate Этот скрипт сделает следующее:- Создаст виртуальный хост для вашего основного сайта и поместит в него скрипты и такой же index.php
- Создаст каталоги .First .Latest .Previous для хранения архивов сайтов
- Скачает по крайней мере в каталог .First все файлы с предыдущего зала из каталога First
- Проверит md5 контрольные суммы скачанных архивов, не совпавшие сочтёт неудачными и сотрёт
- Для каждого из проверенных архивов создаст виртуальный хост
- Развернёт эти архивы в их виртуальные хосты
- Внесёт информацию об этих хостах в mirrorpg_good.csv
- Преобразует mirrorpg_good.csv в mirrorpg_good.htm и поместит эти два файла на основной сайт зала
Пройдя по ссылкам справа под заголовком Хорошо - убеждаетесь в том, что зеркала работают.
Обновление
Прежде чем запускать обновление копий сайтов с их оригиналов, мы настоятельно рекомендуем пройтись по ссылкам раздела Хорошо и убедиться в том, что оригинальные сайты работают.Если конкретный оригинальный сайт не работает, его следует исключить из процедуры обновления зеркала. Если этого не сделать, то вы испортите то содержимое копии сайта, что показывается в вашем зеркальном зале.
Для исключения сайта из процедуры текстовым редактором перенесите относящиеся к нему строки (начинающиеся со строки SqBuildLines его_домен и завершающиеся строкой SqAddCsv в файл mirrorpg-abandoned
Если теперь Вы запустите скрипт mirrorpg-allsites, то по окончании его работы скрипта содержимое лежащих у Вас прописанных в него сайтов будет обновлено с их оригиналов, а свежие архивы получившихся копий будут сложены в папку Latest.
Предыдущие архивы этих копий будут передвинуты в папку Previous.
Добавить ещё сайт в свой зал
Собственно КОНФИГ ОБНОВЛЕНИЯ САЙТОВ зеркального зала - файл mirrorpg-allsitesКаждая секция сайта - это последовательность "кирпичиков". Некоторые из "кирпичиков" достаточно очевидны - например, выкачивание одного файла с очевидного URL
Работая над конкретным сайтом, я экспериментирую с ним в файле mirrorpg-1site, начиная с простейшего сочетания "кирпичиков" SqBackStatic; SqReplace. Редактирую, запускаю этот скрипт и смотрю на результат.
Если какая-то часть вызывает сложности, но похожа на уже существующую на каком-то из старых сайтов в allsites - я копирую соответствующий кусок из старой секции сюда.
Если какая-то сложная конструкция явно потребуется ещё не раз - оформляю её в функцию и, отладив, перебрасываю в mirrorpg-functions
По получению успешной конфигурации нового сайта в 1site я добавляю строку SqAddCsv в его конец, запускаю его ещё раз, после чего полученную конфуграцию переношу в mirrorpg-allsites как секцию данного сайта.
Устройство
Данный раздел написан ради понимания вами того, как это устроено.Что копируем
Любой находящийся в сети на одном домене сайт, доступный по http протоколу. При условии, что применяется достаточно неиспохабленный HTML 3-4 версии, ссылки на содержательные страницы сайта прописаны как A HREF, ссылки на стилевые файлы заданы тегами STYLE, URL картинок в HTML коде и CSS файлах соответствуют тегу IMG и url() соответственно.Что получается
Статическая HTML копия всех страниц сайта - "отражение" сайта на какой-то момент времени. JS функциональность в некоторых случаях может сохраняться, Macromedia Flash и Java Applett - скорее не сохраняются. Часть стилевых решений, фоновые изображения могут не сохраняться.Основой обработчика является программа wget с ключами -x -nH -np -r -l 0 - отсюда проистекают особенности:
Именование и типы файлов
Допустимыми символами имён файлов на unix файловой системе являются любые, кроме / и нулевого байта, поэтому все URI могут быть сохранены в виде точно таких полных путей, какими они отображаются в адресной строке броусера или указаны в HREF.Однако есть 3 важных относительно легко исправимых исключения:
- /some_path/ вебсервером воспринимаются как показ файла /some_path/index.html - с этим ничего делать не надо, и так хорошо
- /some_path/some_file.php?some_query - вебсервер отображает /some_path/some_file.php и передаёт ему QUERY_STRING some_query -
требует наличия файла-обработчика /some_path/some_file.php, который
отрабатывает три ситуации:
- пустая query_string - показываем то, что было по URI /some_path/some_file.php
- непустая query_string и файл /some_path/some_file.php?some_query существует - показываем его
- непустая query_string и файла нет - вовзращаем Error 404
- /some_path/?some_query - вебсервер отображает /some_path/index.html и передаёт ему QUERY_STRING some_query - точно такой же обработчик, как в предыдущем пункте.
Наиболее совершенная функция "дорисовывания обработчика Query" ко всем случившимся в дереве подкаталогов с текущего каталога таким файлам - SqAddQueryReportTree.
Менее совершенная ранее написанная - SqFilePage. Она обрабатывает только файлы в текущем каталоге, требует задания вручную имени .php файла и подразумевает, что самого такого файла как страницы нету, а есть только страницы с query.
Для корректной работы получившихся обработчиков в случае, если файлы some_file не имеют расширения .php - требуется настройка вебсервера. Например, если на сайте такие страницы имеют расширение /shtml - при сервере Apache следует добавить в конфиг сайта в файле allsites строку
echo 'AddHandler application/x-httpd-php .shtml'>.htaccess
Структура каталогов сайта
Где что лежит
- Созданный Вами каталог mirrorpg, в который Вы скачали
mirrorpg-config и в котором лежат все остальные
исполняемые скрипты mirrorpg-*. В нём также присутствуют:
- Симлинки - имена доменов, создаваемые mirrorpg-allsites или mirrorpg-1site при скачивании с оригинальных сайто. Указывают во временные каталоги /tmp/mirrorpg/домен/
- Каталог .Zero - если он существует, то .tar.gz файлы из него добавляются в зал. Если вы будете запускать mirrorpg-generate уже при работающем зале, в этом каталоге будут сохраняться архивы из First.
- Симлинки .First .Latest .Previous - на каталоги First Latest Previous в структуре виртуал хоста mirrorpg.arda.ru
- Скрипты считают, что корневые каталоги вирт хостов вашего вебсервера находятся в путях образца $SqBasePath/$NowDomain/$SqHtmlDir.
- В виртуал хосте mirrorpg.arda.ru имеется структура (относительно его корня):
First/ - сюда generate складывает .tar.gz архивы скачанные с предыдущего зала
Latest/ - сюда allsites складывает .tar.gz архивы новых копий с оригинальных сайтов
Previous/ - сюда allsites перекладывает архивы из Latest
Childs/ - сюда собираются архивы с детей
mirrorpg/ - здесь лежат все предназначенные для скачивания в следующий зал скрипты и заготовка конфига, причём флаг исполнения со всех файлов снят чтобы случайно их не запустить
index.php - Эта страница
mirrorpg-good.csv - таблица сайтов, создаваемая и обновляемая автоматически
mirrorpg-good.htm - столбец Хорошо этой страницы - ссылки на зеркала и оригиналы
mirrorpg-childs.txt - список главных доменов других залов. Обновляется автоматически
mirrorpg-childs.htm - ссылки на другие залы (столбец под заголовком "С нами")
robots.txt