Корпоративный календарь на сервере DAViCal

Зачем организации может понадобиться общие календари и сервер 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 davical
Для доступа к базе 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 доступен веб интерфейс календаря.

 

Vladimir

Добавить комментарий