Зачем организации может понадобиться общие календари и сервер DAViCal ?
Например:
-есть регламентные работы, которые должны проводится раз в пол-года/месяц отделом ИТ — создаем календарь отдела ИТ, заносим события, уведомления, участников
-имеется комната совещаний или переговоров? — можно сделать календарь для этой комнаты, где сотрудники будут бронировать дату и время совещаний,
— календарь обновления/закупки ПО, удобно если мы знаем когда заканчивается лицензия на ПО достаточно запланировать уведомление о ее продлении,
— календарь проведения вебинаров,
— календарь расписание занятий по обучению персонала и т.д.
Итак: есть необходимость в календаре, но что делать, если в организации не закуплен сервер MS Exchange Server или в принципе используется свободное ПО?
Выход: использовать для этих целей сервер общих календарей DAViCal. Так как в нашей организации используется проприетарное ПО и имеется домен с каталогом AD, нужно будет настроить синхронизацию сервера DAViCal с AD.
Клиентом будет выступать Thunderbird. DAViCal с ним отлично дружит.
Имеем виртуальную машину с Ubuntu Server 14.04 введенную в домен.
Устанавливаем необходимые пакеты:
apt-get install postgresql apache2 php5 php5-pgsql davical php5-curl php5-imap
У меня установилась версия DAViCal 1.1.1 , PostgreSQL 9.3
Настраиваем Postgresql:
Открываем /etc/postgresql/9.1/main/pg_hba.conf
Комментируем строку
local all postgres peer
И добавляем две другие (лучше в начале файла)
local davical davical_app trust local davical davical_dba trust
Для доступа к базе PostgreSQL из pgadmin: nano /etc/postgresql/9.3/main/postgresql.conf
#listen_addresses = 'localhost' меняем на listen_addresses = '*'
После чего перезапускаем postgresql
service postgresql restart
Так как установилась версия PostgreSQL > 9.1 (у меня 9.3), то для корректной отработки скрипта по созданию баз данных DAViCal, нам потребуется отредактировать файлы: /usr/share/davical/dba/
-better_perms.sql -caldav_functions.sql -davical.sql -rrule_functions.sql
/usr/share/davical/dba/patches:
1.2.6.sql 1.2.7.sql
В этих файлах нужно заменить все «PlPgSQL» на «plpgsql » и «SQL» на «sql» (на прописные буквы). Можете скачать если не хочется править :)) davical postgres
Теперь можно запустить скрипт, который создаст необходимые базы для DAViCal:
postgres -c /usr/share/davical/dba/create-database.sh
В конце работы скрипта будет указан логин и пароль — записываем!
Если базу не удалось создать с первого раза, то перед повторной попыткой удаляем неудачный результат:
postgres -c "dropdb davical"
Создаем конфигурационный файл DAViCal:
nano /etc/davical/config.php
такого содержания:
<?php $c->default_locale = 'ru_RU'; //руссифицируем //$c->readonly_webdav_collections = false; // если false , то можно редактировать коллекции. $c->pg_connect[] = 'dbname=davical port=5432 user=davical_app'; $c->do_not_sync_from_ldap = array('admin' => true); $c->authenticate_hook['call'] = 'LDAP_check'; $c->authenticate_hook['config'] = array( 'host' => 'ldap://192.168.0.1', // здесь указываем контроллер домена 'bindDN' => 'glpi2@test.local', //пользователь через которого будем получать данные от AD 'passDN' => 'password', 'baseDNUsers' => 'dc=TEST,dc=local', 'protocolVersion' => '3', 'optReferrals' => '0', 'filterUsers' => '(&(objectclass=user)(mail=*)(userPrincipalName=*@test.ru)(!(userAccountControl=514)))', //фильтр, так выводит только активные уч. записи у которых есть почтовый ящик. 'mapping_field' => array('username' => 'sAMAccountName', // 'modified' => 'modifyTimestamp', //работает в версии 1.1.3 и выше 'modified' => 'whenChanged', 'fullname' => 'cn' , 'email' => 'mail'), 'default_value' => array( 'date_format_type' => 'E', 'locale' => 'ru_RU'), 'format_updated' => array( 'Y' => array(0,4), 'm' => array(4,2), 'd' => array(6,2), 'H' => array(8,2), 'M' => array(10,2), 'S' => array(12,2)) ); include('drivers_ldap.php'); ?>
Более подробно можно посмотреть на wiki DAViCal
Здесь, конечно, можно и ограничиться — останется только настроить веб сервер Apache, но я предлагаю установить еще и веб интерфейс календаря для подключения к календарю без настройки ThunderBird или при его отсутствии.
Устанавливать будем CalDavZap
Качаем:
wget http://www.inf-it.com/CalDavZAP_0.13.1.zip
И распаковываем его в /var/www
Правим файл /var/www/caldavzap/config.js
var globalNetworkCheckSettings={ href: 'http://192.168.0.207/caldav.php/', hrefLabel: null, additionalResources: ['public'], //параметр, который позволяет отображать календари, которые при создании в DaviCAL мы определили как публичные (public) forceReadOnly: null, showHeader: true, settingsAccount: true, timeOut: 90000, lockTimeOut: 10000, delegation: true, backgroundCalendars: [], ignoreAlarms: false Ниже перечислены переменные которые - активны не "закоменчены" в моем конфиге var globalBackgroundSync=true; var globalSyncResourcesInterval=120000; var globalEnableRefresh=false; var globalEnableKbNavigation=true; var globalInterfaceLanguage='ru_RU'; var globalInterfaceCustomLanguages=[]; var globalSortAlphabet="абракадабра какая то - оставил - не вникал" :)) var globalSearchTransformAlphabet="абракадабра какая то - оставил - не вникал" :)) var globalResourceAlphabetSorting=true; var globalNewVersionNotifyUsers=[]; var globalDatepickerFirstDayOfWeek=1; var globalHideInfoMessageAfter=1800; var globalEditorFadeAnimation=666; var globalEventStartPastLimit=3; var globalEventStartFutureLimit=3; var globalTodoPastLimit=1; var globalLoadedCalendarCollections=[]; var globalLoadedTodoCollections=[]; var globalActiveCalendarCollections=[]; var globalActiveTodoCollections=[]; var globalActiveView='multiWeek'; var globalOpenFormMode='double'; var globalTodoListFilterSelected=['filterAction', 'filterProgress']; var globalCalendarStartOfBusiness=8; var globalCalendarEndOfBusiness=17; var globalDefaultEventDuration=120; var globalDisplayHiddenEvents=false; var globalTimeZoneSupport=false; var globalTimeZone='Europe/Moscow'; var globalTimeZonesEnabled=['Europe/Moscow']; var globalRewriteTimezoneComponent=true; var globalRemoveUnknownTimezone=false; var globalShowHiddenAlarms=false; var globalIgnoreCompletedOrCancelledAlarms=true; var globalMozillaSupport=false; var globalWeekendDays=[0, 6]; var globalAppleRemindersMode=true;
Сам файл неплохо документирован, а вот здесь есть еще описание настроек.
Далее файле /var/www/caldavzap/auth/config.inc добавляем имя своего сервера DAViCal (айпишник)
....... resource'=>array( 'type'=>array('calendar'=>''), 'href'=>(empty($_SERVER['HTTPS']) ? 'http' : 'https').'://192.168.0.207:80/caldav.php/'.$_SERVER['PHP_AUTH_USER'].'/', 'hreflabel'=>'null', // if undefined or empty href value is used (see above) ....... // additional accounts $config['accounts']['resources'][]=array( 'resource'=>array( 'type'=>array('calendar'=>''), 'href'=>'http://192.168.0.207:80/caldav.php/resource/', ........
В /var/www/caldavzap/auth/plugins/generic_conf.inc :
$pluginconfig['base_url']=(empty($_SERVER['HTTPS']) ? 'http' : 'https').'://192.168.0.207:8080';
Теперь настроим веб сервер Apache, я просто изменил /etc/apache2/sites-enabled/000-default.conf до такого вида:
<VirtualHost *:80> DocumentRoot /usr/share/davical/htdocs DirectoryIndex index.php index.html 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 </Directory> php_value include_path /usr/share/awl/inc php_flag magic_quotes_gpc off php_flag register_globals off php_value error_reporting "E_ALL & ~E_NOTICE" php_value default_charset "utf-8" </VirtualHost>
Перезапускаем:
service apache2 restart
Теперь нам доступны
- админка DAViCal , в моем случае по адресу: http://192.168.0.207 для первого входа нужно ввести логин admin и тот пароль, который вы конечно записали :), сгенерированный при создании баз данных Postgesql для DAViCal
- по адресу http://192.168.0.207/cal доступен веб интерфейс календаря.