=== Установка BnW на Linux ===
[[../|BnW]] — это сервис микроблоггинга, написанный на языке программирования Python. В данной статье мы рассмотрим его установку и настройку для Ubuntu 12.04, установка для Debian и других Debian-based дистрибутивов не должна сильно отличаться. Мы будем использовать виртуальное окружение [[http://pypi.python.org/pypi/virtualenv/|virtualenv]], которое позволяет устанавливать библиотеки в выбранный каталог, никак не затрагивая системные версии, не требует прав суперпользователя и при желании позволяет легко удалить установленное приложение без каких-либо последствий.

==== Устанавливаем базовые зависимости ====
||<#FF0000> TODO /!\ Обговорить версии всех необходимых компонентов.||
{{{% sudo apt-get install python-virtualenv git build-essential python-dev}}}<<FootNote(''build-essential'' и ''python-dev'' нужны для компиляция сишного bson-модуля mongo-библиотеки для ускорения её работы.)>>

==== Создаём виртуальное окружение ====
Виртуальное окружение будет находиться в домашнем каталоге пользователя. Вы можете поместить его в другое место по желанию. Например, на сервере уместнее будет использовать каталог {{{/srv/}}}.

{{{% cd $HOME}}}<<BR>>
{{{% virtualenv bnw}}}<<BR>>
{{{% cd bnw; source bin/activate}}}

==== Устанавливаем библиотеки, получаем код ====
{{{% mkdir src; cd src}}}<<BR>>
{{{% pip install twisted tornado PyRSS2Gen}}}<<BR>>
{{{% pip install -e git+https://github.com/fiorix/mongo-async-python-driver.git#egg=txmongo}}}<<BR>>
{{{% git clone https://github.com/stiletto/bnw.git}}}<<BR>>
{{{% cd bnw; git clone https://github.com/stiletto/linkshit.git}}}

Шаблон конфига находится в файле {{{config.py.example}}}, копируем его:<<BR>>
{{{% cp config.py.example config.py}}}<<BR>>

==== Устанавливаем и настраиваем MongoDB ====
{{{% sudo apt-get install mongodb-server}}}

И, в принципе, всё, но желательно ещё проделать следующее:
 * Установите в файле {{{/etc/mongodb.conf}}} опции {{{bind_ip = 127.0.0.1}}} и {{{nohttpinterface = true}}}
 * Перезапускаем mongo:<<BR>>
 {{{% sudo /etc/init.d/mongodb restart}}}
 * Удаляем тестовые базы:<<BR>>
 {{{% mongo test --eval 'db.dropDatabase()'}}}<<BR>>
 {{{% mongo local --eval 'db.dropDatabase()'}}}

==== Устанавливаем и настраиваем XMPP-сервер ====
Мы рассмотрим prosody, но вы также можете использовать ejabberd или jabberd2, их настройка во многом аналогична. (Вообще, подойдёт любой сервер, поддерживающий [[http://xmpp.org/extensions/xep-0114.html|XEP-0114: Jabber Component Protocol]], но эти три сервера наиболее популярны и просты в использовании.)

Устанавливаем prosody:<<BR>>
{{{% sudo apt-get install prosody}}}

Возможны два варианта настройки: локальный сервис, который доступен только вам (например, если нужно протестировать какие-то фичи), или сервис общего пользования.

===== Локальный вариант =====
 * Установите в файле {{{/etc/prosody/prosody.cfg.lua}}} в глобальной секции опции:<<BR>><<BR>>
 {{{c2s_interface = "127.0.0.1"}}}<<BR>>
 {{{s2s_interface = "127.0.0.1"}}}<<BR>>
 {{{legacy_ssl_interface = "127.0.0.1"}}}<<BR>><<BR>>
 (Перед строчкой {{{----------- Virtual hosts -----------}}})
 * Отредактируйте файл виртуального хоста {{{/etc/prosody/conf.avail/localhost.cfg.lua}}} и добавьте в конец следующие строчки:<<BR>><<BR>>
 {{{Component "bnw.localhost"}}}<<BR>>
 {{{    component_secret = "пароль для авторизации компонента"}}}<<BR>><<BR>>
 (Вместо {{{bnw}}} вы можете использовать любое имя, главное окончание {{{.localhost}}})
 * Перезапускаем prosody:
 {{{% sudo /etc/init.d/prosody restart}}}

===== Публичный вариант =====
||<#FF0000> TODO /!\ ||

==== Устанавливаем и настраиваем HTTP-сервер ====
===== Локальный вариант =====
По умолчанию, BnW запускает веб-интерфейс по адресу [[http://localhost:7808/]], дополнительные действия не требуются.

===== Публичный вариант =====
||<#FF0000> TODO /!\ ||

==== Настраиваем сервис ====
Отредактируйте файл конфигурации сервиса {{{config.py}}}, который должен находиться в {{{$HOME/bnw/src/bnw/}}}, если вы точно соблюдали инструкции:
 * {{{srvc_port}}} в случае prosody надо установить в {{{5347}}}
 * {{{srvc_name}}} в случае локального варианта должен быть {{{bnw.localhost}}} (или то имя, которое вы настроили)
 * {{{srvc_pwd}}} должен совпадать со значением {{{component_secret}}}
||<#FF0000> TODO /!\ Дописать про остальные опции.||

==== Запускаем сервис ====
Перейдите в каталог сервиса {{{$HOME/bnw/src/bnw/}}} и запустите его с помощью:<<BR>>
{{{% twistd -ny instance.tac}}}<<BR>>

Не забудьте, что запускать сервис вы должны из виртуального окружения virtualenv, поэтому если вы открыли новую консоль, то перед запуском сервиса необходима повторная инициализация окружения:<<BR>>
{{{% source $HOME/bnw/bin/activate}}}

Такой вариант запуска подходит для отладки, но если вам нужно чтобы сервис запускался в режиме демона с помощью стандартного механизма стартовых скриптов, неоходимо сделать следующее:
 * Скопируйте шаблон скрипта в системный каталог:<<BR>>
 {{{% sudo cp bnw.init.d.sh /etc/init.d/bnw}}}
 * Отредактируйте переменную {{{BNW_VENV_PATH}}} в этом скрипте по необходимости. Это путь до виртуального окружения virtualenv, в нашем случае {{{$HOME/bnw}}}.
 * Также по желанию отредактируйте переменные {{{USER}}} и {{{GROUP}}} — от этих пользователя и группы будет запускаться сервис. Системный пользователь и одноимённая группа {{{bnw}}} создаются с помощью команды:<<BR>>
 {{{% sudo adduser --system --no-create-home --group bnw}}}
 * Лог сервиса будет располагаться по адресу {{{/tmp/bnw.log}}}

Теперь вы можете использовать команды:
 * {{{% sudo /etc/init.d/bnw start}}}
 * {{{% sudo /etc/init.d/bnw stop}}}
 * {{{% sudo /etc/init.d/bnw restart}}}
для запуска, остановки и перезагрузки сервиса соответственно. При данном варианте инициализация окружения не требуется, скрипт об этом позаботится сам.

 * Чтобы сервис запускался при старте компьютера, выполните команду:<<BR>>
 {{{% sudo update-rc.d bnw defaults}}}
 * Чтобы отменить это действие:<<BR>>
 {{{% sudo update-rc.d -f bnw remove}}}

==== Прочее ====
Обратите внимание, что для работы сервиса необходимы как минимум запущенные XMPP и MongoDB сервера. По умолчанию, при установке они добавляются в автозагрузку, но если по какой-то причине один из серверов не загружен, запустите его с помощью механизма стартовых скриптов ({{{% sudo /etc/init.d/server start}}}).