2016-09-09 MediaWiki4Intranet — развертываем для разработки и в production c помощью Vagrant и Ansible
Line 12: | Line 12: | ||
На подходе [https://sagarhani.wordpress.com/2016/07/31/one-last-step-for-completion-of-google-summer-of-code-kde-wikitolearn/ даже мгновенное коллаборативное редактирование] в стиле «etherpad/googledocs»… | На подходе [https://sagarhani.wordpress.com/2016/07/31/one-last-step-for-completion-of-google-summer-of-code-kde-wikitolearn/ даже мгновенное коллаборативное редактирование] в стиле «etherpad/googledocs»… | ||
− | Все это уже не развернуть тупым копированием файлов, и нереально | + | Все это уже не развернуть тупым копированием файлов, и нереально влом тащить все это под Windows — к тому же, почти все вменяемые вебразработчики ушли на Mac/Linux. |
Впрочем, современные тренды разработки вовсе требуют вынести за скобки систему разработчика (все это холиварно и его личное дело), а все-все-все зависимости проекта инкапсулировать и виртуализировать/контейнеризировать<ref>Самый последний писк моды это «ехал докер через докер», но сейчас мы рассмотрим промежуточную версию, с виртуальными машинами и гибким обновлением через ansible. Докер тоже будет. Но потом.</ref>. | Впрочем, современные тренды разработки вовсе требуют вынести за скобки систему разработчика (все это холиварно и его личное дело), а все-все-все зависимости проекта инкапсулировать и виртуализировать/контейнеризировать<ref>Самый последний писк моды это «ехал докер через докер», но сейчас мы рассмотрим промежуточную версию, с виртуальными машинами и гибким обновлением через ansible. Докер тоже будет. Но потом.</ref>. | ||
Т.е. все, полноценная MediaWiki — больше не проект для shared hostingа<ref>И не надо к нам больше обращаться с просьбой развернуть все это за две тыщи рублей на шаредхостинге!</ref>, но и shared hosting уже почти умер для нормальных проектов. Но так как цены на изолированный VPS-контейнер упали уже совсем ниже плинтуса<ref>Хоть [http://lowendstock.com/ за пару баксов в год]</ref>, то разница в плате за VPS/Shared уже давно не проблема. | Т.е. все, полноценная MediaWiki — больше не проект для shared hostingа<ref>И не надо к нам больше обращаться с просьбой развернуть все это за две тыщи рублей на шаредхостинге!</ref>, но и shared hosting уже почти умер для нормальных проектов. Но так как цены на изолированный VPS-контейнер упали уже совсем ниже плинтуса<ref>Хоть [http://lowendstock.com/ за пару баксов в год]</ref>, то разница в плате за VPS/Shared уже давно не проблема. | ||
Line 98: | Line 98: | ||
[https://github.com/mediawiki4intranet/mediawiki4intranet-vagrant-ansible/blob/master/hosts.ini hosts.ini], указывая IPшник и sudo-пользователя вашей VPS<ref>Ожидается VPSка с свежеустановленной Centos 7 — все хостеры VPS предоставляют такой шаблон</ref>, нужный домен и название сайта, и запускайте | [https://github.com/mediawiki4intranet/mediawiki4intranet-vagrant-ansible/blob/master/hosts.ini hosts.ini], указывая IPшник и sudo-пользователя вашей VPS<ref>Ожидается VPSка с свежеустановленной Centos 7 — все хостеры VPS предоставляют такой шаблон</ref>, нужный домен и название сайта, и запускайте | ||
[https://github.com/mediawiki4intranet/mediawiki4intranet-vagrant-ansible/blob/master/!intrawiki-production !intrawiki-production]. | [https://github.com/mediawiki4intranet/mediawiki4intranet-vagrant-ansible/blob/master/!intrawiki-production !intrawiki-production]. | ||
− | |||
− | |||
− | |||
Revision as of 12:20, 10 September 2016
Как быстро бежит время!
Проекту MediaWiki4Intranet уже больше десяти лет, а нашим попыткам натягивать сову на глобус MediaWiki для всех интранет-задач внутри IT компании и вовсе лет 12.
И изначально все было достаточно просто и понятно — стандартный PHP-проект, в духе «скопируй файлы в настроенный PHP-хостинг». Было не зазорно вести разработку/доработку в винде, под LAMP-окружениями типа XAMPP, а на линукс-машину выкатываться через SVN.
Поэтому мы в свое время и завели такую штуку, как Windows-сборка Mediawiki4Intranet, где обычным каталогом лежали все необходимые утилиты/фреймворки (включая TeX, Graphviz, Sphinx), и любой виндовс-пользователь мог попробовать нашу вики, и даже, не приходя в создание, начать что-то править и создавать[1].
Но время идет.
MediaWiki из моностекового монолитного PHP-проекта, с классической моделью «генерация страницы на сервере» постепенно превращается в мультистековый микросервисный проект с realtime UI — так, например, появившийся WYSIWYG-редактор требует специально поднятого сервиса на node.js. На подходе даже мгновенное коллаборативное редактирование в стиле «etherpad/googledocs»…
Все это уже не развернуть тупым копированием файлов, и нереально влом тащить все это под Windows — к тому же, почти все вменяемые вебразработчики ушли на Mac/Linux. Впрочем, современные тренды разработки вовсе требуют вынести за скобки систему разработчика (все это холиварно и его личное дело), а все-все-все зависимости проекта инкапсулировать и виртуализировать/контейнеризировать[2]. Т.е. все, полноценная MediaWiki — больше не проект для shared hostingа[3], но и shared hosting уже почти умер для нормальных проектов. Но так как цены на изолированный VPS-контейнер упали уже совсем ниже плинтуса[4], то разница в плате за VPS/Shared уже давно не проблема.
Проблема остается только в сложности разработки и обновления нашего «бандла» — как его ставить, чтобы можно было в пару действий, с минимальной кривой обучения
- запустить что-то работающее,
- получить и
- тестовую версию для локальной отладки коротким REPL-циклом — в смысле, чтобы можно было открыть файлы в IDE и править их по живому, отлаживаться в построчном отладчике с нормальным просмотром переменных и брейкпоинтами.
- надежное конфигурирование удаленного сервера на production.
- легко конфигурировать свои вики-инсталляции, чтобы они именно ту функциональность, которая нужна, и не больше, наследовали общие параметры.
Именно для этого, мы в свое время сделали инструмент Repo.php, специально заточенный для развертывания MediaWiki4Intranet, но…
- Он все-таки про развертывание PHP-части, где-то конкурируя с Composer[5]
- Развернуть и раскатать систему с нуля, поставить nod-ный стек, настроить firewall и т.п. — за пределами его функциональности.
- Никто уже не хочет слышать ни о каких новых, и тем более самопальных системах развертывания, когда DevOps-зоопарк уже взрывает всем мозг, а горшочек все продолжает варить и они все лезут и лезут на свет.
…
Поэтому, мы взяли все самое распространенное-стандартное-проверенное:
- Vagrant — для эффективного руления локальными машинами.
- Ansible — для декларативной спецификации конфигурации Centos7[6]-машин.
Т.е.
- Почти ничего учить не придется.
- Если что и придется — это полезные знания, ожидаемые от большинства.
Итак, сначала допустим, что у вас здоровая Linux-система[7].
- Ставите Vagrant пакетным менеджером или просто RPM/DEB с сайта.
- Ставите Ansible пакетным менеджером или, если вдруг он в вашем дистрибутиве очень старый или его нет — через
pip install ansible
- Ставите VirtualBox — обязан быть в пакетах, но если нет — можно и с сайта.
Дальше:
git clone git@github.com:mediawiki4intranet/mediawiki4intranet-vagrant-ansible.git
Пока идет развертывание, прописать в /etc/hosts
127.0.0.1 intrawiki.local.com
Все должно кончится хорошо, без страшных слов о падениях и красной раскраски терминала. Только желтые и зеленый цвета и что-то типа
PLAY RECAP ********************************************************************* intrawiki : ok=468 changed=132 unreachable=0 failed=0
Для очистки совести можно спросить:
vagrant port
и убедится, что форвардинг, какой-то такой:
22 (guest) => 2222 (host) 80 (guest) => 15304 (host) 3306 (guest) => 15305 (host)
Т.е. вы получаете SSH доступ к машинке по 2222 порту, доступ к MySQL базе по 15305, ну и можете просто открыть в броузере http://intrawiki.local.com:15304/ — там вас ждет настроенная MediaWiki, с почти всеми нашими расширениями, Sphinx-поиском, IntraACLем и WYSIWYG-редактором. Логиньтесь туда админом-бюрократом WikiAdmin/Wiki1729Admin, и делайте все что угодно.
Все настроено и работает! Ну, должно работать. It works on my machine, шучу, проверял на нескольких.
Можно зайти туда по SSH:
vagrant ssh
или
ssh vagrant@0 -p 2222
или
ssh root@0 -p 2222
Можно смонтировать всю файловую систему по sshfs
sshfs root@0:/ -p 2222 -o reconnect /mnt/intrawiki
Разумеется, проверьте, что у вас именно 2222 SSH-порт и заведите каталог для монтирования (/mnt/intrawiki или где вам удобно). Да, когда таких локальных виртуалок становится много, возникает путаница с портами… У меня есть некий набор утилит, которые решают эти проблемы:
- сами монтируют файловые системы активных vagrant-машин,
- позволяют логинится по SSH по имени vagrant-машины,
без необходимости выяснять, или вообще помнить все эти безумные цифры портов — но об этом как-нибудь в следующий раз.
И локально настроенная машина уже готова к PHP-отладке — если ваше IDE умеет PHP-xdebug-отладку — просто включите его слушать 9000 порт, и отладка пойдет, вам только стоит отмаппировать выполняемые PHP-файлы на подмонтированную по SSH файловую систему (об этом обычно спрашивает само IDE[8]).
Ну а если хотите выкатывать наружу, правите hosts.ini, указывая IPшник и sudo-пользователя вашей VPS[9], нужный домен и название сайта, и запускайте !intrawiki-production.
Ну, а теперь разьяснение, что и где, и зачем.
- ↑ Вот короткая, почти не устаревшая лекция про архитектуру MediaWiki
- ↑ Самый последний писк моды это «ехал докер через докер», но сейчас мы рассмотрим промежуточную версию, с виртуальными машинами и гибким обновлением через ansible. Докер тоже будет. Но потом.
- ↑ И не надо к нам больше обращаться с просьбой развернуть все это за две тыщи рублей на шаредхостинге!
- ↑ Хоть за пару баксов в год
- ↑ Который, кстати, появился слишком поздно, после Repo.php — иначе бы, конечно, не стали бы так «велосипедить»
- ↑ Как наиболее популярных в «энтерпрайзе»
- ↑ Если у вас Windows, попробуйте путь с cygwinом-babunом
- ↑ Лично я люблю Komodo IDE
- ↑ Ожидается VPSка с свежеустановленной Centos 7 — все хостеры VPS предоставляют такой шаблон