Был у меня VPS сервер на котором было несколько сайтов размещенных с помощью isp manager.
В какой-то момент я решил повысить тариф, чо привело к порче isp manager.
Со слов поддержки причина в установленной мной библиотеки которая сломала  isp manager и удаление которой не поможет восстановить isp manager.
В итоге я проверил все и выходит что причина действительно в этой библиотеке, но как оказалось моя ubuntu 20 устараела и пытаться натянуть для восстановления isp manager поверх старого не имеет смысл, так как все-равно нужно перебираться на другой сервер.
В итоге очередной переезд и на этот раз без веб интерфейса.

1. Копируем файлы сайтов

2. Пишем код на питоне который возьмет данные для доступа к базе из конфигурационных файлов joomla и wordpress и сделает бэкап сайтов

3. Сохраняем все что связано с Python

4. Не забываем про файлы systemd

5. Забываем о мелочах типа особых настроек серверов и почты

Переезжаем...

Может добавлю что-то. 

Если всё суда добавить то будет объемный труд. Но надо добавить :)

Должно получится примерно так:

Детальный план переезда с VPS (сломанный ISPmanager) на новый сервер

1. Подготовка перед переездом

  • Резервное копирование ВСЕГО (даже если что-то сломано):
    • tar -czvf backup_$(date +%F).tar.gz /var/www/ /etc/nginx/ /etc/apache2/ /home/ /etc/mysql/ /etc/php/
    • Проверить, что бэкапы целы (du -sh backup_*.tar.gz, попробовать распаковать в /tmp).
    • Можно использовать rsync для копирования на другой сервер или локальный ПК.

2. Копирование файлов сайтов

  • Ручное копирование (если ISPmanager сломан):
  • bashrsync -avz --progress /var/www/ user@new-server:/var/www/ rsync -avz --progress /home/user/ user@new-server:/home/user/
  • Copy
  • Проверка прав (chown -R www-data:www-data /var/www/).

3. Автоматизация бэкапов баз данных (Python-скрипт)

Пример кода для резервирования MySQL:

python

Copy

import os import subprocess import json from pathlib import Path def get_db_credentials(config_path, cms_type): if cms_type == "wordpress": with open(config_path / "wp-config.php") as f: content = f.read() db_name = content.split("DB_NAME', '")[1].split("'")[0] db_user = content.split("DB_USER', '")[1].split("'")[0] db_pass = content.split("DB_PASSWORD', '")[1].split("'")[0] db_host = content.split("DB_HOST', '")[1].split("'")[0] return db_name, db_user, db_pass, db_host elif cms_type == "joomla": with open(config_path / "configuration.php") as f: content = f.read() db_name = content.split("public $db = '")[1].split("'")[0] db_user = content.split("public $user = '")[1].split("'")[0] db_pass = content.split("public $password = '")[1].split("'")[0] db_host = content.split("public $host = '")[1].split("'")[0] return db_name, db_user, db_pass, db_host def backup_database(db_name, db_user, db_pass, db_host, output_dir): os.makedirs(output_dir, exist_ok=True) dump_file = f"{output_dir}/{db_name}_backup.sql" cmd = f"mysqldump -h {db_host} -u {db_user} -p'{db_pass}' {db_name} > {dump_file}" subprocess.run(cmd, shell=True, check=True) print(f"Backup saved to: {dump_file}") if __name__ == "__main__": websites = [ {"path": "/var/www/site1", "cms": "wordpress"}, {"path": "/var/www/site2", "cms": "joomla"} ] for site in websites: config_path = Path(site["path"]) db_name, db_user, db_pass, db_host = get_db_credentials(config_path, site["cms"]) backup_database(db_name, db_user, db_pass, db_host, "/backups/db")

4. Перенос Python-окружения

  • Экспорт зависимостей:
  • bashpip freeze > requirements.txt rsync -avz --progress /path/to/virtualenv/ user@new-server:/path/to/virtualenv/
  • Copy
  • Проверка версии Python (на новом сервере):
  • bashpython3 --version sudo apt install python3-venv # если нужно
  • Copy

5. Systemd-юниты и Cron-задачи

  • Копирование служб:
  • bashrsync -avz --progress /etc/systemd/system/my_service.service user@new-server:/etc/systemd/system/
  • Copy
  • Активация на новом сервере:
  • bashsudo systemctl daemon-reload sudo systemctl enable my_service sudo systemctl start my_service
  • Copy
  • Крон:
  • bashcrontab -l > cron_backup.txt scp cron_backup.txt user@new-server:~/ # На новом сервере: crontab cron_backup.txt
  • Copy

6. Восстановление почты (если нужно)

7. Настройка веб-сервера (Nginx/Apache)

  • Без ISPmanager придется вручную:
  • bashsudo apt install nginx mysql-server php-fpm sudo cp /backups/nginx/sites-available/* /etc/nginx/sites-available/ sudo ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/ sudo nginx -t # проверка конфига sudo systemctl restart nginx
  • Copy

8. Проверка после переезда

  • Тест сайтов: curl -I https://ваш-сайт (коды 200, 301).
  • Логи: tail -f /var/log/nginx/error.log.
  • Базы данных: подключиться и проверить таблицы.

Что можно добавить?

  • Мониторинг (например, netdata или prometheus + grafana).
  • Автоматические бэкапы (например, borgbackup + rclone на облако).
  • Infrastructure as Code (Ansible для настройки сервера).
  • Docker (чтобы изолировать сервисы и упростить миграции).

Говорят ISP manager сам делает существенную часть этой работы...