Создание собственной облачной синхронизации контактов Андроид
В этой статье будет рассказано, как сделать свое собственное облако для синхронизации контактов и календаря для андроида. Зачем это нужно? Хотя бы для того, чтобы не зависеть от Google, ведь неизвестно (особенно в свете раскрытий действий крупных корпораций), как используются данные, которые мы сами предоставляем компаниям, а также неприятно, если вас взломают и у злоумышленников окажутся все данные.
Итак, в результате всех действий мы получим синхронизацию контактов между нашим облаком и устройствами на Андроид. Для этого нам понадобиться компьютер, который находится у вас дома (можно использовать и выделенный сервер где-нибудь на хостинге, но для простоты рассматриваем вариант с компьютером дома), домашняя W-Fi сеть и набор программ из сервера Wamp и CalDAV сервера Baikal.
Сначала скачиваем и устанавливаем Wamp сервер (в зависимости от разрядности вашей ОС), установка проста-соглашаемся с лицензионным соглашением, а затем Далее несколько раз. По умолчанию он ставится на диск С в папку wamp для 32 разрядных ОС или wamp64 для 64 разрядных.
Далее нужно запустить Wamp сервер, чтобы проверить, что он работает, иконкой на рабочем столе. Если все нормально, появится иконка в трее и она будет зеленого цвета. При этом во время запуска сервера Apache может появиться окно с запросом разрешения доступа от Брандмауера Windows, в нем нужно разрешить доступ. При установке на Windows 7 32 разрядную, у нас возникла ошибка при запуске Apache, он сообщал об ошибке vcruntime140.dll. Если вдруг у вас возникнет такая же, нужно просто установить Microsoft Visual C++ Runtime 2015. Если иконка так и не становится зеленой и пишется, что запущен только один сервис – mysql, а не apache, нужно нажать по иконке Wamp в трее, выбрать Apache-Service Administration—nstall Service, появится консольное окно, где будет написано, что порт 80 свободен и предложено нажать Enter для установки сервиса. И после этого надо снова запустить Wamp иконкой с рабочего стола и иконка в трее должна стать зеленой:
Затем нужно в том же меню в разделе PHP-Version выставить версию PHP 7 вместо 5.6. На этом первый этап закончен.
Скачиваем сервер Байкал 0.4.6, это обычный архив, в котором находится папка Baikal. Ее нужно скопировать в папку C:\wamp\www или C:\wamp64\www (смотря какой разрядности ОС) чтобы в итоге получилось так:
После этого можно приступать к настройке Байкала. Сначала нужно узнать ip адрес своего компьютера, нажимаем правой кнопкой мыши по значку мониторчика в трее и заходим в Центр управления сетями и общим доступом, далее жмем слева ссылку Управление параметрами адаптера, далее нажимаем 2 раза мышью на подключение по локальной сети (или по беспроводной, если компьютер подключен через нее) и в открывшемся окошке кнопку Сведения и видим что-то похожее на:
Запоминаем или записываем себе этот адрес, он нам пригодится.
Создадим базу данных, которую будет использовать Baikal, для этого в меню Wamp в трее выбираем пункт phpmyadmin, откроется браузер с запросом логина и пароля, вводим root без пароля и жмем ОК, откроется окно:
В нем заходим в раздел Учетные записи пользователей и жмем ссылку Добавить учетную запись пользователя
Сочиняем пользователя (в примере baikal) и пароль (в примере baikal1, но лучше задать посложнее) и вводим их в окно, также ставим галку о создании базы данных с таким же именем как у пользователя и предоставлении на нее привилегий затем внизу жмем кнопку Вперед:
База данных создана, выбираем ее слева в списке баз данных, заходим в раздел операции и внизу ставим сравнение utf8_unicode_ci и жмем кнопку Вперед:
Дальше открываем любой браузер и пишем в адресной строке http://ваш_ip_адрес/baikal/html/ и нажимаем на enter. Должно открыться такое окошко, в котором надо заполнить часовую зону и сочинить админский пароль именно от Байкала:
Жмем Save changes и переходим на следующую страницу, где надо поставить галку Use MySQLи заполнить поля:
Если все введено корректно, дальше появится такое окно в котором надо нажать зеленую кнопку:
Вводим данные от администрирования байкала:
И попадаем в админку Байкала:
Заходим во вкладку Users and resources, жмем кнопку Add user, откроется окно, в котором надо заполнить все данные о создаваемом пользователе:
И будет создан наш пользователь, данные которого мы будем использовать при подключении аккаунта в Андроид. Для него уже создана Адресная книга по умолчанию и Календарь по умолчанию.
Теперь добавим новый аккаунт в Андроид устройство, для этого надо установить программу DAVdroid, затем запустить ее, нажать красный + внизу, выбрать вход через URL и имя пользователя, ввести в полу Base URL: http://ip_адрес_компьютера/baikal/html/dav.php/ в поле имя пользователя-соответственно имя пользователя, созданного в предыдущем шаге и его пароль. Будет добавлен аккаунт, можно нажать на значок синхронизации и она будет произведена, пока правда контактов на сервере нет. Также в настройках (значок шестеренки) можно поставить галку Sync over WIFi only и задать имя своей домашней WiFi сети, ведь все равно синхронизация без особых настроек будет работать только в ней. Также чуть ниже в разделе CarDAV нужно задать параметр Groups are per-contact categories. На этом настройка Андроида закончена, нужно перенести контакты.
Теперь настало время перенести наши контакты из учетной записи Google в Байкал. Для этого есть 2 варианта-можно или экспортировать их через стандартную звонилку андроид на карту памяти, а затем импортировать в учетную запись байкала или использовать стороннюю программу, например emClient. Рассмотрим 2й метод.
Итак, ставим emClient, добавляем учетную запись Google (Меню-Инструменты-Учетные записи нажать на +), выбрать Контакты-Google контакты, ввести свои данные. Произойдет синхронизация контактов с учеткой Google, они добавятся в меню слева. Затем, точно также добавляем учетную запись нашего сервера Байкал, выбрав вместо Google contacts – CardDAV, вводим точно также адрес нашего сервера, пользователя и пароль и видим слева в меню появившуюся учетную запись Байкала (она выглядит как Имя пользователя-Addressbooks-Default address book, название адресной книги можно поменять в настройках админки Байкала). Вот как это выглядит (желтым отмечен аккаунт Байкала, он переименован из baikal в contact190):
А затем все очень просто-перетаскиваем мышкой контакты из учетки Gmail в адресную книгу Байкала и они синхронизируются с нашим сервером, перетаскивается и вся информация связанная с контактом, единственное фотографии перетаскиваются с плохим качеством, их нужно перезагружать по хорошему.
После того как все заработает, можно немного настроить все это под себя, поменять название адресных книг, выставить категории контактам (это тоже удобно делать в emClient):
Спасибо за внимание и если Вам понадобится компьютерная помощь/обслуживание компьютеров (я конечно понимаю, что такую статью, скорее всего, будут читать те, кто сам что хочешь сделает с компом, но все же, а вдруг), обращайтесь, для форумчан сделаю скидку.
Источник
Полноценная синхронизация фото/видео файлов между android и своим сервером в 2016 году
Решил я наконец-то сделать себе «персональное облако». На телефоне мне внезапно стало катастрофически не хватать места, т.к. из 30 ГБ половину уже стали занимать фото/видео. Поэтому подумал что надо их куда-то перенести и сохранить, лишнее на телефоне удалить.
Ок. Потратил несколько часов на сбор всех фото-видео файлов в отдельные директории и переименование по шаблону с датой создания в имени файла.
Поставил на домашний сервер seafile. Тут выясняется что android клиент у него — это не полноценный клиент, не может сам отслеживать изменения, надо вручную отсылать и забирать их. Дальше внезапно выясняется что он ещё и не отправляет дату создания/модификации файла.
Это может и не так критично для фото, т.к. есть exif, но для видео файлов важно. Т.е. если я выгружу файлы, удалю их на телефоне, и при необходимости заберу обратно, как минимум стандартная галерея мне их неправильно рассортирует. Ну и вообще, неправильно это.
Начал искать дальше. Выясняется, что та же ситуация с owncloud.
Решил глянуть что по этой проблеме с проприетарщиной. Быстрый поиск по dropbox выдал тему, где человек пишет о той же проблеме.
Кто-нибудь знает какое-то рабочее решение? Хочу синхронизацию фоток/видео на свой сервер без потери даты создания.
В owncloud (nextcloud) есть возможность автоматической загрузки фото и видео.
Кто-нибудь знает какое-то рабочее решение?
Я для себя реализовал так.
Коммуникатор синкается с домашним сервером по btsync. Ибо это сегодня самый безглючный и лёгкий клиент под Android среди подобных систем. Отслеживаются изменения в две стороны, дата сохраняется. Единственный минус — нет версионности никакой.
Вот тут вступает в игру второй эшелон. Домашний сервер синкает всю фотоколлекцию с домашним бэкап-сервером и внешним сервером через syncthing. Также, через syncthing ещё синкаются каталоги последнего года и «входящий несортированный» (DCIM) с рабочими машинами (домашней и на работе) и ноутом. Синкается с версионным бэкапом на каждой машине.
Т.е. делаю я фотку на коммуникаторе, она тут же падает на домашний сервер в Collection/Unsorted/DCIM. Потом, если нужно, на любой из машин, где сижу, привожу в порядок, изменения синхронизируются по всей моей инфраструктуре.
это не полноценный клиент, не может сам отслеживать изменения, надо вручную отсылать и забирать их. Хочу синхронизацию фоток
Так фотки/видео он как раз и умеет синхронизировать.
А дата сохраняется там? В seafile тоже есть такая опция, но меня это не устроило. Моя камера не позволяет задать шаблон имени файла, поэтому я для этого использую отдельное приложение, которое переименовывает всё как надо. И потом хотел уже делать выгрузку вручную.
Я хочу именно на свой сервер.
Ок, надо глянуть на btsync. Но у меня исходная задача была ещё и высвободить место. Т.е. я выгружаю особо тяжелые файлы и удаляю на телефоне, если нужно — загружаю обратно. Тот факт что seafile и ownlcoud (судя по всему) не являются полноценными клиентами, мог позволить мне выгрузить файл, затем удалить его без отправки удаления на сервер.
В btsync я так понимаю если удалю файл на android, он везде удалится?
UPD А, понял, т.е. у тебя на телефоне всегда только unsorted коллекция, а полный вариант лишь на сервере?
Проблема в том, что он дату не сохраняет.
Почему просто не использовать sshfs? Тот же solid explorer прекрасно справляется с этим.
Ещё не понял, зачем в такой схеме нужен syncthing, для версионности?
Копировать и удалять, да и синхронизировать с андроидом вручную же придется.
Посмотрите в сторону приложения для андроидов foldersync.
Ftp, scp, облака — вариантов у программа тьма. И шедулинг есть разумеется.
В btsync я так понимаю если удалю файл на android, он везде удалится?
Да. Но останется в версионном бэкапе («корзине», если будет включена соответствующая настройка).
UPD А, понял, т.е. у тебя на телефоне всегда только unsorted коллекция, а полный вариант лишь на сервере?
И так, и эдак. В DCIM/OpenCamera — свежие несортированные фотки. Но есть и сортированные отобранные — синхронизируется тем же btsync, но с другим подкаталогом на сервере. Т.е. я часто привожу в порядок фотки на сервере, коллекция на коммуникаторе приходит в тот вид, какой задаю на сервере же.
Ещё не понял, зачем в такой схеме нужен syncthing, для версионности?
Да. Другого инструмента для синхронизации с версионностью я пока не нашёл. btsync умеет только сохранять удалённый файл.
Дата должна быть в имени файла, у меня смарт так по дефолту снимает. Тогда никаких заморочек с сортировкой. Есть скрипты, переименовывающие так по exif.
Дата в имени это же больше подсказка для человека. Тут ведь не только сортировка, но и группировка. С фотками ещё более менее всё хорошо, т.к. exif. Скажем, надо посмотреть все видео за 2016 год. Не знаю, есть ли галереи, парсящие дату из имени файла, да и если есть — это ненадёжно. Но точно есть которые могут группировать по дате создания файла.
+1 к FolderSync. Я его использую совместно с ownCloud. Потому что родной клиент — говно (по крайней мере, раньше было так).
Решение закрытое и платное, если ничто другое не устроит надо будет попробовать.
Ок, посмотрел я на syncthing, поставил, потестировал. Судя по всему — мне подходит. Сделал 3 директории: Images, Video, Unsorted Media. Unsorted Media замапил на директорию куда камера сохраняет фото/видео. Для всех директорий отключил версионность на андроиде и включил на сервере.
Для Images и Video на сервере задал опцию ignoreDelete : https://docs.syncthing.net/advanced/folder-ignoredelete.html. Теперь на андроиде я могу удалять тяжелые файлы из этих двух коллекций, но на сервер удаление не уйдёт.
Ну и весь процесс теперь получается такой, фоткаю-снимаю что нужно, оно сохраняется в Unsorted Media и уходит на сервер. Либо с телефона, либо ещё откуда выбираю что удалить или оставить, переименовываю как нужно и переношу в Images и Video, а из Unsorted Media удаляю.
Таким образом я и свободное место на андроиде могу регулировать, и нужные данные всегда целые и синхронизированные на сервере. Сейчас как раз пошёл процесс выгрузки всех данных на сервер.
Остался лишь один неудобный момент. Если я удалил тяжелый файл из Video на андроиде (а на сервере он целый) и вдруг решил снова его загрузить на телефон, как форсировать его загрузку с серверной директории Video? Я пока лишь вижу вариант с перезаписью этого файла на сервере, в этом случае клиент увидит это и перекачает его. Но тогда и дата изменения поменяется, что не очень хорошо. KRoN73 , Reedych , т.к. вы писали здесь про syncthing, не в курсе как это решить?
Источник