Многие пользуются функцией синхронизации с облаком от крупных компаний, таких как Apple или Google, кто-то предпочитает Yandex, mail.ru и тому подобное. Мне эти варианты не приглянулись, предпочитаю свои данные хранить самостоятельно. Потому, однажды, решил сделать себе простенькое «облако».
Задача: синхронизировать устройства и дать возможность получить отснятый материал через web-браузер, авторизировавшись по паролю. Пароль этот раздать родным и близким.
Зачем это все нужно? Дело в том, что развелось, без меры, всевозможных «уполномоченных» и лиц, считающих себя таковыми. Это может быть сотрудник полиции, не особенно желающий следовать не то, что духу, но и букве закона, всевозможные сотрудники ЧОПов «Рога и Копыта», которым знание законов, да и вообще мозг, заменяет указ начальства, безумные вахтеры с одноименным синдромом, казаки, разноплановые активисты — перечислять можно ну очень долго.
Вся эта почтенная публика очень не любит, когда их художества снимают на видео. Во время съемки можно услышать «здесь снимать запрещено», «я должностное лицо», «убери камеру, да я тебя!», а то и вовсе поучаствовать в игре «не дай разбить свой гаджет и не получи кулаком в лицо».
Замечал, что когда звучит фраза «ведется прямая трансляция», пыл вышеперечисленных персонажей несколько угасает, тянущиеся к раздражающему устройству ручки опадают, а «ты» резко меняется на «вы». Облагораживает, в общем, волшебная фраза.
Из материальных средств у меня был под рукой смартфон под управлением Android, домашний сервер под управлением Debian GNU/Linux, и пара ноутбуков. Было решено, что хранить все яйца в одной корзинке не стоит, потому приобрел еще одно устройство и разместил его там, где до него точно не дотянутся загребущие ручки разнообразных полномочных.
Подготовка
Домашний сервер был готов изначально, система там стоит на LUKS, поэтому никаких дополнительных действий, кроме установки Syncthing, не потребовалось.
На втором сервере система работает с карты памяти, потому подключаю LUN с хранилки и доустанавливаю пакеты для поддержки MPIO:
#apt-get install multipath-tools
Активируем автостарт:
#systemctl enable multipath-tools
Проверяем доступность:
#multipath -l
000003333300000044444444400000000 dm-1 XXXXXXXXX
size=500G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=active
| |- 0:0:2:1 sdd 8:48 active undef running
| |- 0:0:3:1 sde 8:64 active undef running
| |- 2:0:0:1 sdf 8:80 active undef running
| `- 2:0:1:1 sdg 8:96 active undef running
`-+- policy='service-time 0' prio=0 status=enabled
|- 0:0:0:1 sdb 8:16 active undef running
|- 0:0:1:1 sdc 8:32 active undef running
|- 2:0:2:1 sdh 8:112 active undef running
`- 2:0:3:1 sdi 8:128 active undef running
Отлично. Ставим ПО для работы с LUKS, зашифруем устройство, создадим файловую систему и смонтируем:
#apt-get install cryptsetup
#cryptsetup create data0-crypt /dev/dm-1
#mkfs.ext4 /dev/mapper/data0-crypt
#mount /dev/mapper/data0-crypt /home/videoupl
В /etc/crypttab запишем:
data0-crypt /dev/dm-1 none luks
В /etc/fstab:
/dev/mapper/data0-crypt /home/videoupl ext4 auto,rw 0 0
Пояснение: я создал отдельного пользователя, из-под которого на данном сервере будет работать syncthing.
Доустановил nginx и утилиты апача для работы с htpasswd:
#apt-get install nginx apache2-utils
Настройке nginx и получению сетрификатов с letsencrypt посвящено не мало статей, поэтому просто покажу конфиг /etc/nginx/sites-available/default:
Скрытый текст
Соответственно, файлы с паролями будут находиться в /etc/nginx/passwd. Создаем файлы, задаем учетки:
#touch /etc/nginx/passwd/{video,photo}
#htpasswd -b /etc/passwd/video myname mysuperpassword
#htpasswd -b /etc/passwd/photo myanorhtername myanorthersuperpassword
Чтобы nginx мог читать пользовательские файлы, добавим его в группу:
#usermod -aG videoupl www-data
Создадим пользовательские каталоги, смонтируем и перечитаем конфиг nginx:
#su videoupl
$mkdir ~/{video,photo};exit
#mount -o bind /home/videoupl/video /var/www/html/video
#mount -o bind /home/photoupl/photo /var/www/html/photo
#service nginx reload
И добавим точки монтирования в /etc/fstab:
/home/videoupl/video /var/www/html/video ext4 auto,rw,bind 0 0
/home/videoupl/photo /var/www/html/photo ext4 auto,rw,bind 0 0
Установка Syncthing на компьютеры
Здесь все весьма тривиально. На серверах под управление Debian, я добавил репозитарии и установил приложение, воспользовавшись инструкцией с сайта.
# Add the release PGP keys:
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
# Add the "stable" channel to your APT sources:
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
# Update and install syncthing:
sudo apt-get update
sudo apt-get install syncthing
На Void Linux, под которым работают ноутбуки, просто установил из репозитария:
xbps-install syncthing
Для автозапуска приложения, дописал в /etc/rc.local:
nohup su videoupl -c syncthing >/home/videoupl/sync.log &
Мобильное приложение
Здесь тоже все просто. Тем или иным путем, нам нужно установить Syncthing на свой смартфон. Я это сделал через F-Droid:
Папки лучше расшарить через web-интерфейс, явно указав пути:
Связываем устройства
Действия предельно простые. Заходим браузером по адресу
http://localhost:8384/
Для доступа к безголовым машинам, можно пробросить порт. Я это делаю средствами ssh:
ssh -L 127.1:38384:127.1:8384 server1
В итоге, на время активности ssh-сессии, веб-интерфейс сервера будет доступен по ссылке
http://localhost:38384/
Далее, меню «Действия» → «Показать ID», после чего сканируем QR-код из Syncthing на смартфоне.
Можно добавить, на одном из компьютеров все остальные, напрямую введя ID и указать это устройство в качестве «рекомендателя», после чего добавить его на смартфоне. Все остальные устройства подтянутся автоматом.
В настройках доступа расшаренной папки можно указать, какие из устройств будут иметь доступ. Вдруг нужно будет какое-то исключить из списка.
Также крайне рекомендую активировать хотя бы простую версионность, на случай, если файл будет удален с одного из устройств, скажем, под чутким руководством сотрудника полиции.
Итог
Вот так, из подручных материалов, собрали, по сути, отказоустойчивое «облако» для хранения и отдачи отснятого материала. При желании, можно добавить еще пару узлов, например компьютер на работе, или Raspberry Pi с шифрованным USB-HDD в гараже, главное, чтоб был доступ к Сети.
Если есть какие-либо дополнения и замечания, буду рад прочесть их в комментариях.
https://habrahabr.ru/post/326982/&utm_medium=rss&utm_campaign=hub