К основному контенту

xWiki на Bitnami tomcat virtual machine

Продолжаю эксперименты с xWiki. В предыдущей статье был изложен опыт развертывания под виндой, но с ней что-то не срастается: LDAP-авторизация и кириллица вроде бы завеслись и начали работать, но через сутки почему-то всё это работать перестало без объяснения причин, а в конфиги уже написать нечего - всё, что положено, написано. Разбираться устал, решил экспериментнуть с linux'ом и получилось даже лучше.

Скорее всего, xwiki - это tomcat и без вариантов


Прежде всего хочу поделиться подозрением, что xwiki только на словах работает с любым сервером приложений, а на деле - только с tomcat. Во-первых, я попробовал их несколько и ни в одном даже deploy не завершился успехом. Во-вторых, на офф. сайте есть вот эта статья и в ней только tomcat. Убежден, что это "жжжж" не спроста.

В общем, план такой: берем виртуальную машину bitnami tomcat, запускаем на гипервизоре VirtualBox, настраиваем, разворачиваем xwiki, выполняем некоторые не мудрёные настройки самой xwiki.

Развертывание виртуальной машины

Тут все просто и описано у самих этих битнамцев.
Качаем виртуалку отсюда. Запускаем VirtualBox и импортируем вот так - ни чего умного.
Запускаем виртуалку, она нам говорит, какой у нее ip и какие дефолтные имя и пароль (в норме - bitnami:bitnami).
Логинимся в ВМ с консоли, чтобы поменять дефолтный пароль на что-то другое и чтобы включить ssh.
Это описано тут и тут. Пароль оно потребует сменить автоматически, а для ssh - две строчки:
sudo mv /etc/init/ssh.conf.back /etc/init/ssh.conf
sudo start ssh
На этом заканчиваются все действия, которые надо выполнять с консоли ВМ. Переходим на виндовую машину, чтобы колдовать при помощи WinSCP и Putty. Жмем Ctrl+D, чтобы вытряхнуться из консоли.

Настройка тунелирования в PUTTY

По соображениям безопасности доступ к phpmyadmin и консоли администрирования томката ограничен - к ним можно достучаться только с интерфейса 127.0.0.1 самой виртуальной машины. Теоретически можно это все и расшарить путем правки конфигов апача и томката, но, во-первых, это долго, а, во-вторых, не безопасно.

По этому мы просто наладим при помощи PUTTY тунель с порта 666 нашей машины на порт 80 loopback-интерфейса виртуалки. Этот тунель настраивается в настройках подключения putty и он поднимается в момент, когда мы логинимся в виртуалку и вводим правильный логин-пароль, и закрывается, когда мы закрываем соединение в putty.

По идее, это тоже подробно описывается тут, но по началу для неопытных адинэсников это всё выглядит диковато. Итак, делается это следующим образом:
  1. Запускаем putty, в настройках сессии вводим ip или имя виртуальной машины, к которой будем цепляться.
  2. Далее переходим на закладку Connection\SSH\Tunnels
  3. В поле Source port вводим порт на нашей текущей машине, запросы к которому будут редиректиться в нутро виртуалки. В нашем случае это 666 (да потому что!)
  4. В поле Destination вводим 127.0.0.1:80.
  5. Жмем add
  6. Жмем open и вводим логин-пароль
Вот так это выглядеть должно
В результате, после установки соединения и авторизации, мы можем на своей локальной машине, где запущен putty, открыть браузер и в адресной строке ввести http://localhost:666/phpmyadmin. В результате мы убеждаемся, что нам теперь доступен phpmyadmin и всё красиво.

Добавить доступной памяти томкату

По дефолту томкат запускается урезанный по доступной оперативе до 768 мегабайт. Этого мало для xwiki, в результате создание страницы может завершаться http 500 internal server error. Для нормальной работы xwiki нужно, как минимум, 1024MB, но лучше 2048MB.
Чтобы исправить эти досадные умолчания идем в /opt/bitnami/java/bitnami/setenv.sh и меняем строку с export JAVA_OPTS вот так:
# было так - мин256, макс768
#export JAVA_OPTS="-Xms256M -Xmx768M $JAVA_OPTS"
#стало вот эдак - мин 512, макс 1024
export JAVA_OPTS="-Xms512M -Xmx2048M $JAVA_OPTS"  
Это для продуктивного использования все равно маловато, но падать уже ни чего не будет.

Тут еще важно понимать, что слишком много памяти выделять тоже нельзя. У java сборщик мусора в целях недопущения угнетения производительности запускается тогда и только тогда, когда вся доступная приложению память заполнена. По этому java-приложение может сожрать и гарантированно рано или поздно сожрет всю память, какую ей дают. Так что какие-то рамки задавать надо обязательно. 2ГБ макс - это нормальный объем, можно использовать эту магическую цифру, как дефолтное значение.

Перезапускаем весь стэк
/opt/bitnami/ctlscript.sh restart
Можно перезапускать и по отдельности
/opt/bitnami/ctlscript.sh restart mysql
/opt/bitnami/ctlscript.sh restart tomcat
/opt/bitnami/ctlscript.sh restart apache
Но можно и всё пачкой. Тут - по желанию или/и по ситуации.

Создать пользователя БД и основную базу данных

У xwiki есть особенная фича - субвики. Из админки администратор можен создавать отдельные вики, изолированные от основной и от других вик. Слово "изолированные" здесь прямо в буквальном смысле употреблено - для субвик создается отдельная база данных со своим контентом и пользователями.
А в настройках соединеия приложения xwiki с базой данных пользователь указывается только один. Соответственно, мы понимаем, что пользователь БД нужен особенный - с доступом к классу баз, а не к одной. Иначе субвики нельзя будет создать.

Заходим в http://localhost:666/phpmyadmin и:
# создаем пользователя с именем xwiki и правом коннектиться с хоста localhost
CREATE USER 'xwiki'@'localhost' IDENTIFIED WITH mysql_native_password;
GRANT USAGE ON *.* TO 'xwiki'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

# придумываем ему пароль
SET PASSWORD FOR 'xwiki'@'localhost' = 'сюда придумай пароль пользователя БД';

# даем права на все базы, имя которых начинается на xwiki_
GRANT ALL PRIVILEGES ON `xwiki\_%`.* TO 'xwiki'@'localhost';

# создаем сразу базу для основной вики, которая - по умолчанию
CREATE DATABASE xwiki_mainwiki;

Настройка war-пакета

Чтобы сократить себе возню, настроим коннект к БД и имена таблиц в приложении xwiki заранее - до развертывания.
Для этого берем пакет (war-файл), распаковываем его 7zip-ом или чем угодно, идем в папку WEB-INF и колдуем.

hibernate.cfg.xml

В этом файле ищем строчку "<property name="connection.url">" и заменяем ее вместе с еще восемью вот на эту копипасту:
<property name="connection.url">jdbc:mysql://localhost:3306/xwiki_mainwiki?useServerPrepStmts=false</property>
<property name="connection.username">xwiki</property>
<property name="connection.password">сюда впиши пароль пользователя БД</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.charSet">UTF-8</property>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.characterEncoding">utf8</property>

Конфигурация приложения

В файле xwiki.cfg находим параметры xwiki.db и xwiki.db.prefix и меняем их вот так:
xwiki.db=mainwiki
xwiki.db.prefix=xwiki_
ВНИМАНИЕ! Параметр xwiki.db не должен содержать префикс, указанный в xwiki.db.prefix, иначе при коннекте префикс прибавится дважды и вместо красивого вэлкам скрина получим простыню стактрэйса, в котором будет "нет прав на базу префикс_префикс_имябазы".

Если вы этот раздел проигнорировали, то можно это в конфиг вписать и потом. Просто нужно помнить, что при любых изменениях конфигов, надо зоходить в консоль управления томкатом и делать рестарт приложения.

Развертывание

Копируем папку с содержимым war-пакета в /opt/bitnami/apache-tomcat/webapps. Делать это проще всего, запаковав папку зипом, перекинув один файл при помощи winscp, и распаковав уже внутри ВМ там, куда надо.
После этого:
  1. Заходим в консоль томката http://localhost:666/manager
  2. Вводим логин-пароль (по умолчанию manager:bitnami).
  3. Находим в списке (в конце будет) приложение xwiki, жмем "Start" и ждем.
Когда оно стартует, тыкаем в имя приложения и нас передрасывает непосредственнов нашу вику.

Установка и настройка xwiki

После перезапуска приложения из консоли томката (или после перезапуска самого томката) первый раз приложуха инициализируется (подождать, пока проценты до 100 доскачут).

Далее при первом запуске xwiki предлагает создать главного админа всея вики и продолжать уже под ним. Имя пользователя может быть почти любым, то есть нельзя использовать superadmin. Если попытаться, то ни чего не произойдет. Буквально ни чего - xwiki будет продолжать требовать создать пользователя. не сообщая ни каких ошибок.

Замес в том, что superadmin - это зарезервированное особое имя, о чем отдельно написано в официальном мануале. Учетка с таким именем в xwik'у встроена на уровне кода, она не хранится в базе и ее пароль задается в xwiki.cfg. По умолчанию она вообще отключена (включается через тот же xwiki.cfg). Использовать ее имеет смысл, когда пароль от созданого руками могучего админа протерян, подобно полимерам.

Далее xwiki предложит установить дефолтный набор страничек и для этого на виртуалке должен работать интернет - оно всё тянется с оффсайта xwiki. Можно отказаться, но не стоит, т.к. вместе со страничками она ставит много полезных и правильных расширений, без которых ваша xwiki будет пустая, как бубен и вы потратите овер 9000 часов, разбираясь, какие расширения ставить, а какие нет. Всё, что не понадобится, потом быстрее удалить, чем руками всё это добро ставить. Просто соглашаемся со всем, что она предлагает и жмем "install" и "Continue", не умничая и не тычя лишних кнопок. Процедура займет пару минут - не пугаемся - после нажатия на install она стягивает всё барахло вместе с зависимостями, потом ждет, когда мы нажмем кнопку континуе и только после этого инсталлит.

Вот, собственно, и весь рассказ. Чуть позже (когда поборю) опишу, как наладить LDAP-авторизацию.

Комментарии

  1. С виндой так все плохо? Решение проблемы не искали?
    Жду про LDAP-авторизацию! :)

    ОтветитьУдалить

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

Популярные сообщения из этого блога

Развёртывание xWiki на bitnami tomcat стэке под windows

Буквально только что закончил развертывание вики-движка xwiki на bitnami tomcat стэке под windows. По дороге собрал тучу граблей, перепробовал несколько java-контейнеров, в три слоя покрылся матом и даже вынужден был читать мануал на французском языке. В статье я попытался изложить свой этот опыт в надежде, что это кому-нибудь поможет, собранные мною грабли, обойти без боли.

Redmine 3, отображение поля "Проект" в форме создания задачи (patch)

Почему-то "из коробки" redmine не показывает это поле в форме создания задачи. В принципе, это не всем, наверное, и нужно, т.к. в большинстве случаев пользователь работает с одним проектом и в нем же и создает все задачи. Но мне понадобилось и вот, что из этого вышло.