Svetainės perkėlimas į naują VPS: rsync ir DB kopija
Svetainės perkėlimas į naują serverį susiveda į tris dalykus: nukopijuoti failus, perkelti duomenų bazę ir perjungti domeną. Jei viską darysite iš eilės ir patikrinsite svetainę prieš keisdami DNS, migracija praeis beveik be prastovos.
Migracijos planas
- Paruošti naują VPS (žiniatinklio serveris, PHP, duomenų bazė).
- Nukopijuoti svetainės failus per
rsync. - Perkelti duomenų bazę kopija.
- Patikrinti svetainę naujame serveryje pagal IP.
- Perjungti DNS ir palaukti, kol pasklis pakeitimai.
1 žingsnis. Naujo serverio paruošimas
Įdiekite tokią pačią aplinką kaip sename serveryje (pavyzdžiui, LEMP) ir sukurkite tuščią duomenų bazę bei vartotoją. Sukonfigūruokite SSH prieigą tarp serverių — patogu sugeneruoti raktą sename ir pridėti jį į naują:
ssh-keygen -t ed25519
ssh-copy-id user@NEW_SERVER_IP
2 žingsnis. Failų kopijavimas per rsync
rsync perkelia tik pasikeitusius failus ir išsaugo teises. Paleiskite iš seno serverio:
rsync -avz --progress /var/www/example.com/ \
user@NEW_SERVER_IP:/var/www/example.com/
Vėliavėlės: -a — išsaugoti teises, savininkus ir simbolines nuorodas, -z — suspaudimas kanale, -v — išsami išvestis. Pasvirasis brūkšnys šaltinio gale reiškia „katalogo turinį“.
Didelei svetainei atlikite išankstinę sinchronizaciją iš anksto, o galutinę — prieš pat perjungimą, kad pasivytumėte naujausius pakeitimus.
3 žingsnis. Duomenų bazės perkėlimas
Sename serveryje sukurkite kopiją. MySQL/MariaDB atveju:
mysqldump --single-transaction -u root -p app_db | gzip > app_db.sql.gz
Nukopijuokite ją į naują serverį:
rsync -avz app_db.sql.gz user@NEW_SERVER_IP:/tmp/
Naujame serveryje importuokite:
gunzip < /tmp/app_db.sql.gz | mysql -u root -p app_db
PostgreSQL komandos analogiškos:
pg_dump -Fc app_db > app_db.dump
# naujame serveryje:
pg_restore -d app_db --clean app_db.dump
4 žingsnis. Svetainės konfigūracijos taisymas
Atnaujinkite prisijungimo prie duomenų bazės eilutę programos konfigūracijoje (pavyzdžiui, wp-config.php, .env) — hostą, bazės pavadinimą, vartotoją, slaptažodį. Patikrinkite katalogų teises:
sudo chown -R www-data:www-data /var/www/example.com
5 žingsnis. Patikra prieš DNS perjungimą
Nekeisdami DNS, patikrinkite svetainę naujame serveryje pakeisdami domeną savo kompiuterio hosts faile:
NEW_SERVER_IP example.com
(Linux ir macOS sistemose tai /etc/hosts.) Atidarykite svetainę — jei viskas veikia, galima perjungti domeną. Po patikros eilutę iš hosts pašalinkite.
6 žingsnis. DNS perjungimas
Iš anksto, likus parai iki perkėlimo, sumažinkite A įrašo TTL (pavyzdžiui, iki 300 sekundžių) — tada pakeitimas pasklis greičiau. Pakeiskite A įrašą į naujo serverio IP ir stebėkite:
dig +short example.com
Kol DNS atsinaujina pas tiekėjus, dalis srauto dar eina į seną serverį — todėl neišjunkite jo bent parą.
Kontrolinis sąrašas po perkėlimo
| Patikra | Kaip |
|---|---|
| Svetainė atsidaro | pagal domeną po DNS pakeitimo |
| Bazė prijungta | žurnaluose nėra ryšio klaidų |
| Failų teisės | chown www-data, įkėlimai veikia |
| SSL | iš naujo išduoti sertifikatą su certbot |
| Cron užduotys | crontab perkelti rankomis |
Dažni klausimai
Kaip perkelti svetainę be prastovos?
Sinchronizuokite failus ir bazę iš anksto, patikrinkite svetainę per hosts, tada atlikite galutinę sinchronizaciją ir perjunkite DNS. Seną serverį palikite įjungtą parą.
Kodėl rsync neišsaugo teisių?
Paleiskite su vėliavėle -a (archyvinis režimas) ir iš vartotojo, turinčio pakankamai teisių; visiškam savininkų išsaugojimui gali prireikti sudo ir --numeric-ids.
Ar reikia perkelti SSL sertifikatą? Paprasčiau jį iš naujo išduoti su certbot naujame serveryje po DNS perjungimo — tai užtrunka minutę.
Kodėl po perkėlimo dalis lankytojų mato seną svetainę? DNS talpinamas tiekėjų pusėje pagal TTL. Sumažinkite TTL iš anksto ir palaukite kelias valandas po įrašo pakeitimo.
Naujam serveriui savo projektui rinkitės konfigūraciją su atsarga: žiūrėkite VPS serverio nuoma, o CMS svetainėms — WordPress VPS.