Botxona

Данные и резервное копирование

DATA_DIR — единственное постоянное место

Когда контейнер бота перезапускается (повторный деплой, рестарт, смена токена), файловая система очищается — кроме папки, на которую указывает переменная окружения DATA_DIR. Файлы, записанные в любое другое место (например, в саму папку проекта), при следующем запуске пропадут. Поэтому все постоянные данные — базу SQLite, выгрузки Excel, загруженные изображения — храните только внутри DATA_DIR (пример кода).

Примеры

import sqlite3, os
db = sqlite3.connect(os.path.join(os.getenv("DATA_DIR", "./data"), "bot.sqlite3"))
const fs = require("fs")
const path = require("path")
const file = path.join(process.env.DATA_DIR || "./data", "users.json")
fs.writeFileSync(file, JSON.stringify(data))

Ежедневная автоматическая резервная копия

Каждый день в 03:00 (по ташкентскому времени) для каждого активного бота папка DATA_DIR целиком архивируется, шифруется AES-256-GCM и хранится отдельно. Для ботов, у которых с момента последней резервной копии не было никакой активности, копия не создаётся (чтобы не тратить ресурсы впустую).

Срок хранения (retention)

ТарифСрок хранения
Start, Freelancer7 дней
Pro14 дней
Business30 дней

Копии с истёкшим сроком удаляются автоматически. В панели, в разделе Бот → Резервные копии, вы видите все доступные копии с датой и размером.

Ручная резервная копия

В любой момент можно создать дополнительную копию кнопкой «Создать копию сейчас» — например, перед крупными изменениями.

Восстановление из резервной копии

При нажатии кнопки «Восстановить» текущее состояние сначала автоматически сохраняется как «копия перед восстановлением» (даже если нажали по ошибке, ничего не потеряется), затем DATA_DIR возвращается к состоянию выбранной копии, и бот ненадолго перезапускается.

Скачивание резервной копии

Кнопка «Скачать» создаёт подписанную ссылку, действующую 24 часа, — по ней можно сохранить зашифрованный файл на свой компьютер. Если срок ссылки истёк или она подделана, скачать файл не получится.

А если я использую внешнюю базу данных?

Если ваш бот подключается к внешнему сервису — PostgreSQL, MongoDB, Redis и т. п. — через DATABASE_URL, проверка тоже считает это «правильным» вариантом, но учтите: Botxona делает резервные копии только DATA_DIR. За резервное копирование внешней базы полностью отвечаете вы.

Следующий шаг

Правила кода, которые защищают от потери данных: 6 правил — пункт 5. О том, почему данные не теряются, когда бот засыпает и просыпается: Сон и пробуждение.