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

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

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

Полный бэкап включает:

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

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

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

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"

# Passphrase разблокировки, если включён protect-secret
if [ -f /etc/freedom-mess/config-passphrase ]; then
  cp /etc/freedom-mess/config-passphrase "$BACKUP_DIR/config-passphrase"
fi

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

Если passphrase попадает в тот же архив, зашифруйте архив или перенесите passphrase в отдельную запись password manager перед хранением вне сервера.

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

Настройте 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. Если в конфиге есть [encrypted_secret], восстановите файл passphrase с правами 0600 или настройте systemd credential
  6. Запустите сервер: sudo systemctl start freedom-mess
Сервер проверяет целостность базы данных при запуске. Если восстановленная база проходит проверку, сервер запускается нормально.

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

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

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