Сборка «Windows WEB Survival Kit»
22.05.2013 19:39
3В очередной раз мучаясь с переносом Apache под виндой на другую машину, меня все это жутко достало.
Достало, что невозможно по человечески развернуть сразу всю среду для работы с БД, сервером, GIT и всем остальным.
Достало, что под виндой все вечно лезет в реестр и пытается искать конфиги в каталоге windows вместо домашнего.
Достали попытки поиска собранного под винду очередного extension-а...
Хотелось как-то все это упростить, улучшить переносимость, чтобы все жило одним каталогом, а в случае чего его можно было просто скопировать на другую машину и там бы все сразу завелось.
Поскольку был нехилый опыт сборки portable-софта, решил я все эти мечты осуществить.
Удалось ли это или нет - судить Вам :-)
Сразу оговорюсь - не тестировал под x64, проверялось все это безобразие под x32, но работать должно - вроде ничего хитрого я не использовал.
Кроме того вся эта штука работает на cmd-шниках. Олдскульно - да, зато просто модифицируемо, и очень наглядно. А кто про них ничего не знает - так и знать то необязательно - все базовое работает из коробки.
Можно конечно переписать на .net или еще на чем-нибудь с блэк-джеком и всем-всем-всем, но имхо самый простой вариант писать все-таки на родном шелле.
Еще - когда я все это делал, PowerShell-а еще не было.
Про Денвер я знаю :-) только имхо по простоте и функциональности он даже рядом не лежал.
Структура
По умолчанию сборка живет в каталоге www, однако Вы вольны переименовать его как угодно.папки в корне |
Apache | файлы Apache web-сервера, т.е. там просто живут все те файлы, которые можно получить, распаковав .msi пакет, в котором Apache можно скачать с его сайта под win |
MySQL | тоже самое для My SQL |
PgSQL | тоже самое для Postgre SQL |
PHP | тоже самое для PHP |
Python | тоже самое для PHP |
sys | служебные файлы, необходимые для функционирования сборки |
tmp | каталог для различных временных файлов - сессии пользователей PHP, место для загружаемых файлов и т.д., имеет подпапку sessions где лежат сессии PHP - удалять ее нельзя |
Tools | различный инструментарий (GIT, оптимизаторы JS/CSS и т.д.) |
webroot | каталог для подсайтов |
папка sys |
Файл services.cmd - библиотека работы со сборкой - остановка / старт Apache, MySQL, PgSQL и т.д. + различные другие сервисы, которые требуются во время работы.
Ее можно использовать из командной строки например для остановки Apache: sys/services.cmd StopApache.
Там же хранятся настройки БД, включая имя пользователя по-умолчанию и его пароль.
Основной хост - это сайт, доступный по адресу 127.0.0.1 (localhost).
Остальные файлы - это файлы, расширяющие функционал командной строки win, среди них несколько утилит, написанных на js - можно посмотреть исходники :-)
папка Tools |
Я засунул туда те утилиты, к которым привык и которые очень часто использую:
документация | доки и советы по apache / php и т.д. |
минимайзер css / js | от команды YAHOO - YUI compressor |
cURL | иногда надо |
оптимизаторы изображений | несколько небольших утилит от разных авторов, но можно скачать и положить самый-самый мощный File Optimizer |
ngrep | опять же иногда нужен |
командные файлы | для импорта / экспорта и инициализации БД (MySQL & PgSQL.) |
корневая папка |
_runner__.cmd | основной файл для работы со сборкой |
_setconf__.cmd | файл настройки конфигурации сборки - может быть как вызван из _runner__.cmd, так и работать самостоятельно |
_showlogs__.cmd | файл для просмотра и очистки логов Apache - также может быть вызван из _runner__.cmd, или же самостоятельно |
clean.cmd | удаляет из сборки все логи, временные файлы и т.д. - нужен например перед созданием бэкапа или переноса |
phpinfo.cmd | название говорит само за себя - показывает информацию о текущей версии PHP в сборке, а также об установленных расширениях и т.д. - к сожалению из-за постоянного изменения функционала в различных версиях PHP очень часто необходим |
upgradeSites.txt | там находятся адреса и рекомендации какие файлы откуда качать для обновления сборки |
readme.txt | некоторые замечания по поводу сборки |
Начало работы
Разворачиваем сборку в какую-нибудь папку, затем запускаем _runner__.cmd, и там выбираем пункт S - set configuration, а в нем - пункт R - reset to defaults... - все, сборка проинициализирована и подготовлена к работе.Осталось запустить интересующие нас сервисы - возвращаемся в первое меню (нажатием ESC например) и стартуем то, что нам необходимо - например Apache (1) и MySQL (3) - теперь по адресу 127.0.0.1 у нас есть веб сервер, рабочей папкой которого будет то, что указано в пункте W, а так же MySQL сервер.
Она обычно выполняется один раз, когда сборка кладется в какую-то директорию, либо же если надо откатить все настройки к настройкам "по умолчанию".
Как оно все работает?
А очень просто:
- из каталога /sys/*Data/ini берутся файлы конфигураций "по умолчанию" (Вы можете всегда их настроить прямо в этих папках "под себя", чтобы каждый раз не заморачиваться)
- в них производится замена всех ?/www/ на текущий путь до сборки
- они раскладываются по нужным папкам (в папку Apache для Apache, в папку PHP для PHP и т.д.)
Вот собственно и весь алгоритм.
Особенности при работе
Если Вы хотите чтобы в каком-то конфиге что-то всегда указывало на какой-то определенный файл или каталог внутри сборки, то вместо начального пути до папки со сборкой просто укажите ?/www/ - например в php.ini есть параметр extension_dir, чтобы он был независимым от положения сборки, записываем его так: extension_dir = "?/www/PHP/ext/", поскольку ?/www/ заменится потом на путь до сборки - все будет именно так, как мы хотим.Эти, полученные после замен "временные" конфигурации и будут теми конфигурациями, на которых будет жить сборка в данный момент - пока Вы снова не повторите процедуру инициализации.
Поэтому, если Вам надо что-то где-то поменять не на совсем - меняем прямо в папке с нужной программой - надо поменять в php.ini - идем в /PHP/php.ini меняем там то, что надо, затем в _runner__.cmd и перезапускаем сервер.
Если же надо поменять так, чтобы это осталось - то менять следует уже в папках /sys/*Data/ini/нужный_ini, а затем повторить процедуру инициализации и перезапустить сервер.
Ну и отсюда еще одна особенность - при запуске инициализации помните, что все, что вы меняли во "временных" конфигурациях уничтожится, ибо они будут заменены конфигурациями "по умолчанию".
В конфиге Apache - httpd.conf есть метки #CL# они идут сразу перед DocumentRoot и RewriteEngine для основного хоста (127.0.0.1).
Это нужно для включения / выключения ModRewrite, а так же изменения домашней директории из системы конфигурации.
Метки нужны чтобы отличать эти директивы от директив для виртуальных хостов.
Кроме того, в конфиге PHP - php.ini могут из системы конфигурации меняться директивы. display_errors на On (в режиме display errors on) / Off (в режиме display errors off)
error_reporting на E_ALL|E_STRICT (в режиме errors reporting all) / E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (в режиме errors reporting errors only)
Службы регистрируются под именами ApacheSA - Apache, MySQLSA - MySQL, PgSQLSA - PgSQL.
Принято для всех БД, что имя пользователя root и пароль root - однако, если это не устраивает - их всегда можно поменять
Python версии 3.3.2 подключен к Apache в режиме WSGI, и живет по адресу 127.0.0.5, соответствующий ему директория .../www/webroot/Python, а вызываемый файл, при обращении к 127.0.0.5 wsgi_handler.py.
Если нужен Python 2.7, то его можно развернуть в папку Python вместо 3.x, а в конфиге Apache закомментировать блок Python3 и раскомментировать блок Python27. Режим будет так же WSGI.
Управление
_runner__.cmd |
Перемещаться можно курсорными клавишами, [ENTER] осуществляет выбор пункта, либо можно просто нажать ту клавишу, что написана справа от пункта, выход - [ESC].
В этом окне:
R | перезапуск сервера Apache - аналогично остановке сервера, и повторному его запуску - очень часто нужно, например при внесении изменений в конфиг |
S | остановить все и удалить все службы - пункт полезен например при архивации |
1 | установка службы и старт сервера Apache |
2 | остановка сервера Apache, удаление его службы |
W | изменение корневой директории для основного хоста * |
C | изменение конфигурации сборки * |
L | просмотр логов |
3 | установка службы и старт MySQL |
4 | остановка MySQL, удаление его службы |
5 | запуск sys/mysqlData/manager/mymanager.exe |
6 | установка службы и старт PgSQL |
7 | остановка PgSQL, удаление его службы |
8 | запуск sys/pgsqlData/manager/mymanager.exe |
* при изменении корневой директории, а так же некоторых настроек не забудьте перезапустить сервер Apache
_setconf__.cmd |
В этом окне:
1 | изменение корневой директории для основного хоста |
2 | включение Mod Rewrite для основного хоста |
3 | отключение Mod Rewrite |
4 | включение режима логирования только для ошибок для PHP |
5 | включение режима логирования всего (ошибки, уведомления, предупреждения) для PHP |
6 | включение отображения ошибок для PHP |
7 | отключение отображения ошибок для PHP |
A | открыть текущую конфигурацию Apache * |
B | открыть текущую конфигурацию PHP * |
C | открыть текущую конфигурацию MySQL * |
D | открыть текущую конфигурацию PgSQL * |
R | произвести инициализацию сборки |
* будет открыта текущая временная конфигурация, не шаблон конфигурации.
При изменении настроек (1-7) не забудьте перезапустить сервер Apache.
_showlogs__.cmd |
В этом окне:
1 | показать лог ошибок Apache |
2 | показать лог доступа Apache |
3 | показать лог закачки Apache |
R | очистить все логи |
ВАЖНО: в новую сборку экспериментально включен NodeJS!
В его каталоге надо запустить nodejs-portable.bat и выбрать там Launch для подготовки среды.Файл start.cmd запускает server.js на 127.0.0.1:8080.
Файл stop.cmd останавливает сервер.
Файл server.cmd аналогичен описанным выше и принимает параметр со значением start /stop / restart.
Логи складываются в NodeJS/stderrLog.txt и NodeJS/stdoutLog.txt
22.05.2013, Protocoder