Авторы: Altynbek Isabekov, Eric Fernandez (20.06.2013)
Перевод (с дополнениями) Иван Чадин (11.10.2014)
Данное руководство посвящено процессу установки сервера данных Zotero на ЭВМ, работающей под управлением Debian Wheezy (7.0RC1)
Создайте каталог для установки Zotero Data Server и перейдите в него
$ mkdir /srv/http $ cd /srv/http/
Загрузите исходный код Zotero Data Server из репозитория github:
$ sudo git clone —recursive https://github.com/Panzerkampfwagen/dataserver.git
Переименуйте каталог (важно! наименование каталога используется в исходном коде)
$ sudo mv dataserver ZoteroDataServer
Загрузите php-фреймворк Zend
$ sudo wget -vc "http://framework.zend.com/releases/ZendFramework -1.12.3/ZendFramework-1.12.3.tar.gz"
Распакуйте часть архива php-фреймворка Zend (ZendFramework-1.12.2/library/Zend) в каталог «include» (/srv/http/ZoteroDataServer/include/Zend
):
$ sudo tar -xvf ZendFramework-1.12.3.tar.gz --strip=3 -C "/srv/http/ZoteroDataServer/include/Zend" "ZendFramework-1.12.3/library/Zend"
Установите сервер Apache и PHP
$ sudo aptitude install apache2 php5
Создайте виртуальный хост для сервера данных Zotero. Для этого добавьте следующие строки в конфигурационный файл /etc/apache2/sites-available/default
. Каталогом для сервера данных служит /srv/http/ZoteroDataServer/
.
NameVirtualHost *:85 <VirtualHost *:85> ServerName *:85 DocumentRoot "/srv/http/ZoteroDataServer/htdocs" ErrorLog "${APACHE_LOG_DIR}/Zotero-Data-Server-Error.log" CustomLog "${APACHE_LOG_DIR}/Zotero-Data-Server-Access.log" common <Directory "/srv/http/ZoteroDataServer/htdocs"> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> AllowEncodedSlashes On </VirtualHost>
Сделайте доступными следующие модули:
$ sudo a2enmod rewrite $ sudo a2enmod vhost_alias
Включите в Apache прослушивание порта 85, который указывает на виртуальный хост Zotero, путем добавления слующих строк в файл /etc/apache2/ports.conf
:
NameVirtualHost *:85 Listen 85
Запустите Apache и убедитесь, что он успешно запускается:
$ sudo service apache2 start
Установите MySQL:
$ sudo aptitude install php5-mysql mysql-server
Сервер данных Zotero настроен на использование пароля 'SecurePassword' в качестве пароля пользователя root. Для того, чтобы установить этот пароль остановите демон MySQL, если он запущен:
$ sudo service mysql stop
Перезапустите MySQL с пропуском системы атентификации:
$ sudo mysqld_safe --skip-grant-tables &
Запустите консольный клиент mysql
$ sudo mysql -u root mysql
Поменяйте root пароль:
mysql> UPDATE mysql.user SET Password=PASSWORD('SecurePassword') WHERE User='root'; mysql> FLUSH PRIVILEGES; mysql> EXIT
Скрипты, которые создают базу данных Zotero нуждаются информации о логине и пароле. Скрипт получает эту информацию из файла /etc/mysql/my.cnf
. Внесите следующие изменения в этот файл:
[client] user=root password=SecurePassword
Измените часовой пояс MySQL на UTC путем внесения измений файл /etc/mysql/my.cnf:
[mysqld] ... default-time-zone = '+0:00'
Установите phpMyAdmin, удобный инструмент для администрирования MySQL с использованием веб-интерфейса:
$ sudo aptitude install phpmyadmin
Перезапустите Apache:
$ sudo service apache2 restart
Основные настройки хранятся в файле: ZoteroDataServer/include/config/config.inc.php
... public static $SYNC_DOMAIN = '127.0.0.1:85'; ... public static $CLI_PHP_PATH = '/usr/bin/php'; public static $CLI_DOCUMENT_ROOT = "/srv/http/ZoteroDataServer/"; ...
Адрес сервера Zotero предустановлен локальный (127.0.0.1:85), таким образом он не принимает соединения с других IP адресов. Но на этом этапе нашей задачей является добиться работоспособности сервера на локальном хосте. Позднее, когда сервер начнет работать корректно, необходимо будет поменять локальный IP адрес на IP адрес ЭВМ вашей локальной сети, чтобы сделать сервер Zotero доступным для синхронизации с любой ЭВМ, подключенной к вашей локальной сети.
Если вы решите изменить корневой каталог сервера данных, изменив значение переменной $CLI_DOCUMENT_ROOT
не забудьте добавить завершающий слэш «/» в конце пути к каталогу.
Взаимодейстие с MySQL сервер производит используя сведения о root пароле, который хранится в файле ZoteroDataServer/include/config/config.inc.php
. Вы можете изменить пароль по умолчанию («SecurePassword»), редактируя этот файл.
Запустите MySQL. Запустите Apache. Убедитесь, что оба сервера запустились без ошибок.
$ sudo service mysql start $ sudo service apche2 start
Установите систему кэширования памяти «memcached», которая позволит повысить быстродействие и отказоустойчивость веб-сервисов, запущенных на ЭВМ:
$ sudo aptitude install memcached
Перейдите в каталог /srv/http/ZoteroDataServer/misc
$ cd /srv/http/ZoteroDataServer/misc
Запустите скрипт test_reset
, который удалит все сущеествующие базы данных Zotero data server и создаст новые базы данных с нуля.
$ sudo ./test_reset Deleting databases Creating databases Deleting users Creating users Updating user privileges Filling databases with default fields Reset is successfull. Now run ./test_setup
Вы должны увидеть сообщение «Reset is successfull. Now run ./test_setup»
. Сейчас вы можете запустить скрипт test_setup,
который добавит некоторые записи в базу данных zoterotest1
:
$ sudo ./test_setup
Если вы увидете сообщение «Test setup is successfull.»,
то это означает что необходимые записи были добавлены в базу данных.
Измените права доступа к каталогу tmp Zotero data server:
$ sudo chmod 777 /srv/http/ZoteroDataServer/tmp
Теперь можно открыть три терминала и запустить демоны, управляющие загрузкой, скачиванием и отслеживанием ошибок процесса синхронизации:
В первом терминале:
$ cd /srv/http/ZoteroDataServer/processor/upload/ $ php daemon.php
Во втором терминале:
$ cd /srv/http/ZoteroDataServer/processor/download/ $ php daemon.php
В третьем терминале:
$ cd /srv/http/ZoteroDataServer/processor/error/ $ php daemon.php
Проверьте, что каждый из демонов запустился успешно (в данном случае, демон «download»):
2013-06-20 11:16:48.5637 Starting download processor daemon 2013-06-20 11:16:48.5754 0 processors, 0 queued processes
В случае возникновения ошибки, демоны остановятся и Zotero data server будет недоступен для синхронизции до тех пор, пока демоны не будут перезапущенны вручную. В частности, демоны закрузки и скачивания аварийно завершат работу если период ожидания доступа к базам данных MySQL превысит лимит 8 часов, установленный по умолчанию настройках MySQL. Чтобы предотвратить это, можно изменить параметр wait_timeout
в файле /etc/mysql/my.cnf
на максимальное значение — 1 год (31536000 seconds):
[mysqld] ... wait_timeout = 31536000
Альтернативным (и более надежным) решением является установка пакета «daemontools»:
$ sudo aptitude install daemontools
Затем в каждом из каталогов запустите утилиту supervise
:
В первом терминале:
$ cd /srv/http/ZoteroDataServer/processor/upload/ $ sudo supervise .
В втором терминале:
$ cd /srv/http/ZoteroDataServer/processor/download/ $ sudo supervise .
В третьем терминале:
$ cd /srv/http/ZoteroDataServer/processor/error/ $ sudo supervise .
Программа supervise
будет автоматически запускать файл ./run
в каждой из директорий и перезапускать его в случае аварийного завершения.
Установите утилиту curl:
$ sudo aptitude install curl
Для проверки аутентификации на сервере, отправьте на него следующий запрос:
$ curl -X POST -d "version=9&username=testuser&password=testuser" http://127.0.0.1:85/login
Этот запрос должен вернуть ответ, похожий на этот:
<?xml version="1.0"?> <response version="9" timestamp="1341134959"> <sessionID> da802280ce0bfc2e90cb1ad0747ff642 </sessionID> </response>
Теперь, используя идентификатор сессии «sessionID»
вы можете отправить запрос «updated»
:
$ curl -X POST -d "version=9&sessionid=da802280ce0bfc2e90cb1ad0747ff642&lastsync=1" http://127.0.0.1:85/updated
ответ будет примерно таким:
<?xml version="1.0"?> <response version="9" timestamp="1341135305" userID="1" defaultLibraryID="1" updateKey="43d4eaa497ab8cbfc8f4d201d955fd70" earliest="1341131740"> <updated/> </response> $ cadaver http://127.0.0.1/zotero Authentication required for WebDAV on server `127.0.0.1': Username: testuser Password: dav:/zotero/> ls Listing collection `/zotero/': succeeded. 3QBQSD38.prop 117 Aug 12 13:21 3QBQSD38.zip 465149 Aug 12 13:21 5BA5I3IP.prop 117 Aug 12 13:21 5BA5I3IP.zip 809 Aug 12 13:21 8IF963XB.prop 117 Aug 12 13:21 8IF963XB.zip 860702 Aug 12 13:21 lastsync 1 Aug 12 13:21 dav:/zotero/>
Для того, чтобы получить возможность загружать на сервер и скачивать оттуда файлы, приложенные пользователями к библиографическим описаниям необходимо обеспечить клиент Zotero доступом к серверу WebDAV. Для того, чтобы запустить свой WebDAV сервер сделайте доступными серверу Apache следующие модули:
$ sudo a2enmod auth_digest $ sudo a2enmod dav $ sudo a2enmod dav_fs $ sudo a2enmod dav_lock
Теперь создайте WebDAV lock каталог и файл:
$ sudo mkdir /srv/http/DAVLock $ sudo chmod -R 777 /srv/http/DAVLock $ sudo chown -R www-data:www-data /srv/http/DAVLock
Создайте каталог для хранения файлов-приложений Zotero:
$ sudo mkdir /srv/http/zotero $ sudo chown -R www-data:www-data /srv/http/zotero $ sudo chmod -R 777 /srv/http/zotero
Добавьте следующую строку в конфигурационный файл: /etc/apache2/sites-available/default:
DavLockDB /srv/http/DAVLock/DAVLockDB
Поместите следущие строки в файл /etc/apache2/sites-available/default ниже раздела <VirtualHost *:80>
DocumentRoot /srv/http <Directory "/srv/http/zotero"> Dav On Order Allow,Deny Allow from all AllowOverride None AuthType Digest AuthName "WebDAV" AuthUserFile "/var/www/.DAVlogin" AuthDigestProvider file Require user "testuser" </Directory>
Теперь необходимо создать MD5 хэш для пользователя «testuser», выбрав какой либо пароль, и сохранить его в файле /etc/httpd/conf/extra/AuthWebDAV.passwd :
$ sudo htdigest -c /etc/httpd/conf/extra/AuthWebDAV.passwd WebDAV testuser Adding password for testuser in realm WebDAV. New password: Re-type new password:
Перезапустите сервер Apache:
$ sudo service apache2 restart
Для того, чтобы протестировать ваш WebDAV сервер установите пакет «cadaver»
:
$ sudo aptitude install cadaver
Теперь подключитесь к вашему WebDAV серверу:
$ cadaver http://127.0.0.1/zotero Authentication required for WebDAV on server `127.0.0.1': Username: testuser Password: dav:/zotero/> mkcol SomeCollection Creating `SomeCollection': succeeded. dav:/zotero/>
В каталоге ZoteroDataServer/misc/
находится несколько версий клиента Zotero (только в форме дополенений к браузеру Firefox), с «заплатками», позволяющими указать произвольный адрес сервера Zotero Data Server.
«Пропатчить» свежую версию клиента Zotero можно с помощью утилиты patch и файла patch_4.0.20.2.txt:
unzip zotero-4.0.20.2.xpi -d ./zotero-4.0.20.2-patched cd zotero-4.0.20.2-patched patch -p1 < ../patch_4.0.20.2.txt zip -rq ../zotero-4.0.20.2-patched.xpi *
Рекомендуется установить версию браузера Firefox», не требующую инсталляции в системе — Firefox Portable (http://portableapps.com/apps/internet/firefox_portable) и уже в нем установите «проопатченную» версию дополнения Zotero. Введите на странице «Синхронизация» адрес вашего сервера и порта (например: http://172.19.1.1:85), имя пользователя и пароль (по умолчанию: testuser/testuser).