- PVSM.RU - https://www.pvsm.ru -

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

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

    Набор выживания для веб разработчика под win*

    Набор выживания для веб разработчика под win*

    Набор выживания для веб разработчика под win*

  • Где взять?
    Скачать сборку можно отсюда protocoder.ru/site/articles/WWSK/wwsk.zip [1] (163 Mb)


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

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

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

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

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

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

Автор: Protocoder

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/mysql/54686

Ссылки в тексте:

[1] protocoder.ru/site/articles/WWSK/wwsk.zip: http://protocoder.ru/site/articles/WWSK/wwsk.zip

[2] Источник: http://habrahabr.ru/post/212059/