Ad-Photos-Sync — это утилита для синхронизации фотографий из Active Directory в Dion, которая представлена в виде системы скриптов на Python.
Данная инструкция была написана на примере операционной системы Ubuntu Server 22.04.4.
Способы запуска на других операционных системах могут отличаться.
Утилита включает следующий набор скриптов:
1_pull_ad_photos.py
— загружает фотографии пользователей из Active Directory во временную папку.2_upload_to_s3.py
— выгружает фотографии пользователей из временной папки в хранилище S3 Minio.3_update_avatar_paths.py
— прописывает в базе данных PostgreSQL пути к фотографиям пользователей и очищает временную папку../sync-ad-photos.sh
— запускает все три скрипта. Используется для удобства работы по расписанию в crontab.Обратите внимание: Каждая фотография в Active Directory может занимать до 100 КБ места на диске.
Таким образом, для синхронизации фотографий 100 000 пользователей может потребоваться до 10 ГБ во временной папке.
Чтобы установить Ad-Photos-Sync, выполните следующие действия:
1. Получите дистрибутив Ad-Photos-Sync у команды Dion.
2. Выберете сервер для работы синхронизатора. Например, это может быть тот же сервер, на котором установлен AD Connector.
3. Установите необходимые пререквизиты для работы скриптов:
sudo apt update
sudo apt install -y ldap-utils python3-ldap3 libpq-dev python3-pip
pip install boto3 Pillow psycopg2
4. Скопируйте скрипты в каталог /home/dion/sync-ad-photos
.
5. Создайте каталог для временного хранения фотографий:
mkdir /home/dion/ad-photos-sync
mkdir /home/dion/ad-photos-sync/photos
cd /home/dion/ad-photos-sync
6. Укажите параметры подключения к Active Directory в файле 1_pull_ad_photos.py
.
Пример:
# LDAP connection settings
ldap_server = 'dc.YourDomain.com'
ldap_port = 389
service_account_dn = 'CN=admin,CN=Users,DC=YourDomain,DC=com'
service_account_password = 'password'
base_dn = 'OU=Users,DC=YourDomain,DC=com'
photos_directory = '/home/dion/ad-photos-sync/photos'
7. Укажите параметры подключения к хранилищу S3 Minio в файле 2_upload_to_s3.py
.
Учётные данные можно найти в файле /home/dion/on_dion/inventories/dion.YourDomain.com/group_vars/all/vault.yaml
.
Пример:
# S3 MinIO connection settings
s3_endpoint = 'http://192.168.14.70:9000'
s3_access_key = 'Your_s3_access_key'
s3_secret_key = 'Your_s3_secret_key'
photos_directory = '/home/dion/ad-photos-sync/photos'
8. Укажите параметры подключения к базе данных PostgreSQL в файле 3_update_avatar_paths.py
.
Учётные данные можно найти в файле /home/dion/on_dion/inventories/dion.YourDomain.com/group_vars/all/vault.yaml
.
Если используется отказоустойчивая инфраструктура Dion, в качестве db_host
необходимо использовать виртуальный IP балансировщика (vip_infra
).
Пример:
# PostgreSQL connection settings to Dion Infra
db_host = '192.168.14.70'
db_port = 5432
db_name = 'backend'
db_user = 'postgres'
db_password = 'password'
photos_directory = '/home/dion/ad-photos-sync/photos'
9. Добавьте права на запуск файлов:
chmod +x 1_pull_ad_photos.py 2_upload_to_s3.py 3_update_avatar_paths.py sync-ad-photos.sh
Запустите поочередно скрипты и убедитесь, что они не возвращают ошибок:
./1_pull_ad_photos.py
./2_upload_to_s3.py
./3_update_avatar_paths.py
1. Запустите главный скрипт и убедитесь, что он не возвращает ошибок:
./sync-ad-photos.sh
2. Запустите конфигуратор crontab
:
crontab -e
3. Установите необходимое расписание для запуска sync-ad-photos.sh
.
В следующем примере синхронизация фотографий будет происходить ежедневно в 3 часа ночи:
0 3 * * * /home/dion/ad-photos-sync/sync-ad-photos.sh