بک آپ و restore سرور مجازی

بک آپ

با SSH وارد سرور شو و یک بکاپ از دیتابیس‌ها بگیر:

mkdir-p /root/full-backup-datamysqldump \--all-databases \--single-transaction \--routines \--events \--triggers \  > /root/full-backup-data/all-databases.sql

اطلاعات پکیج‌ها و سرویس‌ها رو هم ذخیره کن:

dpkg-query -W > /root/full-backup-data/installed-packages.txtapt-mark showmanual > /root/full-backup-data/manual-packages.txtsystemctl list-unit-files --state=enabled \  > /root/full-backup-data/enabled-services.txt

بعد یک فایل فشرده از تقریباً تمام اطلاعات ماندگار VPS بساز:

tar \--acls \--xattrs \--numeric-owner \-czpf /root/gheimatban-vps-full-backup.tar.gz \--exclude=/proc \--exclude=/sys \--exclude=/dev \--exclude=/run \--exclude=/tmp \--exclude=/mnt \--exclude=/media \--exclude=/lost+found \--exclude=/swapfile \--exclude=/var/lib/mysql \--exclude=/root/gheimatban-vps-full-backup.tar.gz \  /

این فایل شامل چیزهایی مثل این‌ها میشه:

/var/www/etc/nginx/etc/systemd/etc/letsencrypt/root/home/opt/usrتنظیمات PHPپروژه‌های NodeWordPress / ElementorUploads.envCertificateهاو Dump کامل دیتابیس‌ها

بعد چک کن:

ls-lh /root/gheimatban-vps-full-backup.tar.gz

حالا دقیقاً از همین FileZilla

همون صفحه‌ای که الان عکسش رو فرستادی، سمت چپ Server روی /root هستی.

بعد از ساخته‌شدن فایل، Refresh کن. باید ببینی:

gheimatban-vps-full-backup.tar.gz

سمت راست FileZilla برو مثلاً:

D:\Gheimatban Backup\

بعد فایل gheimatban-vps-full-backup.tar.gz رو از سمت Server بکش بنداز سمت کامپیوتر.

ری استور روی سرور جدید

بهتره VPS ایران رو هم Debian 13 x86_64 بگیری تا محیطش تا جای ممکن شبیه سرور فعلی باشه. Debian 13 در حال حاضر MariaDB 11.8.6 داره که با نسخه فعلی سرورت هم‌خوانه.

فرض کنیم IP سرور جدید این باشه:

NEW_IP

و فایل روی دسکتاپ ویندوز باشه:

C:\Users\Iman\Desktop\gheimatban-vps-full-backup.tar.gz

اول از PowerShell:

scp"C:\Users\Iman\Desktop\gheimatban-vps-full-backup.tar.gz"root@NEW_IP:/root/

بعد:

ssh-oServerAliveInterval=20-oServerAliveCountMax=6root@NEW_IP

چون SSH ممکنه قطع بشه، اولین کار:

apt updateapt install -y tmuxtmux new -s restore

حالا حتی اگر SSH قطع شد، Restore ادامه پیدا می‌کنه.

نصب نرم‌افزارهای پایه

داخل VPS:

apt updateapt install -y \  ca-certificates \curl \  xz-utils \  tar \  gzip \  unzip \  rsync \git \  nginx \  mariadb-server \  php-fpm \  php-cli \  php-mysql \  php-curl \  php-gd \  php-mbstring \  php-xml \  php-zip \  certbot \  python3-certbot-nginx

نصب دقیق Node.js فعلی

سرور فعلی‌مون Node 22.23.2 داره. نسخه رسمی Linux x64 همین نسخه از سایت Node موجوده.

برای اینکه محیط جدید تقریباً عین قبلی باشه:

cd /tmpcurl-fLO https://nodejs.org/dist/v22.23.2/node-v22.23.2-linux-x64.tar.xz

Hash رسمی:

echo"d60acfe00a2932254bb0ad20e01b0d74397a0875595de719654b214f4b03f307  node-v22.23.2-linux-x64.tar.xz" \  | sha256sum -c-

باید بگه:

OK

بعد:

mkdir-p /opt/nodetar -xJf node-v22.23.2-linux-x64.tar.xz \-C /opt/node

Symlinkها:

ln-sfn /opt/node/node-v22.23.2-linux-x64/bin/node /usr/local/bin/nodeln-sfn /opt/node/node-v22.23.2-linux-x64/bin/npm /usr/local/bin/npmln-sfn /opt/node/node-v22.23.2-linux-x64/bin/npx /usr/local/bin/npx

چک:

node-vnpm-v

باید Node این باشه:

v22.23.2

باز کردن بکاپ در یک محیط امن

مستقیم روی / Extract نکن.

mkdir-p /restore/gheimatban

بعد:

tar \--acls \--xattrs \--numeric-owner \-xzpf /root/gheimatban-vps-full-backup.tar.gz \-C /restore/gheimatban

حالا مثلاً:

ls-lah /restore/gheimatban/var/www

و:

ls-lah /restore/gheimatban/root/full-backup-data

باید پروژه‌ها و all-databases.sql رو ببینی.

برگرداندن پروژه‌ها و سایت‌ها

کل /var/www:

rsync -aHAX--numeric-ids \  /restore/gheimatban/var/www/ \  /var/www/

این شامل Backend، Super Admin و فایل‌های PHP/WordPress/Elementor موجود در /var/www میشه.

برگرداندن Nginx

rsync -aHAX--numeric-ids \  /restore/gheimatban/etc/nginx/ \  /etc/nginx/

SSLهای Let’s Encrypt:

if [ -d /restore/gheimatban/etc/letsencrypt ]; then  rsync -aHAX--numeric-ids \    /restore/gheimatban/etc/letsencrypt/ \    /etc/letsencrypt/fi

Firebase و تنظیمات اختصاصی قیمت‌بان:

if [ -d /restore/gheimatban/etc/gheimatban ]; then  rsync -aHAX--numeric-ids \    /restore/gheimatban/etc/gheimatban/ \    /etc/gheimatban/fi

اگر VPS جدید هم Debian 13 باشه، تنظیمات PHP رو هم می‌تونیم برگردونیم:

if [ -d /restore/gheimatban/etc/php ]; then  rsync -aHAX--numeric-ids \    /restore/gheimatban/etc/php/ \    /etc/php/fi

برگرداندن سرویس‌های قیمت‌بان

فایل‌های systemd اختصاصی:

find /restore/gheimatban/etc/systemd/system \-maxdepth1 \  \( -name'gheimatban*.service'-o-name'gheimatban*.timer' \) \-execcp-a {} /etc/systemd/system/ \;

بعد:

systemctl daemon-reload

GitHub SSH Keyها

اگر سرور قبلی برای Pull از GitHub کلید SSH داشته:

if [ -d /restore/gheimatban/root/.ssh ]; then  rsync -aHAX \    /restore/gheimatban/root/.ssh/ \    /root/.ssh/fi

بعد:

chmod700 /root/.ssh

برگرداندن MariaDB

اول:

systemctl enable --now mariadb

چک نسخه:

mariadb --version

بعد دیتابیس کامل:

mariadb \  < /restore/gheimatban/root/full-backup-data/all-databases.sql

این روش استاندارد Restore برای Dump ساخته‌شده توسط mariadb-dumpـه.

بعد:

systemctl restart mariadb

و چک:

mariadb -e"SHOW DATABASES;"

باید دیتابیس gheimatban و دیتابیس سایت PHP/WordPress رو ببینی.

Build کردن Backend

cd /var/www/gheimatban-server

بعد:

npm cinpm run typechecknpm testnpm run build

اگر همه پاس شد:

systemctl enable gheimatbansystemctl restart gheimatban

چک:

systemctl status gheimatban --no-pager

و:

curl-fsS http://127.0.0.1:4000/health

Build کردن Super Admin

cd /var/www/gheimatban-super-admin

بعد:

npm cinpm test

چون npm test خودش Build هم می‌گیره.

بعد:

systemctl enable gheimatban-super-adminsystemctl restart gheimatban-super-admin

چک:

systemctl status gheimatban-super-admin --no-pager

پاکسازی خودکار تصاویر

Timer رو هم دوباره فعال کن:

systemctl enable --now gheimatban-media-cleanup.timer

چک:

systemctl status gheimatban-media-cleanup.timer --no-pager

PHP / Elementor

اول ببین اسم PHP-FPM چیه:

systemctl list-unit-files | grep-E'^php.*-fpm\.service'

مثلاً اگر خروجی:

php8.4-fpm.service

بود:

systemctl restart php8.4-fpm

بعد Nginx رو قبل از Restart تست کن:

nginx -t

اگر گفت:

syntax is oktest is successful

اون وقت:

systemctl restart nginx

چک نهایی سرویس‌ها

systemctl status mariadb --no-pagersystemctl status nginx --no-pagersystemctl status gheimatban --no-pagersystemctl status gheimatban-super-admin --no-pager

و PHP:

systemctl status php8.4-fpm --no-pager

اگر اسمش چیز دیگه بود همون اسم واقعی رو بزن.

بعد DNS دامنه‌ها رو از IP آلمان به IP ایران تغییر می‌دیم و API و سایت‌ها رو از بیرون تست می‌کنیم.

وقتی مطمئن شدیم همه‌چیز سالمه

فایل موقت Backup روی VPS جدید رو پاک می‌کنیم:

rm-f /root/gheimatban-vps-full-backup.tar.gz

و پوشه Extract موقت:

rm-rf /restore/gheimatban

نسخه‌ای که روی کامپیوتر خودت داری رو طبیعتاً نگه می‌داری.