Поднимаем простой DAV server на Linux

Материал из support.qbpro.ru
Версия от 19:14, 25 сентября 2025; Vix (обсуждение | вклад) (Новая страница: «В использовании у меня получилось довольно много устройств — одних только ноутбуков три штуки, а еще комп на работе и смартфон. В какой-то момент я понял, что адресную книгу вот так в разброс хранить неудобно, и календарь тоже бы хотелось вести как-то ед...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

В использовании у меня получилось довольно много устройств — одних только ноутбуков три штуки, а еще комп на работе и смартфон. В какой-то момент я понял, что адресную книгу вот так в разброс хранить неудобно, и календарь тоже бы хотелось вести как-то единообразно. Синхронизировать такое количество устройств между собой как-то очень уж неудобно получается. Вот тут и пришло время придумать, как из этого всего выпутаться. Решил я посмотреть в сторону caldav и carddav серверов. Требования для них у меня были максимально простые — учетки брать или из LDAP, или по IMAP и наличие веб-интерфейса для просмотра календаря и адресной книги.

  • Под рассмотрение попали три таких реализации:
  1. Baikal — не подошел. Не понравилось то, что нужно было вести отдельную базу учетных записей.
  2. Radicale — вещь неплохая, но вебморду к нему прикрутить не удалось, хотя на сайте сказано, что CalDavZap с ним работает. Может я не очень и старался… Да и документация на него мне как-то не понравилась. Тоже не подошел.
  3. Davical — А вот этотот заработал. При чем именно так, как мне и хотелось. Поэтому рассмотрим его установку и настройку:

Установка и настройка Davical В качестве серверного дистрибутива использовался Ubuntu ServerPack 12.04

Устанавливаем необходимый набор пакетов программ:

# apt-get install install postgresql apache2 php5 php5-pgsqll davical php5-curl php5-imap

После установки нужно сделать небольшую настройку postrgesql. Открываем /etc/postgresql/9.1/main/pg_hba.conf Комментируем строку

local all postgres peer

И добавляем две другие

local davical davical_app trust
local davical davical_dba trust

После чего перезапускаем postgresql

# service postgresql restart

Далее нужно выполнить скрипт, который создаст нужную базу данных

# su postgres -c /usr/share/davical/dba/create-database.sh

Вывод будет примерно такой:

Supported locales updated.
Updated view: dav_principal.sql applied.
CalDAV functions updated.
RRULE functions updated.
Database permissions updated.
NOTE
====
* You will need to edit the PostgreSQL pg_hba.conf to allow the
'davical_dba' database user access to the 'davical' database.
* You will need to edit the PostgreSQL pg_hba.conf to allow the
'davical_app' database user access to the 'davical' database.
* The password for the 'admin' user has been set to 'co/e9Ap3'
Thanks for trying DAViCal! Check in /usr/share/doc/davical/examples/ for
some configuration examples. For help, visit #davical on irc.oftc.net.
  • Смотрим на него внимательно. Там будет админский логин и пароль в веб-и нтерфейс davical
  • Создадим файл конфигурации /etc/davical/config.php
<?php
$c->authenticate_hook['call'] = 'IMAP_PAM_check';
$c->authenticate_hook['config'] = array(
'imap_url' => '{davical.local:993/imap/tls/novalidate-cert}',
);
include('/usr/share/davical/inc/drivers_imap_pam.php');
$c->domain_name = 'davical.local';
$c->sysaddr = 'davical';
$c->system_name = 'DAViCal CalDAV Server';
$c->admin_email = 'admin@davical.local';
$c->pg_connect[] = 'dbname=davical user=davical_app';
$c->default_locale = «uk_UA»;
$c->use_old_sync_response_tag = true;
?>
  • Обратите внимание, на строку imap_url. Судя по их вики davical.dhits.nl тут предусматривается несколько возможных вариантов:
{localhost:143/imap/}
{localhost:143/imap/tls/}
{example.com:993/imap/ssl/}
{example.com:143/imap/tls/novalidate-cert}
  • Так вот — все это работает (по крайней мере у меня) только в том случае, если в конце строки НЕ СТАВИТЬ “/”

В общем каждый прописывает эту строку с теми параметрами, с которыми ему нужно.

  • Сам сервер уже настроен, но пока у нас ничего не работает. Делаем веб-интерфейсы.

CalDavZap — установка и настройка. Скачиваем архив программы со страницы http://www.inf-it.com/open-source/clients/caldavzap/ И распаковываем его в /var/www Открываем его файл конфигурации и правим в нем строку globalNetworkCheckSettings

var globalNetworkCheckSettings={href: 'http://davical.local/caldav.php/', hrefLabel: null, additionalResources: [], 
forceReadOnly: null, showHeader: true, settingsAccount: true, timeOut: 30000, lockTimeOut: 10000, delegation: false, 
backgroundCalendars: [], ignoreAlarms: false}

Теперь нужно настроить авторизацию в CalDavZap Для этого делаем следующие настройки: В файле auth/config.inc в двух местах в поле href нужно прописать имя нашего сервера. При чем остальную часть пути не трогать. То есть у нас должны получиться такие строки:

'href'=>'http://davical.local/caldav.php/'.$_SERVER['PHP_AUTH_USER'].'/',
'href'=>'http://davical.local/caldav.php/resource/',

Кроме этого в файле auth/plugins/generic_conf.inc меняем значение в одной строке

$pluginconfig['base_url']='http://davical.local;

Настройка Apache Осталось последнее действие — настроить веб-сервер. Создаем файл /etc/apache2/sites-available/davical и записываем в него

<VirtualHost *:80>
DocumentRoot /usr/share/davical/htdocs
DirectoryIndex index.html index.php
ServerName davical.local
Alias /images/ /usr/share/davical/htdocs/images/
Alias /cal /var/www/caldavzap/
<Directory /usr/share/davical/htdocs/>
AllowOverride None
Order allow,deny
Allow from all

php_value include_path /usr/share/awl/inc
php_value magic_quotes_gpc 0
php_value register_globals 0
php_value error_reporting «E_ALL & ~E_NOTICE»
php_value default_charset «utf-8»


  • Создаем ссылку на этот файл в /etc/apache2/sites-enabled/

И перезапускаем Apache

Сейчас у нас стали доступны два веб-интерфейса davical.local — веб-интерфейс самого Davical, где можно делать или общесистемные настройки, если есть админские права, или создавать себе дополнительные календари или адресные книги, если права обычного пользователя.