Инструкция
Раздел: Клуб и доступ
Автоматический экспорт: зашифрованные резервные копии
С автоматическим экспортом (пакет Pro) полный экспорт вашего клуба регулярно попадает к вам – его забирает скрипт или мы загружаем его в ваше место назначения. Он всегда зашифрован вашим собственным ключом: перехвативший файл не сможет его прочитать, а у нас он хранится не более 24 часов.
10 минут чтения
Сначала главное: без закрытого ключа нет резервной копии
- Каждый автоматический экспорт шифруется с помощью age. Открыть его можно только вашим закрытым ключом (файл club-backup.key) или вашим паролем. Если утеряно и то и другое, все копии нечитаемы – восстановить их не можем и мы.
- Поэтому храните закрытый ключ в двух надёжных местах (например, на зашифрованной флешке в сейфе клуба и в менеджере паролей правления) – но не на компьютере или NAS, где лежат резервные копии.
- Автоматический экспорт настраивает только владелец. Каждая настройка подтверждается кодом, который мы отправляем на адрес владельца.
Как это работает
- Пакет Pro: автоматический экспорт входит в пакет Pro. Ручной полный экспорт с одноразовым кодом остаётся бесплатным на любом уровне.
- Два пути: ключ экспорта позволяет скрипту на вашей стороне (Планировщик заданий Windows, Synology, Linux) забирать экспорт. Или вы указываете место назначения (WebDAV/Nextcloud, SFTP, S3), и мы загружаем экспорт по расписанию.
- Не более одного автоматического экспорта в день на клуб – получение и загрузка вместе.
- Всегда зашифрован: экспорт шифруется ещё у нас, до сохранения. После получения или загрузки мы сразу его удаляем, иначе – через 24 часа.
- После каждого автоматического экспорта владелец получает письмо со временем, размером и адресом – по желанию вместо этого еженедельную сводку.
- Настройка – в Администрировании (/admin): «Организация» → «Основные данные» → «Полный экспорт» → вкладка «Автоматически», в WebApp или приложении: «Настройки» → «Админ-раздел» → «Основные данные».
Установить age
- age – небольшая бесплатная программа шифрования с открытым кодом (age-encryption.org). Она нужна на компьютере, где вы создаёте ключ и открываете копии, – но не на NAS, который их только забирает.
- Windows: в командной строке или PowerShell введите «winget install FiloSottile.age».
- macOS: «brew install age». Linux: через менеджер пакетов, например «sudo apt install age».
- Проверка: «age --version» показывает установленную версию.
Создать ключ
age-keygen -o club-backup.key
Public key: age1… ← эту строку вы вводите в Администрировании
Настроить шифрование – шаг за шагом
- Откройте вкладку «Автоматически» полного экспорта и нажмите «Настроить шифрование».
- Выберите «Открытый ключ (рекомендуется)» и вставьте строку, начинающуюся с age1.
- Нажмите «Создать тестовый файл». Сохраняется небольшой файл test-automatischer-export.txt.age.
- Расшифруйте его у себя: «age -d -i club-backup.key test-automatischer-export.txt.age». Появится контрольное слово вроде K7Q4-M2XD.
- Введите контрольное слово и нажмите «Подтвердить контрольное слово». Мы отправим код владельцу; с этим кодом шифрование станет активным.
- Так вы точно знаете, что сможете открыть свои копии: неправильно скопированный ключ обнаружится сейчас, а не в экстренной ситуации.
Пароль вместо ключа
Вместо ключа можно использовать пароль длиной не менее 12 символов. Тогда файл открывается командой «age -d файл.zip.age»; age запросит пароль.
Учтите: для шифрования наш сервер должен знать пароль. Мы храним его только в зашифрованном виде, но оператор технически мог бы его расшифровать. С открытым ключом это исключено – поэтому мы рекомендуем ключ.
Создать ключ экспорта для скрипта
- В разделе «Ключи экспорта» введите название, например «NAS в клубном доме», и выберите срок действия (не более 12 месяцев).
- Необязательно: если у вас фиксированный IP-адрес, укажите его в поле «только с этих IP-адресов» – тогда ключ будет работать только оттуда.
- Нажмите «Создать ключ экспорта» и введите код из письма.
- Ключ показывается ровно один раз. Сразу сохраните его в надёжном месте для скрипта – но не в самом скрипте.
- За 30 и 7 дней до истечения срока мы напомним по почте. «Обновить» создаёт новый ключ; старый действует ещё 7 дней, чтобы вы могли спокойно перенастроить скрипт.
Windows: скрипт для Планировщика заданий (PowerShell)
# backup-export.ps1 – забирает зашифрованный полный экспорт
# Install-Module CredentialManager -Scope CurrentUser (einmalig / once)
# New-StoredCredential -Target 'drinklist-export' -UserName export -Password '<Export-Schlüssel / export key>' -Persist LocalMachine
$key = (Get-StoredCredential -Target 'drinklist-export').GetNetworkCredential().Password
$base = 'https://drinklist.app/api/v1'
$h = @{ Authorization = "Bearer $key" }
$export = Invoke-RestMethod -Method Post -Uri "$base/exports" -Headers $h
do { Start-Sleep -Seconds 30; $state = Invoke-RestMethod -Uri "$base/exports/$($export.id)" -Headers $h } while ($state.status -in 'Waiting','Running')
if ($state.status -ne 'Ready') { throw "Export: $($state.status)" }
$file = "D:\Backup\Verein\komplettexport-$(Get-Date -Format yyyy-MM-dd).zip.age"
Invoke-WebRequest -Uri "$base/exports/$($export.id)/download" -Headers $h -OutFile $file
# Открывать только при необходимости, на надёжном компьютере: age -d -i club-backup.key -o export.zip <файл>
Настроить Планировщик заданий Windows
- Сохраните скрипт как backup-export.ps1, например в C:\Scripts. Один раз сохраните ключ экспорта с помощью New-StoredCredential в Диспетчере учётных данных Windows (строки 2 и 3 скрипта).
- Откройте Планировщик заданий → «Создать задачу» → имя «Резервная копия клуба», «Выполнять для всех пользователей».
- Триггер: ежедневно, например в 03:30. Действие: программа «powershell.exe», аргументы «-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\backup-export.ps1».
- Запустите один раз вручную и проверьте, что в папке резервных копий появился файл *.zip.age.
Synology/NAS или Linux: скрипт для cron
#!/bin/sh
# backup-export.sh – забирает зашифрованный полный экспорт
set -eu
KEY=$(cat /volume1/scripts/.drinklist-export-key) # chmod 600
BASE=https://drinklist.app/api/v1
ID=$(curl -fsS -X POST -H "Authorization: Bearer $KEY" "$BASE/exports" | sed -n 's/.*"id":\([0-9]*\).*/\1/p')
while :; do
STATUS=$(curl -fsS -H "Authorization: Bearer $KEY" "$BASE/exports/$ID" | sed -n 's/.*"status":"\([A-Za-z]*\)".*/\1/p')
[ "$STATUS" = "Ready" ] && break
case "$STATUS" in Waiting|Running) sleep 30 ;; *) echo "Export: $STATUS" >&2; exit 1 ;; esac
done
curl -fsS -H "Authorization: Bearer $KEY" -o "/volume1/backup/verein/export-$(date +%F).zip.age" "$BASE/exports/$ID/download"
# NAS не нужен age – файлы открываются только на надёжном компьютере
Synology: настроить Планировщик задач
- Запишите ключ экспорта в файл (например, /volume1/scripts/.drinklist-export-key) и сделайте его доступным для чтения только пользователю резервного копирования с помощью «chmod 600».
- Сохраните скрипт как /volume1/scripts/backup-export.sh и сделайте его исполняемым («chmod 700»).
- Панель управления → Планировщик задач → Создать → Запланированная задача → Пользовательский сценарий; пользователь: пользователь резервного копирования; расписание: ежедневно в 03:30; команда: /volume1/scripts/backup-export.sh.
- В Linux достаточно записи в crontab: «30 3 * * * /volume1/scripts/backup-export.sh».
Без скрипта: мы загружаем в ваше место назначения
- В разделе «Место назначения» выберите тип: WebDAV (Nextcloud, Synology с пакетом WebDAV Server, порт https 5006), SFTP или S3.
- Nextcloud: используйте адрес папки, например https://cloud.club.org/remote.php/dav/files/backup/drinklist/, и пароль приложения отдельного пользователя для резервного копирования. Сначала создайте папку.
- SFTP: укажите сервер, порт (22 или 2222), папку, пользователя и пароль или закрытый SSH-ключ. Ключ сервера мы запоминаем при первой проверке – если он изменится, мы из соображений безопасности прервём работу.
- S3: endpoint (пусто = Amazon), регион, bucket и доступ, которому разрешена только запись (PutObject) – ни чтение, ни удаление ему не нужны.
- Выберите периодичность (ежедневно или еженедельно) и время – оно действует в часовом поясе вашего клуба.
- «Проверить соединение и настроить»: мы записываем небольшой тестовый файл. Если это удалось, код отправляется владельцу; с этим кодом место назначения станет активным.
- Если загрузка не удалась, мы повторяем попытку три раза и отправляем письмо. После трёх неудачных запусков подряд мы приостанавливаем место назначения, пока вы снова его не разрешите.
Открыть резервную копию (расшифровать)
age -d -i club-backup.key -o full-export.zip komplettexport-2026-10-07.zip.age
age -d -o full-export.zip komplettexport-2026-10-07.zip.age # вариант с паролем
Безопасность кратко
- Ключ экспорта может только забрать зашифрованный экспорт – никаких счетов, записей или других данных.
- Создать его может только владелец, с подтверждением кодом по почте; администраторы и поддержка не могут создавать ключи экспорта.
- Доступ из новой страны или повторные отклонённые запросы приостанавливают ключ; владелец получает письмо и может снова разрешить его или отозвать.
- Если организация заблокирована за нарушение, автоматический экспорт приостановлен; ручной экспорт в Администрировании остаётся доступен.
- При смене владельца ключи и места назначения сохраняются. Новый владелец получает письмо и может отозвать их и заново настроить шифрование.
Если что-то не работает
- 429 «only one automatic export per day»: сегодня уже был автоматический экспорт – завтра получится снова.
- 403 «export key paused»: система обнаружения злоупотреблений приостановила ключ. Владелец разрешает его в Администрировании кнопкой «Снова разрешить».
- 409 при скачивании: экспорт уже забран или удалён через 24 часа – запросите новый на следующий день.
- 423: организация заблокирована; обратитесь в поддержку.
- Вместо опроса в скрипте событие «export.ready» может сообщить вебхук (Администрирование → Интеграции).
Не получилось?
Если инструкция оставила вопрос или что-то выглядит иначе, чем описано, откройте заявку — мы ответим в ней. Поддержка работает только через заявки, а не по электронной почте.