Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZipBackuper

Программа для Windows: архивирует указанную папку (ZIP / ZIP-AES-256 / 7z, с паролем или без) и загружает архив в облако или на свой сервер — Яндекс.Диск, Google Drive, SFTP. Есть расписание: ежедневно в заданное время и бэкап при входе в систему. Поддерживает несколько независимых задач с разными настройками.

Возможности

  • Выбор папки-источника через диалог
  • Форматы архива: ZIP, ZIP (AES-256), 7z (AES-256) — с паролем или без
  • Уровень сжатия: без сжатия / быстрое / нормальное / максимальное
  • Исключение файлов и папок (например, node_modules, .git, tmp)
  • Назначение: Яндекс.Диск, Google Drive (приложение), Google Drive (API), SFTP/VPS, только локально
  • Расписание: ежедневно в ЧЧ:ММ + бэкап при входе в систему
  • Ротация: хранить N последних архивов, удалять локальный архив после загрузки
  • Прогресс и статус операции в карточке каждой задачи, лог, «Запустить сейчас»
  • Несколько независимых задач
  • Пароли и токены хранятся в Windows Credential Manager (keyring) + резервный файл с DPAPI-шифрованием
  • Трей: сворачивание в трей при закрытии окна; при входе в Windows программа запускается в трей и выполняет расписание сама; один экземпляр — повторный запуск разворачивает окно первого

Установка

Вариант 1 — готовый exe (рекомендуется)

Скачайте ZipBackuper.exe со страницы Releases и запустите. Дополнительно ничего устанавливать не нужно.

Windows SmartScreen (неподписанный exe). Сборка не подписана цифровым сертификатом (подпись платная), поэтому Windows при первом запуске может показать «Windows защитил ваш компьютер». Это нормально — файл безопасен. Как запустить:

  • нажмите «Подробнее» → «Выполнить в любом случае» (одноразово);
  • или снимите пометку «скачано из интернета»: ПКМ по файлу → Свойства → галочка «Разблокировать» → ОК;
  • либо из PowerShell: Unblock-File ZipBackuper.exe.

Вариант 2 — из исходников

Нужен Python 3.11+.

cd D:\Проекты\zipbackuper
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt

Запуск приложения (без консоли):

.venv\Scripts\pythonw app\main.py

Запуск с консолью (для отладки, видны ошибки):

.venv\Scripts\python app\main.py

Подробная инструкция по пользованию

1. Интерфейс — три страницы

Приложение состоит из трёх страниц, между которыми вы переключаетесь:

Страница Назначение
Старт Показывается, если задач ещё нет. Кнопка «Создать задачу».
Список задач Карточки всех ваших задач. Здесь запускают, редактируют и удаляют задачи.
Форма задачи Все настройки одной задачи: источник, формат, пароль, назначение, расписание.

Список задач — карточки

Каждая задача — карточка с:

  • названием задачи;
  • описанием (формат, пароль, назначение, расписание);
  • прогресс-баром — появляется при запуске задачи и показывает ход операции.

Что можно делать:

  • Запустить сейчас — запустить бэкап этой задачи немедленно. В карточке появится прогресс-бар, а в его тексте — текущая операция («Подготовка…», «Архивация…», «Загрузка…», «Готово» или «Ошибка»).
  • Двойной клик по карточке — открыть задачу на редактирование.
  • Редактировать / Удалить / Открыть папку с архивами / Настройки… — кнопки на странице списка.

2. Создание задачи

  1. На стартовой странице или в списке нажмите «Создать задачу».
  2. Введите имя задачи — латиницей, без пробелов (например, Obsid, my-backup). Имя используется в названиях архивов и в расписании.
  3. Заполните форму (см. ниже).
  4. Нажмите «Сохранить» — задача появится в списке.

3. Форма задачи — все поля

3.1. Имя задачи

Задаётся при создании. Изменить имя нельзя — проще удалить задачу и создать заново.

3.2. Папка-источник

Папка, содержимое которой архивируется. Кнопка «Обзор…» открывает диалог выбора папки. Можно ввести путь вручную.

3.3. Формат архива и пароль

Формат Пароль не задан Пароль задан
ZIP Обычный zip без пароля Обычный zip с паролем (ZIP-шифрование)
ZIP (AES-256) Обычный zip без пароля zip с AES-256-шифрованием
7z 7z без пароля 7z с AES-256-шифрованием

Пароль — поле «Пароль» в форме. Пустое поле = архив без пароля.

Важные особенности:

  • 7z с паролем шифрует не только содержимое, но и заголовок архива: имена файлов скрыты, и пароль запрашивается сразу при попытке открыть архив. Это самый надёжный вариант.
  • ZIP (AES-256) шифрует содержимое, но имена файлов остаются видны.
  • Пароль хранится в Windows Credential Manager, в файлах он не лежит открытым текстом. Дополнительно пароль дублируется в резервный файл %APPDATA%\ZipBackuper\secrets.json, зашифрованный Windows DPAPI — это страховка на случай, если Credential Manager недоступен.
  • После создания архива программа проверяет, что шифрование реально сработало: если пароль задан, а архив вышел незашифрованным — задача завершится ошибкой, а не выдаст «безопасный» архив.

3.4. Уровень сжатия

Уровень Название Когда использовать
0 Без сжатия Очень быстрый, но большой архив. Для уже сжатых данных (видео, jpg, архивы).
1–3 Быстрое Быстрее и меньше, чем без сжатия.
4–6 Нормальное Баланс скорость/размер. Рекомендуется по умолчанию.
7–9 Максимальное Минимальный размер, но долго. Для больших папок может занять много времени.

3.5. Исключения

Список имён файлов и папок, которые не попадут в архив, через запятую. Пример: node_modules, .git, tmp, Thumbs.db.

3.6. Назначение (куда загружать)

Назначение Что делает Требуется
Только локально Просто создаёт архив в папке с архивами Ничего
Яндекс.Диск Загружает архив в папку на Яндекс.Диске OAuth-токен
Google Drive (приложение) Копирует архив в папку Google Drive for Desktop, облако догрузит само Google Drive for Desktop
Google Drive (API, OAuth) Загружает архив через Google Drive API credentials.json
SFTP (свой VPS) Загружает архив на сервер по SSH Хост, логин, пароль/ключ

Подробная настройка каждого — в разделе «Настройка сервисов».

Проверить подключение — кнопка рядом с назначением. Нажмите её перед сохранением, чтобы убедиться, что сервис доступен.

3.7. Расписание

  • Ежедневно в указанное время — галочка: бэкап каждый день в ЧЧ:ММ.
  • Время — ежедневное время запуска.
  • Сделать бэкап при входе в Windows — галочка: выполнить бэкап сразу при входе в систему.

Как это работает:

  • Расписание выполняет сама программа, пока она запущена (в трее).
  • Если включено расписание или бэкап при входе, программа автоматически запускается в трей при входе в Windows (запись в HKCU\Software\Microsoft\Windows\CurrentVersion\Run, без прав администратора).
  • Запуск происходит без окна (ZipBackuper.exe --tray), бэкапы выполняются в фоне. Если в указанное время программа была выключена, она выполнит пропущенный бэкап при следующем запуске.
  • Бэкап при входе в Windows стартует через ~1 минуту после входа — чтобы не нагружать систему в пик запуска всех программ.
  • Windows Task Scheduler не используется.

3.8. Ротация

  • Хранить N последних архивов — сколько архивов этой задачи оставлять. Старые удаляются автоматически.
  • Внимание (Google Drive, вариант «приложение»): при удалении старых архивов из папки синхронизации Google Drive for Desktop переносит их в корзину облака, которая занимает место. Такую корзину придётся очищать вручную (см. «Google Drive — простой вариант»). Для API-варианта ротация удаляет архивы безвозвратно (в корзину они не попадают).
  • Удалять локальный архив после загрузки — если включено, архив удаляется с диска после успешной загрузки в облако/на сервер (для «только локально» удалять не стоит).

4. Запуск бэкапа

Способы запустить задачу:

  1. «Запустить сейчас» в списке задач — немедленно, из GUI.
  2. Расписание — ежедневно в заданное время или бэкап при входе в систему.
  3. Командная строкаZipBackuper.exe --run-backup <имя_задачи> (без GUI).

Во время запуска в карточке задачи виден прогресс-бар, а в его тексте — текущий этап. Ход операций записывается в лог.

5. Трей и завершение работы

  • При закрытии окна (крестик) приложение сворачивается в трей, если есть хотя бы одна задача с расписанием — оно продолжает работать в фоне.
  • В меню трея: «Показать» (развернуть окно) и «Выход» (полностью завершить программу).
  • Если задач с расписанием нет — закрытие окна сразу завершает программу.
  • Один экземпляр: при повторном запуске новое окно не открывается — активируется существующее. Так в трее не появляется дубликатов.
  • Если приложение запущено через автозагрузку (--tray), окно не показывается — иконка появляется сразу в трее, а бэкапы при входе выполняются в фоне.

6. Командная строка

ZipBackuper.exe                        # запуск GUI (окно)
ZipBackuper.exe --tray                 # запуск в трей без окна (используется автозапуском)
ZipBackuper.exe --run-backup Obsid     # фоновый бэкап задачи "Obsid" без GUI

--run-backup возвращает код 0 при успехе и 1 при ошибке — удобно для скриптов.

7. Файлы и настройки

Что Где
Конфиг (задачи, назначения, расписание) %APPDATA%\ZipBackuper\config.json
Резервные пароли (DPAPI) %APPDATA%\ZipBackuper\secrets.json
Пароли и токены (основное хранилище) Windows Credential Manager
Логи бэкапов <папка с архивами>\logs\zipbackuper.log

Настройка сервисов

Яндекс.Диск

  1. Зайдите на https://oauth.yandex.com и создайте приложение.
  2. В правах отметьте «Яндекс.Диск REST API» (доступ на чтение и запись).
  3. После создания получите OAuth-токен.
  4. В задаче выберите назначение «Яндекс.Диск», вставьте токен в поле «OAuth-токен».
  5. Укажите папку на диске (например, /backup) и нажмите «Проверить подключение».

Google Drive — простой вариант (рекомендуется)

Если установлен Google Drive for Desktop, API не нужен:

  1. Запустите Google Drive for Desktop и войдите в аккаунт — должен появиться виртуальный диск (например, G:\).
  2. В задаче выберите назначение «Google Drive (приложение)».
  3. Нажмите «Найти автоматически» — программа сама найдёт папку диска (учитываются и русские имена, например «Мой диск», и несколько аккаунтов). Можно указать папку вручную через «Обзор…».
  4. Архив копируется в эту папку, а Google Drive сам синхронизирует его в облако.

Важно (корзина): когда программа удаляет старые архивы (ротация «хранить N»), Google переносит их в корзину облака, которая продолжает занимать место. Корзину придётся очищать вручную: drive.google.com → «Корзина» → «Очистить корзину» (раз в несколько недель). Если это неудобно — используйте API-вариант ниже: там старые архивы удаляются безвозвратно, корзина не засоряется.

Google Drive — вариант через API (опционально)

Загрузка напрямую через Google Drive API. Google Drive for Desktop не нужен, ротация удаляет старые архивы безвозвратно (в корзину облака ничего не попадает):

  1. Создайте OAuth-клиент в Google Cloud Console: тип приложения Desktop app, скачайте credentials.json.
  2. Сохраните файл как credentials.json в папке проекта — программа найдёт его автоматически (либо укажите путь в «Настройки…»).
  3. В задаче выберите назначение «Google Drive (API, OAuth)», укажите папку на Drive (например, Obsidian_backup; будет создана при первом бэкапе) и нажмите «Авторизоваться в Google» — откроется браузер, дайте доступ.
  4. Токен сохранится в Credential Manager.

Первый вход: для не проверенного Google приложения показывается предупреждение «ненадёжное приложение» — это нормально для собственных OAuth-клиентов: нажмите «Advanced → Go to … (unsafe)». Если Google показывает «403 access_denied» — переведите приложение в Cloud Console в «Publish app → In production» (либо добавьте свой email в «Test users»), затем повторите авторизацию.

Ротация для API-варианта удаляет старые архивы безвозвратно (files.delete) — в корзину облака они не попадают.

SFTP (свой VPS)

Укажите:

  • хост — адрес сервера;
  • порт — по умолчанию 22;
  • пользователь;
  • пароль или файл ключа SSH (формат OpenSSH/PEM). Если ключ защищён паролем — укажите его в поле «Пароль»;
  • папку на сервере — куда складывать архивы.

Только локально

Архив создаётся в папке с архивами (по умолчанию C:\Users\<ваше-имя>\ZipBackuper, меняется в «Настройки…»). Загрузка в облако не выполняется.


Расписание (подробнее)

При сохранении задачи с расписанием (ежедневное время или бэкап при входе) программа записывает в автозагрузку:

Запись в реестре (HKCU\...\Run) Что запускает
ZipBackuper_<имя>_startup ZipBackuper.exe --tray — программа в трей, дальше расписание выполняет она сама

Windows Task Scheduler не используется и не требует прав администратора. При первом запуске программа автоматически удаляет старые задачи Task Scheduler и битые записи автозагрузки из предыдущих версий.

При удалении задачи запись автозагрузки удаляется вместе с ней.


Структура проекта

app/
  main.py            — точка входа (GUI + --run-backup)
  ui/main_window.py  — интерфейс PySide6
  core/
    config.py        — конфиг (%APPDATA%\ZipBackuper\config.json) + keyring + DPAPI
    archiver.py      — создание ZIP/7z с паролем (в т.ч. шифрование заголовка 7z)
    worker.py        — конвейер: архив → загрузка → ротация
    scheduler.py     — автозапуск в трей (HKCU Run) + очистка старых записей
    single_instance.py — запрет повторного запуска (QLocalServer)
    uploaders/       — yandex_disk.py, google_drive.py, gdrive_folder.py, sftp.py

Поддержать проект

Если хотите отблагодарить автора чашечкой кофе — буду очень рад!

Чашечка кофе

Лицензия

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages