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

Регулярные бэкапы защищают данные от отказа оборудования, случайного удаления и других катастроф.

Что копировать

Полный бэкап состоит из трёх частей:

  1. База данных — файл SQLite со всеми сообщениями, пользователями и метаданными
  2. Загруженные файлы — каталог data/files/ с файлами пользователей
  3. Конфигурацияconfig.toml с мастер-секретом и ключами

Бэкап базы данных

Используйте встроенную команду для создания консистентного снимка:

freedom-mess backup -o /путь/к/бэкапу.db

Команда использует VACUUM INTO из SQLite, что безопасно при работающем сервере.

Не копируйте файл SQLite напрямую при работающем сервере. Это может привести к повреждённому бэкапу. Всегда используйте команду backup.

Скрипт полного бэкапа

#!/bin/bash
BACKUP_DIR="/backups/freedom-mess/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"

# База данных (безопасно при работающем сервере)
freedom-mess backup -o "$BACKUP_DIR/database.db"

# Загруженные файлы
cp -r /opt/freedom-mess/data/files/ "$BACKUP_DIR/files/"

# Конфигурация
cp /opt/freedom-mess/config.toml "$BACKUP_DIR/config.toml"

echo "Бэкап завершён: $BACKUP_DIR"

Автоматические бэкапы

Настройте cron для ежедневного запуска:

# Редактировать crontab
crontab -e

# Добавить строку (запуск ежедневно в 3:00)
0 3 * * * /opt/freedom-mess/backup.sh

Рекомендуется копировать бэкапы на удалённый сервер для защиты от катастроф.

Восстановление

  1. Остановите сервер: sudo systemctl stop freedom-mess
  2. Замените базу: cp backup.db /opt/freedom-mess/data/freedom-mess.db
  3. Восстановите файлы: cp -r files/ /opt/freedom-mess/data/files/
  4. Восстановите конфигурацию (при необходимости): cp config.toml /opt/freedom-mess/config.toml
  5. Запустите сервер: sudo systemctl start freedom-mess
Сервер проверяет целостность базы данных при запуске. Если восстановленная база проходит проверку, сервер запускается нормально.

Обслуживание SQLite

Freedom Messenger автоматически обслуживает базу данных:

  • Режим WAL — Write-Ahead Logging для параллельного чтения/записи
  • Таймаут блокировки — 5 секунд
  • Часовой WAL-чекпоинт — не даёт WAL-файлу расти бесконечно
  • Инкрементальный auto-vacuum — освобождает место при удалении данных
  • Проверка целостности при запуске — верифицирует консистентность базы