Бэкапер файловых баз с хранением на яндекс-диске

Еще один бекапер файловых баз на инфостарте. Возможно будет интересен франчам, у кого много небольших клиентов с файловыми базами. У себя используем больше года. Состоит из 3-х частей: 1 — размещается на компьютере клиента; 2 — настраивается яндекс-диск; 3 — у себя на рабочем компьютере. Настроенная система организует архивацию файловых баз данных на компьютере клиента, копирование их на яндекс-диск, сбор и анализ информации о наличии архивов на яндекс-дисках с возможностью закачки к себе на рабочий компьютер.

Настройка следующая:

1. Для каждого клиента регистрируем новый почтовый ящик, его можно регистрировать без привязки к номеру тлф, включаем там яндекс-диск, получаем токен. 

2. Закачиваем клиенту файлы бекапера

— backuper.bat — сам скомпилированный бекапер

— oauth_token.txt  — в него записываем полученный токен

— param.txt — в нем прописываем какие базы копируем, куда складываем, какое количество храним

— setup.vbs — файл запуска бекапера, в нем указываем абсолютный путь к файлу параметров param.txt и самому бекаперу backuper.bat

3. Настраиваем планировщик, я делаю ежедневный запуск, файл запуска — setup.vbs.

4. Развернуть у себя на компьютере конфигурацию, или объединить ее с той что используете у себя. В справочнике Контрагенты в поле Токен для каждого клиента указывается свой токен, полученный в его ящике.

1,2,3 пункт делаю так для каждого клиента.

Настройка закончена.

После того как планировщик у клиентов отработает, архивы баз появятся на яндекс-дисках. Сама программа работает в фоне, клиент ее не видит. Из базы выходить не нужно. Ежедневно при первом запуска конфигурации она проверяет данные на яндекс-дисках и записывает эту информацию в документ Облако, проводит его с записью в регистр. После этого можно смотреть отчеты, и принимать соответствующие меры. Можно закачать базу себе с помощью встроенной обработки.

Образец заполнения параметров файла param.txt:
<Забекапить>                   — по этой строке программа начинает искать настройки для следующей базы
D:1cworkbasesБП           — путь до базы, которую нужно заархивировать
D:АрхивБП                      — путь до архива, куда будут сложены архивы
Приложения/Архив/БП    — путь к папке на яндекс-диске, куда будут отправлены архивы
5                                         — количество архивов, которое будет хранится в папке ЕжедневныеАрхивы и ЯндексДиске. При записи новых архивов старые удаляются.

Этих секций может быть несколько, по количеству баз, которые нужно сохранять. Важно не выйти по объему за размер яндекс-диска. В названиях лучше избегать пробелов.

На компьютере клиента для каждой базы создается 2 папки — ЕжедневныеАрхивы и ЕженедельныеАрхивы. Каждый понедельник в папку ЕженедельныеАрхивы складывается новый архив. В папке ЕжедневныеАрхивы и на яндекс-диске хранится только указанное количество архивов, более старые удаляются.

Скрипт написан на 1script, поэтому требуется .NET 4.5.2, исходник тоже выкладываю. Мой скомпилированный файл архивы не паролит, советую указать его в скрипте и скомпилировать самостоятельно. 

Возможно потребуется также настройка антивируса, тк им такая активность не нравится.

Вот такой велосипед, говорят настройка сложная, но, думаю, разобраться можно. У себя используем больше года, данные не теряем, всегда под рукой свежая копия, которую можно скачать и поработать с ней не отвлекая клиента. Может кому то еще пригодится, а может посоветуют как доработать.

4 Comments

  1. V.Nikonov

    А выложить отдельный функционал заменяющий функции (FTP.Прочитать(), http://FTP.Записать(); http://FTP.Dir()) не сложно?

    Вероятно нужен вариант, что Токен скармилвается при Вызове как Параметр, и вариант использующий стандартизированный Токен для Базы…

    Reply
  2. yabrus

    (1) вот кусок кода, если поможет:

    Соединение = Новый HTTPСоединение(«cloud-api.yandex.net»,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    //Запрос по корневой папке
    Запрос = Новый HTTPЗапрос(«/v1/disk», ПолучитьЗаголовки(Контрагент));
    Ответ = Соединение.Получить(Запрос);
    СвободноеМестоВОблаке = ПолучитьДанныеОбОставшемсяМесте(Ответ,Контрагент);
    

    Функция ПолучитьДанныеОбОставшемсяМесте(Ответ,Контрагент)
    Если Ответ.КодСостояния = 200 Тогда
    Данные = ПрочитатьДжейсон(Ответ);
    Возврат Данные.total_space — Данные.used_space — Данные.trash_size;
    Иначе
    Данные = ПрочитатьДжейсон(Ответ);
    Сообщить(«Не удалось получить данные об свободном месте в облаке у контрагента » + Контрагент +» «+Данные.message, СтатусСообщения.ОченьВажное);
    Возврат 0;
    КонецЕсли;
    КонецФункции
    
    Функция ПолучитьЗаголовки(Контрагент)
    Заголовки = Новый Соответствие;
    Заголовки.Вставить(«Content-Type»,»application/json; charset=utf-8″);
    Заголовки.Вставить(«Authorization», «OAuth «+СокрЛП(Контрагент.Токен));
    Возврат Заголовки;
    КонецФункции
    
    Функция ПрочитатьДжейсон(Ответ)
    Джейсон = Новый ЧтениеJSON;
    Джейсон.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Возврат ПрочитатьJSON(Джейсон);
    КонецФункции
    
    

    Показать

    Reply
  3. V.Nikonov

    (2)

    Александр Собянин (yabrus) 6 09.06.18 07:30

    (1) вот кусок кода, если поможет:

    Я имел в виду вариант распространения в виде Отдельного модуля или Обработки, который бы позволил подменить типовую работу с FTP на обращение к Yandex-Disk.

    P.S. Я бы с удовольствием скачал такую «Библиотеку».

    Reply
  4. yabrus

    https://infostart.ru/public/853451/ посмотрите тут, кажется то, что вы искали

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *