Свой сервер синхронизации для android

Создание собственной облачной синхронизации контактов Андроид

В этой статье будет рассказано, как сделать свое собственное облако для синхронизации контактов и календаря для андроида. Зачем это нужно? Хотя бы для того, чтобы не зависеть от 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, но лучше задать посложнее) и вводим их в окно, также ставим галку о создании базы данных с таким же именем как у пользователя и предоставлении на нее привилегий затем внизу жмем кнопку Вперед:

Читайте также:  Медиаплеер mxq pro android tv box

База данных создана, выбираем ее слева в списке баз данных, заходим в раздел операции и внизу ставим сравнение 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, не в курсе как это решить?

Источник

Оцените статью