Решение обёрнуто в docker compose:
-
контейнеры:
- baikal - CARDDAV сервер Baikal
- baikal-mysql - внешняя БД MariaDB.
- carddav-sync - контейнер с Pytnon3, который производит загрузку контактов из LDAP
Основой служит Open Source продукт, CardDAV/CalDAV сервер Baikal
Контейнер carddav-sync
- скрипт на Python периодически проверяющий LDAP, создает новые УЗ в БД. Создаёт и удаляет контакты из CARDDAV Server.
-
Создайте структуру папок, запустив скрипт
preparing_for_installation.sh
:- /opt/baikal
- /opt/baikal/apache
- /opt/baikal/ssl
- /opt/baikal/carddav-sync
- /opt/baikal/db
- /opt/baikal/config
- /opt/baikal/Specific
- /opt/baikal
-
Создайте файл и настройте своё окружение в файле .env:
LDAP_CARDDAV_LDAP_URI
- URI LDAP (например, Active Directory) (должен быть доступен изнутри контейнера). URI указаны в синтаксисеprotocol://host:port
. Например,ldap://localhost
илиldaps://secure.domain.org
LDAP_CARDDAV_LDAP_BASE_DN
- base DN, здесь основной поиск пользователей для LDAP авторизации, например"OU=Users,DC=contoso,DC=ru"
LDAP_CARDDAV_LDAP_BASE_DN_EXT
- расширяет поиск base DN, задаётся в формате строки с разделителем;
если не одно OU, например"OU=GPH,DC=contoso,DC=ru;OU=Services,DC=contoso,DC=ru"
LDAP_CARDDAV_LDAP_BIND_DN
- bind DN специальной учетной записи LDAP, которая будет использоваться для поиска пользователейLDAP_CARDDAV_LDAP_BIND_DN_PASSWORD
- пароль для учетной записи bind DNLDAP_CARDDAV_SYNC_INTERVAL
- интервал в секундах между синхронизациями LDAP- Опционально LDAP фильтрация:
LDAP_CARDDAV_LDAP_FILTER
- Применяемый фильтр LDAP по умолчанию равен(&(objectClass=user)(objectCategory=person))
BAIKAL_ADDRESSBOOK_URL
- базовый адрес carddav, напримерhttp://172.16.130.68:8888/dav.php
BAIKAL_SERVERNAME
- внешнее имя сервера, например "dav.exite.ru"MYSQL_ROOT_PASSWORD
- пароль рута для БДMYSQL_DATABASE
- имя БДMYSQL_USER
- имя пользователя для БДMYSQL_PASSWORD
- пароль пользователя для БД
-
Установка:
source .env; docker compose up -d
-
Установите Baikal, пройдя по ссылке указанной в
BAIKAL_ADDRESSBOOK_URL
с окончанием /admin/. В качестве базы данных укажите на контейнер БДbaikal-mysql
и переменные из окруженияMYSQL_DATABASE, MYSQL_USER ,MYSQL_PASSWORD
-
После успешной настройки Baikal, перезапустите контейнер
carddav-sync
(docker compose restart carddav-sync
) -
Проверьте логи
docker compose logs carddav-sync
-
Скрипт в контейнере carddav-sync работает while True, с периодичность указанной в .env. При необходимости можно перезапустить контейнер
docker compose restart carddav-sync