У меня накопилось достаточно много файлов и я не знаю где их хранить. Хотелось бы какую-нибудь прогу/сервис чтобы можно было нормально и безопасно хранить хранить свои файлы.
Что именно я хочу и более подробно про это:
- обычное файловое хранилище, подобное тому что можно получить обычным доступом по FTP
- гибкие и умные бэкапы
- метаинфа у файлов
- поиск, фильтры
- безопасность
Здесь особо нечего пояснять, я думаю все понимают что такое папки и древоидная структура которую они образовывают. Пример:
- home
- awesome_videos
- video_with_cats.mp4
- video_with_dogs.mp4
- awesome_photos
- photo_with_mom.jpg
- photo_with_dad.jpg
- secure
- keys
- ssh_key_priv
- ssh_key_public
- vpn
- vpn_profile_1
- vpn_profile_2
- passwords
- account_vk
- account_telegram
- credit_card
- tinkoff
- sberbank
- secure_noise
- generated_noise.bin # какой-нибудь большой бинарь с шумом для генерации ключей
Основу бэкапа составляет описание того, что именно нужно бэкапить. Оно состоит из различных правил для включения/исключения директорий.
Рассмотрим на примере выше. Полезное описание может включать важные данные ключей и подобного:
- home
* awesome_photos
* secure
x secure_noise
В данном описании мы делаем бэкап, который включает все файлы из awesome_photos
и все кроме secure_noise
из secure
.
Например, хотим запускать бэкап каждый день в 13:00.
К примеру, бэкап это zip-файл содержащий всю инфу достаточную для восстановления этого бэкапа. Тогда можно настроить шифр zip-файла своим ключем и внутренних файлов, по желанию.
После генерирования бэкапа предоставлять возможность заливать его на облачные (или свои локальные) хранилища, типо Dropbox, Google Cloud или локальный NAS.
Представим хранилище исходников, наподобие task1.cpp
. А именно, кейс организации решений задач по спортивному программированию. Тогда давайте к каждому исходнику дописывать JSON, по которому позже можно будет производить поиск.
Например, мы решаем задачу на какие-то дикие оптимизиации и боремся за десятую часть баллов. Тогда может иметь пользу такая инфа:
# try301.cpp
{
"timestamp": "10-12-2018 15:31:01:11233",
"scored": "222.29",
"submit_link": "http://online.judge/contest/123/task/3",
"solution": "method1 with a=123"
}
# try302.cpp
{
"timestamp": "10-12-2018 15:31:35:66356",
"scored": "222.21",
"submit_link": "http://online.judge/contest/123/task/3",
"solution": "method1 with a=127"
}
Я бы разделял поиск на две категории: умный и гибкий.
Под умным поиском можно понимать поиск, который тебя понимает сам.
Хороший (и по мне лучший) пример такого поиска photos.google.com. Он умеет искать фотографии по именам людей, объектам на фотографии, временам года и городам, в которых была сделана фотография. Сейчас это настолько хороший сервис для хранения фотографий, что, как мне кажется, конкурировать с ним нереально.
Под гибким поиском я хочу рассматривать набор фильтров, или запрос на языке SQL. Такие запросы дают полную свободу и контроль на фильтрованием данных.
Например мы храним протеганные вкладки из браузера, где одна вкладка = один файл, и хотим найти те самые старые владки по какой-то теме, которые мы давно открыли и забыли про них до текущего момента. Тогда нашу задачу решают такие фильтры:
1. Выбрать все из вкладок
2. Оставить только те, у которых тег темы совпадает с нашей ( .filter{ it.theme == "our_theme" } )
3. И выбрать только те, которые старше недели ( .filter{ it.timestamp < now().minus(time.WEEK) } )
В таком виде, как описано выше, можно использовать сервис как менеджер паролей.
Например, в случаее усиленной паранои это может работать так:
- Когда нам нужно вытащить пароль от vk.com, он присылается нам (как клиенту) и расшифровывается нашим ключем, который хранится у нас на клиенте.
- Таким же образом, мы используя наш ключ шифруем наш пароль локально и засылаем храниться в сервисе.
- Так получается безопасная система, в том смысле, что по сети не передаются наши незашифрованные пароли, о безопасности которых мы беспокоимся.
И упрощенная схема:
- Для доступа к хранилищу паролей генерируется токен для доступа, временем на 3 минуты.
- С этим токеном мы производим нужные операции для чтения/записи новых паролей.
Как я написал в начале, за годы жизнедеятельности накопилось достаточно файлов с кучей дубликатов и кучей полезных старых файлов, о которых я сейчас наверное и не вспомню. Я хочу организовать все в одном месте и дальше пользоваться без боли и страданий.
Насчет форм фактора, я представляю этот сервис как тот, который каждый должен запускать у себя на сервере/компе (если на компе, то он будет доступен без интернета!) и пользоваться в одно лицо. Это упрощает задачу в том смысле, что не нужно разделения файлов и подобного на юзеров, а можно просто представлять что все файлы принадлежат одному юзеру - админу (он же создатель и единственный пользователь).
Под файлами я подзразумеваю в первую очередь обычные файлы в привычной файловой системе, но хочется перейти к более общему понятию файла как единице информации. Для примера, файлом может быть единовременный платный прием пищи, то есть объект содержащий место, время, съеденные блюда и стоимость. Тогда можно хранить папку с такими файлами и показывать всякую статистику по тому, сколько мы тратим на еду.
Пробую ownCloud.
А еще полагаю нужно попробовать Seafile