Привет!
Давно собирался написать статью на Хабр, и вот наконец-то собрался.
Расскажу про одну сборку, сильно облегчающую жизнь вебмастеру под Windows.
История такова — во время очередных «плясок с бубном» по поднятию web-окружения под win у заказчика, я понял что меня достало вся эта магия.
Надоел поиск и вызов элементалей 50 уровня ради того чтобы найти модуль mod_wsgi под Python и Апач, скомпиленный под win, инициализация данных Postge SQL, маета с тем, что Апач не стартует, потому что скайпик уже висит на 80 порту…
Хотелось чего-то простого, гибкого и главное — портабельного.
Т.е. охота было чтобы один раз настроил, потом пришел, скопировал в другое место, запустил — и все окружение с готовыми данными и настройками поднялось.
Почему win, когда давно есть та-же Ubunt-а? Потому что мы часто ездили с нашим софтом к заказчикам, а те после просмотра демки говорили — «а можно мне поиграться оставить?», ну и 90% компьютеров имело, естественно, windows.
Посмотрев, что есть на этом поле, и увидив лишь ограниченные решения, сел писать сам. Как там «Хочешь сделать хорошо — сделай это сам».
Идея была проста — сделать переносимую среду веб-разработчика «с шашками и дамами не тяжелого поведения», причем такую, чтобы можно было поставить, а потом удалить без оставления мусора,
окривления системы или чего-либо еще из этой оперы.
Так родилась сборка "Windows Web Survival Kit" или WWSK — переносимый «Apache + Node + PHP + Python + MySQL + PgSQL + Утилиты».
Как сделана портабельность (переносимость) сборки?
«Отвязал» я программы от физических путей что называется «в лоб», ну зато все очень просто и понятно.
Сделал рутовой папкой сборки папку с названием «www» (т.е. внутри нее живет все наше окружение), а вот ее уже можно поместить куда угодно.
Для каждой конфигурации, в тех местах где требуется указание полного пути, путь указывается вида "?/www/путь-куд-надо-относительно-папки-www".
При копировании в некий новый путь, после копирования запускается специальный файл, который грубо говоря делает следующее — берет все наши «начальные» конфигурации, заменяет "?/" на текущий путь до папки «www» и раскладывает исправленные конфиги в нужные места, затем запускает и регистрирует службы.
Что есть внутри базовой сборки?
Apache — при старте регистрирует службу «ApacheSA».
MySQL — при старте регистрирует службу «MySQLSA».
PgSQL — при старте регистрирует службу «PgSQLSA».
PHP 5, подключенный как fast-cgi.
Python 3(или 2), подключенный как mod-wsgi
При остановке какого либо компонента, службы так же останавливаются и разрегистрируются.
На каких версиях windows работает?
Windows XP (32/64), Windows 7 (32/64) работает точно.
По-идее, должна работать и на Windows 8, но проверить не было возможности, к сожалению.
Структура сборки
В корне лежат следующие папки:
- Apache — файлы веб-сервера Apache
- MySQL — файлы MySQL
- NodeJS — файлы NodeJS
- PgSQL — файлы Postgre SQL
- PHP — файлы PHP
- Python — файлы Python
- sys — файлы, необходимые для функционирования сборки
- tmp — папка для временных файлов (сессии в PHP, закачиваемые файлы и т.д.)
- Tools — папка с инструментарием
- webroot — корневая папка для сайтов
И файлы:
- _runner___.cmd — файл основного меню сборки (перезапуск Apache, реконфигурация, логи и т.д. — все здесь)
- _setconf__.cmd — файл реконфигурации сборки (может быть вызван из runner, а может быть запущен отдельно)
- _showlogs_.cmd — файл работы с логами Apache — очистка, просмотр (так же может быть запущен из runner или вручную)
- clean.cmd — файл очистки сборки (например для переноса на флешку — удаляет временные файлы, логи и т.д.
- phpinfo.cmd — файл генерации информации по PHP и открытия его в браузере для изучения
- readme.txt — файл описания сборки
- upgradeSites.txt — файл с ссылками для обновления компонентов сборки
Папка sys
Внутри есть подпапки apacheData, mysqlData, pgsqlData, phpData, pythonData в которых хранятся шаблоны конфигураций для всех этих сервисов.
Это те самые шаблоны конфигураций, которые при привязки сборки к новой папке будут копироваться в нужные места с измененным путем внутри.
Кроме того, там же хранятся менеджеры дл БД (mysqlData/manager и pgsqlData/manager).
Менеджеры не включены в сборку — каждый сам может использовать то, к чему привык.
Я использую EMS MySQL и PgSQL manager — мне больше всего они приглянулись по функционалу и удобству.
Самое главное условие — запускаемый файл менеджера в этих папках должен обзываться как manager.exe.
В корне папки sys есть еще файл для работы со сборкой из командной строки services.cmd
Например рестартовать Apache можно так: services.cmd RestartApache.
Врядли это нужно будет в жизни — все можно сделать из меню, но если кому-то хочется прикрутить что-то свое — возможность есть.
Папка tmp
Временный каталог всей сборки.
Во всех конфигурациях, где требуется указать временный каталог, он указывается сюда.
Внутри нее можно все удалять кроме каталога sessions, в котором живут сессии PHP.
Папка Tools
Папка с различным инструментарием.
Подпапки Apache, MySQL, NodeJS, PgSQL, PHP, Python содержат различные доки и хитрости по этим сервисам, плюс некоторые сервисные файлики, позволяющие делать какой-либо дополнительный функционал.
Например в случа с БД там есть командные файлы для импорта и экспорта дампов для БД, инициализации БД и т.д.
Кроме этого у меня в этой папке живет GIT (папка с одноименным названием), YUI minimizer (папка Minimizer), Оптимизаторы изображений (папка IMGoptimize), cURL, Inkscape и т.д.
Если у Вас есть какие-то инструменты, которыми Вы постоянно пользуетесь — их можно разместить сюда.
Папка webroot
В этой папке живут папки с сайтами, пути до которых прописаны в конфигурации Apache или NodeJS.
Единственная специальная подпапка здесь — это подпапка Python где живет обработчик хоста для mod_wsgi для Python, он так же прописан в конфиге Apache и Вы всегда его можете заменить сами на что хотите.
Обновление сборки
С обновлением все просто — скачиваете нужный компонент с сайта и разархивируете его в нужную папка с заменой файлов.
Однако, естественно, есть несколько нюансов:
- сборка 32 битная — файлы нужно качать соответствующее (хотя можно сделать и всю 64 битную — лишь бы не смешивать)
- PHP должен быть скачан как thread safe
- при обновлении Python, нужно скачать соответствующую версию mod_wsgi, положить его в syspythonData и прописать в конфиге Apache.
Некоторые компоненты производители предоставляют как пакет msi, его можно распаковать в win командой msiexec /a «имяMSIпакета» TARGETDIR="%CD%tmp" /qb — он создаст папку tmp в каталоге рядом с пакетом и распакует туда его содержимое, а уж потом его можно скопировать в нужную папку (не забудьте удалить в папке tmp копию файла пакета, которую заботливый MSI инсталлер туда кладет)
Особенности сборки
- Имя пользователя и пароль для всех БД root
- Сборка вся 32-битная
- timezonе стоит как GMT+6
- Python доступен в двух версиях: 2.x и 3.x
- Компоненты сборки вешаются на 127.0.0.1 и нужный порт, и, соотвтественно, будут доступны оттуда.
- 127.0.0.1 указывает на webroot/
- 127.0.0.2 указывает на webroot/site1
- 127.0.0.3 указывает на webroot/site2
- 127.0.0.5 через mod_wsgi на webroot/Python
- В конфиге Apache есть две метки вида #CL#, сразу после них идут DocumentRoot и RewriteEngine On — они нужны для нахождения и изменения этих параметров из runner-а
Начало работы со сборкой
Первое, что надо сделать — это зайти в шаблоны конфигураций (смотрите инфу про папку sys) и подстроить их «под себя». Указать нужные папки с сайтами внутри webroot, разобраться, какая версия Python нужна и т.д.
При операции копирования сборки куда либо, либо при переконфигурации нужно, чтобы были остановлены все компоненты сборки — т.е. должны быть остановлены Apache, MySQL и PgSQL и т.д.
Сделать это можно из runner-а, выбрав там Stop All
Затем запустить runner и выбрать там Set configuration или сразу запустить setconf и там выбрать Reset to defaults and set current path as the main path — после этого сборка будет переконфигурирована на работу в данной папке.
Главное помнить, что после этой операции все текущие конфиги, которые были, заменяются на шаблонные! И если Вы что-то в них меняли, но не меняли это в шаблонах — эти изменения потеряются.
После переконфигурации запустите нужные Вам службы из runner-а и все — можно работать. Например зайти в браузере на 127.0.0.1 и (если не менялась эта настройка в конфигурации) должен открыться сайт из корня webroot.
Если Вы запустили сборку в первый раз — не забудьте проинициализировать БД MySQL / PgSQL создав хотя-бы одну БД.
Проблемы
- Skype и еще некторые программы любят сидеть на локалхосте на используемых в сервисах сборки портах (80, 3306, 5432) — естественно попытки запустить эти сервисы будут приводить к сбою.
- В firewall-е и антиврусах должны быть даны соответствующие разрешения на локалхост и сервисы, на нем запускаемые.
Некоторые вопросы и ответы на них
- Почему не на PowerShell?
В те времена, когда начинал писать ps еще только в проекте был. А если и писать на чем-то — то на родном для системе шелле. - Почему так олдскульно на cmd? Почему не написать красивые GUIшечки?
Вопрос интересный конечно. Но достаточно все тривиально — на cmd, чтобы можно было легко что-то изменить — в том числе добавить или убрать пункты меню и т.д. Это самый простой по временным затратам путь, а мне нужно было быстро реализовать удобный портабельный и легкоконфигурируемый функционал. Да и делать крутой интерфейс в который заходят 1-2 раза в самом начале мне кажется нецелесообразным. Но! Поскольку все команды этого интерфейса доступны из services.cmd (да и кроме того, они очень просты по функционалу), то если хочется GUIшечку — ее можно запилить самостоятельно с гейшами и маракуевым соком безо всяких проблем (плюс от меня и других, использующих эту штуку, получить кучу благодарностей) - Как выглядит меню конфигурации сборки?
Так
- Где взять?
Скачать сборку можно отсюда protocoder.ru/site/articles/WWSK/wwsk.zip (163 Mb)
Вот в целом и все.
Постарался сделать максимально простое решение и максимально просто его описать.
Надеюсь теперь элементали будут спать спокойно, а веб-разработчик займется наконец тем, чем должен — разработкой.
Я считаю самым главным плюсом этой сборки отсуствие всего лишнего — только самое необходимое — все остальное свободно настраивается «под себя родимого», ибо уж что-что, а с виндовым то cmd/bat не сложно работать.
Все свои нужные инструменты всегда можно спрятать в папочку Tools и прописать работу с ними в меню, если то требуется.
Но решать как получилось на самом деле Вам — любые вопросы, сообщения о багах и предложения приветствуются — буду очень им рад.
Надеюсь, Вам понравится работать с этой штукой, и чье-то сэкономленное время и нервы — самая хорошая для меня награда.
P.S. Спасибо огромное НЛО и всем добрым людям — теперь я тоже в этом замечательном сообществе!
Автор: Protocoder
Грейт Сенкс!
буду рекомендовать для http://pro-club.org