...

понедельник, 10 февраля 2014 г.

[Из песочницы] Набор выживания для веб-разработчика под win*


Привет!


Давно собирался написать статью на Хабр, и вот наконец-то собрался.


Расскажу про одну сборку, сильно облегчающую жизнь вебмастеру под 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, положить его в sys\pythonData и прописать в конфиге 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шечку — ее можно запилить самостоятельно с гейшами и маракуевым соком безо всяких проблем (плюс от меня и других, использующих эту штуку, получить кучу благодарностей)

  • Как выглядит меню конфигурации сборки?

  • Где взять?

    Скачать сборку можно отсюда http://ift.tt/1gh7s1D (163 Mb)








Вот в целом и все.

Постарался сделать максимально простое решение и максимально просто его описать.

Надеюсь теперь элементали будут спать спокойно, а веб-разработчик займется наконец тем, чем должен — разработкой.


Я считаю самым главным плюсом этой сборки отсуствие всего лишнего — только самое необходимое — все остальное свободно настраивается «под себя родимого», ибо уж что-что, а с виндовым то cmd/bat не сложно работать.

Все свои нужные инструменты всегда можно спрятать в папочку Tools и прописать работу с ними в меню, если то требуется.


Но решать как получилось на самом деле Вам — любые вопросы, сообщения о багах и предложения приветствуются — буду очень им рад.


Надеюсь, Вам понравится работать с этой штукой, и чье-то сэкономленное время и нервы — самая хорошая для меня награда.


P.S. Спасибо огромное НЛО и всем добрым людям — теперь я тоже в этом замечательном сообществе!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий