🔄 Миграция сервера Prosody

Полный перенос XMPP сервера (Debian 12) с сохранением пользователей, настроек и сертификатов Let's Encrypt. Простой и надёжный метод — архив из трёх папок.

⚡ Совместимо с Prosody 0.12+ | Debian 12
📌

Что происходит с сертификатами?

В статье «Поднимаем свой Jabber/XMPP сервер в 2025 году» сертификаты получаются через Let's Encrypt в /etc/letsencrypt/live/, а затем командой prosodyctl --root cert import копируются во внутреннее хранилище Prosody — /etc/prosody/certs/.

📁 Оригиналы
/etc/letsencrypt/live/ваш_домен/
Автообновление certbot
🔐 Копии (Prosody)
/etc/prosody/certs/
Используются сервером

Поэтому при переезде нужно забрать все три ключевые директории, чтобы восстановить и конфигурацию, и сертификаты, и историю переписки.

1️⃣

На старом сервере — создаём полный архив

Останавливаем Prosody, чтобы гарантировать целостность данных, и архивируем три папки.

# Остановить сервер
sudo systemctl stop prosody

# Создать архив со всеми необходимыми данными
sudo tar -czf /tmp/prosody-full-backup.tar.gz \
    /etc/prosody \
    /etc/letsencrypt \
    /var/lib/prosody

# Запустить Prosody обратно
sudo systemctl start prosody
💡 Почему именно эти три папки?
/etc/prosody — конфиги + скопированные сертификаты (prosodyctl import)
/etc/letsencrypt — живые сертификаты и настройки автоматического обновления
/var/lib/prosody — все данные пользователей (аккаунты, ростер, архивы MAM, PubSub)
2️⃣

Копируем архив на новый сервер

Используйте WinSCP, scp или любую другую утилиту для передачи файлов. Просто переместите файл /tmp/prosody-full-backup.tar.gz на новый сервер (например, в ту же папку /tmp/).

# Пример через scp (выполняется на локальной машине)
scp user@старый_сервер:/tmp/prosody-full-backup.tar.gz /tmp/
scp /tmp/prosody-full-backup.tar.gz user@новый_сервер:/tmp/
🔐 Убедитесь, что архив скопирован без повреждений. Рекомендуется проверить размер и контрольную сумму (опционально).
3️⃣

На новом сервере — установка и восстановление

Устанавливаем необходимые пакеты, извлекаем архив, исправляем права доступа.

# 1. Установить Prosody и certbot
sudo apt update
sudo apt install prosody certbot -y

# 2. Остановить Prosody перед распаковкой
sudo systemctl stop prosody

# 3. Распаковать архив в корневую систему (поверх)
sudo tar -xzf /tmp/prosody-full-backup.tar.gz -C /

# 4. Назначить правильных владельцев
sudo chown -R prosody:prosody /etc/prosody /var/lib/prosody
sudo chown -R root:root /etc/letsencrypt

# 5. Запустить Prosody
sudo systemctl start prosody

# 6. Проверить статус
sudo systemctl status prosody
⚠️ Важно: /etc/letsencrypt должен принадлежать root:root — это стандартная схема certbot. Не меняйте владельца на prosody.
4️⃣

Настроить автоматическое обновление сертификатов

Чтобы после каждого продления Let's Encrypt сертификаты автоматически импортировались в Prosody, создадим скрипт в хуке renew.

# Создать файл хука
sudo nano /etc/letsencrypt/renewal-hooks/deploy/prosody.sh

Вставить содержимое:

#!/bin/sh
/usr/bin/prosodyctl --root cert import /etc/letsencrypt/live
# Сделать скрипт исполняемым
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/prosody.sh

# Протестировать обновление (опционально — сухая проверка)
sudo certbot renew --dry-run
✅ Теперь каждые 60-90 дней certbot будет продлевать сертификаты, а хук автоматически скопирует их в Prosody. Сервер продолжит работать без ручного вмешательства.

Финальная проверка

После перезапуска сервера убедитесь, что всё функционирует корректно:

  • Логи Prosody: sudo journalctl -u prosody -n 30 --no-pager
  • Проверка конфигурации: sudo prosodyctl check
  • Подключение любым клиентом (Conversations, Gajim, Siskin) с вашим JID и паролем
  • Проверка сертификата в браузере (если настроен веб-интерфейс или файлообмен)
🧪 Совет: Создайте тестового пользователя перед миграцией, чтобы убедиться, что история и ростер перенесены. Если всё работает — миграция прошла успешно!
🔑

Как пользователю сменить пароль?

После миграции старые пароли остаются прежними (они хранятся в /var/lib/prosody). Если нужно сменить пароль — вот два способа:

👑 Администратор (sudo)
sudo prosodyctl passwd user@example.com
Команда запросит новый пароль дважды.
🌐 Самостоятельный сброс
Требуется модуль mod_email_pass. Пользователь получает ссылку на почту.
Уточните у администратора, включена ли опция.
# Пример смены пароля через prosodyctl
sudo prosodyctl passwd alice@chat.example.com
📋

Шпаргалка: структура бекапа

Папка в архиве Что хранит Владелец после распаковки
/etc/prosody/ Конфигурация, модули, скопированные сертификаты prosody:prosody
/etc/letsencrypt/ Живые сертификаты, ключи, настройки renewal root:root
/var/lib/prosody/ Аккаунты, ростеры, история (MAM), конференции prosody:prosody

Итог: один архив, три команды на старом сервере — и полный перенос данных без потери сертификатов и пользовательского опыта.

⚠️

Частые ошибки и их решение

  • Ошибка «certificate file not found» — после распаковки забыли выполнить sudo prosodyctl --root cert import /etc/letsencrypt/live вручную (или хук не сработал). Запустите импорт вручную и перезапустите prosody.
  • Пользователи не могут войти — возможно, права на /var/lib/prosody сбросились. Выполните sudo chown -R prosody:prosody /var/lib/prosody.
  • certbot не обновляет сертификаты — проверьте, что домены прописаны в /etc/letsencrypt/renewal/ и порт 80/443 доступен (стандартный способ renewal). Запустите sudo certbot renew --force-renewal --dry-run для теста.
  • Prosody не стартует после импорта — проверьте синтаксис конфига: sudo prosodyctl check покажет строку ошибки.
🔁 Надёжность: Описанный метод совместим с Debian 12 и Prosody версии 0.12+. Главное — не копировать «живые» файлы по одному через WinSCP без архива, чтобы не потерять права и симлинки.