Wikilogs

Jump to: navigation, search
Search for wikilog posts
 

Connect Cocalc by OAuth with MediaWiki (MediaWiki4IntraNet)

The Idea

CoCalc (my fork) is great service for scientific realtime collaboration (jupyter notebooks, latex editing, PDF articles sharing). But it is not suitable for creating Team Portal/Dashboard, and Team Knowledge Base. Lot of loosely connected projects, impossibility of consistenly linked/renamed pages, … So better to have MediaWiki (MediaWiki4IntraNet) + CoCalc with authorization on the MediaWiki. Additionaly to Content Features, this binging get interesting possibilities to Team Authorization. For example, «extensions/LdapAuthentication» allows MediaWiki authenticate by LDAP, but is is not possible without radical patching, add LDAP Auth to Cocalc.

So, how to do it.

For MediaWiki4IntraNet, install REL1_26 branch of our fork https://github.com/mediawiki4intranet/mediawiki-extensions-OAuth (branch REL1_26 unusable and need patch).

Add this to LocalSettings:

$wgGroupPermissions['user']['mwoauthproposeconsumer'] = true;
$wgGroupPermissions['user']['mwoauthupdateownconsumer'] = true;
$wgGroupPermissions['user']['mwoauthmanageconsumer'] = true;
$wgGroupPermissions['user']['mwoauthsuppress'] = true;
$wgGroupPermissions['user']['mwoauthviewsuppressed'] = true;
$wgGroupPermissions['user']['mwoauthviewprivate'] = true;
$wgGroupPermissions['user']['mwoauthmanagemygrants'] = true;

→ continue reading...

Easy Networking with Vagrant and VirtualBox

When we are playing with vagrant boxes on VirtualBox, we should use three network adapters for each box. What, why, what problems and how to deal with it? Lets discuss.

→ continue reading...

2016-09-09 MediaWiki4Intranet — развертываем для разработки и в production c помощью Vagrant и Ansible

Как быстро бежит время! Проекту 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 vs Shared» уже давно не проблема.

Проблема остается только в сложности разработки и обновления нашего «бандла» — как его ставить, чтобы можно было в пару действий, с минимальной кривой обучения

  • запустить что-то работающее,
  • получить и
    • тестовую версию для локальной отладки коротким REPL-циклом — в смысле, чтобы можно было открыть файлы в IDE и править их по живому, отлаживаться в построчном отладчике с нормальным просмотром переменных и брейкпоинтами.
    • надежное конфигурирование удаленного сервера на production.
  • легко конфигурировать свои вики-инсталляции, чтобы они использовали именно ту функциональность, которая нужна, наследовали для гибкости общие параметры и т.п..

Именно для этого, мы в свое время сделали инструмент Repo.php, специально заточенный для развертывания MediaWiki4Intranet, но…

  • Он все-таки про развертывание PHP-части, где-то конкурируя с Composer[5]
  • Развернуть и раскатать систему с нуля, поставить nod-ный стек, настроить firewall и т.п. — за пределами его функциональности.
  • Никто уже не хочет слышать ни о каких новых, и тем более самопальных системах развертывания, когда DevOps-зоопарк уже взрывает всем мозг, а горшочек все продолжает варить и они все лезут и лезут на свет.

Поэтому, мы взяли все самое распространенное-стандартное-проверенное:

  • Vagrant — для эффективного руления локальными машинами.
  • Ansible — для декларативной конфигурации сервера на «Centos 7»[6]-машин. Чтобы с одной стороны, больше никогда не опускатся до простыней инструкций в духе «отредактируйте /etc/xxx, заведите каталог /var/log… ×100500 …», с другой — все это легко читаемо и понимаемо даже теми, что впервые слышит про ansible.

Т.е.

  • Почти ничего учить не придется.
  • Если что и придется — это полезные знания, уже ожидаемые от ITшников.


Итак, допустим, что у вас здоровая Linux-система[7]. Ставите:

Vagrant
пакетным менеджером или просто RPM/DEB с сайта.
Ansible
пакетным менеджером или, если вдруг он в вашем дистрибутиве очень старый или его нет — через «pip install ansible».
VirtualBox
обязан быть в пакетах, но если нет — можно и с сайта.

Дальше:

 git clone git@github.com:mediawiki4intranet/mediawiki4intranet-vagrant-ansible.git
 cd mediawiki4intranet-vagrant-ansible
 vagrant up


Пока идет развертывание, прописать в /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-редактором.

Там много-много всего хорошего, я только упомянул самое главное —

  • WYSIWYG-редактор нужен, чтобы привлечь к редактированию слабоITшных менеджеров, которые боятся кода, но любят таблицы — которых в вики коде редактировать непросто.
  • Права на страницы, именно это делает MediaWiki пригодной для чего-то кроме энциклопедии «для всех».
  • Хороший полнотекстовый поиск с русской морфологией важен русскоязычным пользователям.

Итак, логиньтесь туда админом-бюрократом WikiAdmin/Wiki1729Admin, и делайте все что угодно.

Все настроено и работает! Ну, должно работать. It works on my machine, шучу, проверял на нескольких.


Да, когда таких локальных виртуалок становится много, возникает путаница с портами, лень подключать/отключать файловые системы, и в результате, я написал некий набор утилит, которые решают эти проблемы:

  • сами монтируют файловые системы активных vagrant-машин,
  • позволяют SSH-логинится по имени vagrant-машины,

без необходимости выяснять, или вообще помнить все эти безумные цифры портов. Но об этом как-нибудь в следующий раз.

Можно зайти туда по SSH:

vagrant ssh

или

ssh vagrant@0 -p 2222

или

ssh root@0 -p 2222

Можно смонтировать всю файловую систему по sshfs

 sshfs root@0:/ -p 2222 -o reconnect /mnt/intrawiki

Разумеется, проверьте («vagrant port»), что у вас именно 2222 SSH-порт и заведите каталог для монтирования (/mnt/intrawiki или где вам удобно).


И локально настроенная машина уже готова к PHP-отладке — если ваше IDE умеет PHP-xdebug-отладку — просто включите его слушать 9000 порт, и отладка пойдет, вам только стоит отмаппировать выполняемые PHP-файлы на подмонтированную по SSH файловую систему (об этом обычно спрашивает само IDE[8]).


Ну а если хотите выкатывать наружу, правите hosts.ini, указывая IPшник и sudo-пользователя вашей VPS[9], нужный домен и название сайта, и запускайте !intrawiki-production.



Ну, а теперь разьяснение, что и где, и зачем.

Vagrantfile
Настройки локальной виртуалки. Тут что-то менять необязательно. Хотя можно вместо монтирования по SSH сделать разделяемую папку, можно рулить выдаваемым CPU и памятью, можно сменить порты. Тут же можно отключить отладочность локальной инсталляции — может вам нужна именно производительная локальная вики для работы, а не разработки.
hosts.ini
как деплоить production-сервер, тут настраивать обязательно. Не забудьте сменить пароль к WikiAdmin, а то я приду и взломаю вас :).
group_vars/all
Настройки-константы, определяющие куда все это встанет, и в крупноблочно — что. Так, установив «tex: no», если вам не нужны формулы и поддержка LaTeX-разметки, можно отказаться от жирного TeX-стека, а задав «wysiwyg: no», отказаться от WYSIWYG-редактора VisualEditor, и жирного nodejs-стека. Кстати, пока они не очень хорошо живут вместе — WYSIWYG-редактирование может убить «latex»-блоки.
roles
Сконфигурированные ansible-роли.
roles/common-root
Общие настройки минимальной центоси до более-менее вменяемой, куда будут заброшены ваши публичные ключи для беспарольного входа. Да, мы потрогаем ваш приватный ~/.ssh/id_rsa, но честно-честно, никуда его не унесем, только вытащим публичный ключ чтобы облегчить авторизацию на вики-серверах.
roles/parsoid
Развертывание nodejs-сервиса парсинга — если не нужно WYSIWYG-редактирование, можно исключить настройками в group_vars/all.
roles/wiki-root-common
Настройка PHP-NGINX-PHP-FPM стека, общего, если вы заходите держать несколько вик.
roles/intrawiki-root
Настройка конкретной вики (если нужно несколько вик, можно копировать-настроить этот каталог). Основные тонкие настройки там:
  • В roles/intrawiki-root/tasks/main.yml найдете список расширений и откуда их брать. На простые бинарные настройки это не высадить, особенно если вы будете форкать расширения, или наоборот, фиксировать версии. По смыслу там все понятно. Откуда брать, куда ставить, какая версия. Если расширение потребует дополнительных библиотек через composer — они поставятся. В общем блоке LocalSettings сделано так, что автоматически подключаются все установленные расширения. Т.е. если вам что-то ненужно — просто удалите и не выкачивайте расширение. Если нужно что-то еще — просто добавьте
- include: templates/install_ext.yml item={{ item }}
  with_items:
  - {dest: '',         url: '{{prefix_github}}mediawiki4intranet/core',     version: mediawiki4intranet-core-1.26}
  - {dest: 'config',   url: '{{prefix_github}}mediawiki4intranet/configs',  version: master}
  - {dest: 'vendor',   url: '{{prefix_wikimedia}}vendor',  version: REL1_26}
  - {dest: 'extensions/googleAnalytics',   url: '{{prefix_wikimedia}}extensions/googleAnalytics',  version: master}
  - {dest: 'extensions/MediaFunctions',    url: '{{prefix_wikimedia}}extensions/MediaFunctions',  version: master}
…
  - {dest: 'skins/cleanmonobook',  url: '{{prefix_github}}mediawiki4intranet/skins-cleanmonobook',  version: master}
  - {dest: 'skins/vector',  url: '{{prefix_github}}mediawiki4intranet/Vector',  version: mw4i-1.26}
  - {dest: 'skins/monobook',  url: '{{prefix_github}}mediawiki4intranet/skins-monobook',  version: mw4i-1.26}

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

«Присоединяйтесь, барон!» © — ставьте, пользуйтесь, пишите новые интересные расширения.


  1. Вот короткая, почти не устаревшая лекция про архитектуру MediaWiki
  2. Самый последний писк моды это «ехал докер через докер»™, но сейчас мы рассмотрим олдскульный подход, с виртуальными машинами и гибким обновлением через ansible. Докер тоже будет. Но потом.
  3. И не надо к нам больше обращаться с просьбой развернуть все это за две тыщи рублей на шаредхостинге!
  4. Хоть за пару баксов в год
  5. Который, кстати, появился слишком поздно, после Repo.php — иначе бы, конечно, не стали бы так «велосипедить»
  6. «Centos 7» — наиболее популярный в «энтерпрайзе» серверный линукс, какой бы дистрибутив вы не любили, и как бы вы не относились к редхатоподобных дистрам
  7. Если у вас Windows, попробуйте путь с cygwinом-babunом
  8. Лично я люблю Komodo IDE
  9. Ожидается VPSка с свежеустановленной Centos 7 — все хостеры VPS предоставляют такой шаблон

Как получить линкуемые GPS-координаты с андроида? Гадание триграммами

Отпуск. Леса под Казанью. Родительская дача.

Попытался наконец выяснить ее GPS/URL-координаты, чтобы можно было как-то вменяемо сослаться.

Одурел от непоняток, как это сделать. Есть андроидные смартфоны, ноуты, полудохлый инет. Казалось бы, в чем проблема?

На ноутах полно десктопных карт, но нет GPS. На смартфонах есть GPS, он нормально ловится, но нет нормального способа увидеть координаты, или как-то перебросить их до десктопа.

Яндекс.Карты — те чуваки, которые учат всех делать синхронизацию между платформами — не имеют ни малейшего способа синхронизации десктопных и мобильных карт. В десктопных Яндекс.Картах есть «карты», в мобильных Яндекс.Картах есть «закладки» и эти миры не пересекаются. Крутые гики понятное дело, с рутованными телефонами и ADB-комплектом, вытаскивают нужные SQLLite файл с базой Яндекс.Карт, и простым SQL-запросом вытаскивают нужное. Но третье тысячелетие на дворе, это какой-то бред.

Google-карты… эти просто вынесли мне мозг. С одной стороны, они предлагают десяток способор расшарить координаты. Почтой-гмейлом-фейсбуком-вотсапом-дропбоксом-WiFi-BlueTooth-тушкой-чучелом… И везде туда они засовывают не GPS-координаты, не... туда засовывают сокращенных goo.gl урл с ... координатой ближайшего крупного обьекта из базы, к которому решили привязаться… или они путают футы-с метрами или широту с долготой… или втыкают какую-то первоапрельскую рандомизацию... честно говоря, я не знаю, в чем у них ошибка, скорее всего в ДНК, вот три урла … полученные гуглкартами в радиусе десяти метров, и все они ведут к одной точке в полусотне километров от нужной.

Нет слов, ни цензурных, ни других.

Гештальт надо было закрыть любой ценой. Поставил[1] приложение What3Words (дискретизация GPS-координат до квадратов 3×3м и кодирование тремя цензурными словами)

Стал получать уже хоть что-то, напоминающее координаты, которые можно запомнить и увидеть на десктопе.

Но там другая проблема — осцилляция GPS-координат. C точностью 3x3 метра можно привязывать только вручную, соотнося координаты с нужным зданием на фотосьемке. А если на спутниковой сьемке сплошной ковер леса, телефон с пойманным GPSом стоит на подоконнике,… то я раз за разом получаю гадание новыми триграммами на «Книге Перемен», которых я вручную перевожу уже на десктопе в GPS-координаты:

Наверно по уму надо было собрать их полсотни, заполнить таблицы, построить хитрое среднее… но мне уже пофиг. Для грубых целей мне сойдет «изюм.корка-корка», и может быть кто-то подскажет правильное решение этой задачи.

  1. Там тоже не просто, ставилось только на 4 андроид, пришлось взять телефон жены
« newest ‹ newer 20 ... oldest »

Subscription management page