Полный перенос XMPP сервера (Debian 12) с сохранением пользователей, настроек и сертификатов Let's Encrypt. Простой и надёжный метод — архив из трёх папок.
В статье «Поднимаем свой Jabber/XMPP сервер в 2025 году» сертификаты получаются через Let's Encrypt в /etc/letsencrypt/live/, а затем командой prosodyctl --root cert import копируются во внутреннее хранилище Prosody — /etc/prosody/certs/.
/etc/letsencrypt/live/ваш_домен//etc/prosody/certs/Поэтому при переезде нужно забрать все три ключевые директории, чтобы восстановить и конфигурацию, и сертификаты, и историю переписки.
Останавливаем 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)
Используйте 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/
Устанавливаем необходимые пакеты, извлекаем архив, исправляем права доступа.
# 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.
Чтобы после каждого продления 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
После перезапуска сервера убедитесь, что всё функционирует корректно:
sudo journalctl -u prosody -n 30 --no-pagersudo prosodyctl checkПосле миграции старые пароли остаются прежними (они хранятся в /var/lib/prosody). Если нужно сменить пароль — вот два способа:
sudo prosodyctl passwd user@example.commod_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 |
Итог: один архив, три команды на старом сервере — и полный перенос данных без потери сертификатов и пользовательского опыта.
sudo prosodyctl --root cert import /etc/letsencrypt/live вручную (или хук не сработал). Запустите импорт вручную и перезапустите prosody./var/lib/prosody сбросились. Выполните sudo chown -R prosody:prosody /var/lib/prosody./etc/letsencrypt/renewal/ и порт 80/443 доступен (стандартный способ renewal). Запустите sudo certbot renew --force-renewal --dry-run для теста.sudo prosodyctl check покажет строку ошибки.