НОВИНА
Checkout Files Upload за WooCommerce приема файлове от всеки. Вижте дали Вашият е засегнат
WordPress

Как да преместите WordPress сайт на нов хостинг без престой

# ЕтикетиМестенеДомейни
Екипът на WPhost14 мин четене

WordPress сайт може да се премести на нов хостинг без престой, защото старият и новият хостинг могат да работят едновременно. Докато копирате сайта, посетителите виждат стария. До новия стигат чак когато смените DNS записите, а дотогава вече сте го прегледали и проверили.

Редът има значение. Първо намалявате TTL на DNS записите, после копирате файловете и базата и ги качвате на новия хостинг. Преди да смените DNS, тествате сайта през hosts файла на компютъра си и уреждате пощата. Накрая сменяте DNS, издавате SSL сертификата и проверявате с dig.

Подгответе се, преди да копирате каквото и да е

Регистрацията на домейна и DNS записите му са две отделни неща. Записите може да са при регистратора, в Cloudflare или при стария хостинг. Ако са при него, пренесете ги, преди да го прекратите, а ако при него е и регистрацията, вижте ръководството за трансфера на домейн. Командите по-долу показват накъде сочи домейнът.

Bash
# От Вашия компютър. Сървъри за имена, поща и запис на сайта.
dig +short primer.bg NS
dig +short primer.bg MX
dig +noall +answer primer.bg A
# Същото, но питате директно един от сървърите за имена от първия ред.
dig @ИМЕ_НА_NS_СЪРВЪР +noall +answer primer.bg A

Във втората колона на отговора е TTL в секунди. Това е времето, през което другите сървъри помнят отговора. Обикновеният DNS сървър показва колко време е останало, а истинската стойност връща сървърът за имена на домейна. Запишете си TTL и всички записи от DNS зоната.

Според документацията на Cloudflare по-дългият TTL ускорява заявките, но промените влизат в сила по-бавно. Затова поне един ден преди преместването намалете TTL на A записите на домейна и на www до 300 секунди, тоест 5 минути. Ако старият TTL е по-голям от един ден, започнете съответно по-рано, защото новата стойност важи едва когато изтече кешът със старата.

Направете пълно копие на файловете и базата

Сайтът се състои от две части и Ви трябват и двете. Файловете са цялата папка на сайта, с wp-content (теми, плъгини, снимки), wp-config.php и скрития .htaccess. В базата са страниците, записите, коментарите и настройките.

Ако старият хостинг има Terminal в cPanel и WP-CLI, това става с няколко реда. Първата команда записва базата в SQL файл, а втората прави архив на папката на сайта. И двата файла се записват в началната папка, не в public_html, за да не могат да се свалят от браузър.

Bash
# cPanel > Terminal на стария хостинг
cd ~/public_html
wp db export ~/primer-bg.sql
zip -r ~/primer-bg-files.zip .

Точката в края на командата zip включва и скритите файлове като .htaccess. Ако нямате Terminal, ползвайте интерфейса. В File Manager включете Show Hidden Files от Settings, маркирайте всичко в папката на сайта, изберете Compress и свалете архива. Базата експортирайте от phpMyAdmin с Export, метод Quick и формат SQL.

Ако в сайта постоянно постъпват нови данни, например поръчки, коментари или запитвания от форми, направете копието в часа с най-малко посещения.

Качете сайта на новия хостинг

На новия хостинг работата минава през пет стъпки.

  1. Уверете се, че домейнът е добавен към акаунта в cPanel, като основен или допълнителен, за да има сайт за него на новия сървър.
  2. Създайте база и потребител от MySQL Database Wizard или от Manage My Databases, не от phpMyAdmin, защото cPanel не следи създадените така бази и бекъпите им не работят. Дайте на потребителя права върху базата. Хостингът може да добавя към имената префикс с името на акаунта, затова запишете точните имена.
  3. Качете архива в папката на сайта и го разархивирайте с Extract във File Manager.
  4. Въведете във wp-config.php новите данни за базата.
  5. Импортирайте SQL файла.
PHP
// wp-config.php на новия хостинг
define( 'DB_NAME', 'ВАШИЯТ_ПОТРЕБИТЕЛ_primer' );
define( 'DB_USER', 'ВАШИЯТ_ПОТРЕБИТЕЛ_primer' );
define( 'DB_PASSWORD', 'ВАШАТА_ПАРОЛА' );
define( 'DB_HOST', 'localhost' );

DB_HOST е localhost, освен ако новият хостинг не Ви е дал друг адрес. Останалото във файла остава както е, защото идва от стария сайт. Импортът може да стане от phpMyAdmin с Import или от Terminal. Командата чете данните за достъп от wp-config.php, затова я пуснете в папката на сайта.

Bash
# cPanel > Terminal на новия хостинг, в папката на сайта
wp db import ~/primer-bg.sql

Ако SQL файлът е твърде голям за phpMyAdmin, ползвайте Terminal, защото лимитите на PHP за размер, памет и време ограничават качването през браузъра. Адресът на сайта остава същият, затова не пипайте siteurl и home. Търсенето и замяната в базата са нужни само при смяна на домейна. Ако видите „Error establishing a database connection“, първо проверете името, потребителя, паролата и хоста в wp-config.php.

Тествайте новия сайт през hosts файла

Докато DNS още сочи към стария хостинг, можете да накарате само своя компютър да отваря домейна от новия сървър. Това става с hosts файла, в който записвате IP адреса на новия сървър за домейна. Компютърът проверява първо този файл, преди да попита DNS, а всички останали продължават да виждат стария сайт. IP адреса ще намерите в писмото от новия хостинг или ще го получите от поддръжката му.

На Windows отворете Notepad с Run as administrator, после File, Open и пътя от първия ред на блока (сменете типа на файловете на All files, ако не виждате файла). На macOS ползвайте командата по-долу. Редът е един и същ и за двете системи.

Текст
# Windows: C:\Windows\System32\drivers\etc\hosts
# macOS: /etc/hosts
203.0.113.10  primer.bg www.primer.bg
Bash
# Terminal на macOS
sudo nano /etc/hosts

Запазете файла. На macOS запазвате с Ctrl+O и Enter и излизате с Ctrl+X. На Windows изчистете DNS кеша, а ако браузърът още показва стария сайт, затворете го напълно и го отворете отново.

Текст
# Windows, Command Prompt
ipconfig /flushdns

Отворете https://primer.bg в нов прозорец. Браузърът може да предупреди за сертификата, защото новият сървър още няма такъв за домейна Ви. Продължете само ако знаете със сигурност, че hosts файлът сочи към новия Ви сървър. За да проверите, че сте на него, качете в папката на сайта файл proba.txt (изтрийте го след теста) и го отворете на /proba.txt. Ако браузърът не Ви позволява да продължите, ползвайте curl.

Bash
# От Вашия компютър. Заявка към новия сървър, без да пипате hosts файла.
# Опцията -k пропуска проверката на сертификата, само за този тест.
curl -skI --resolve primer.bg:443:203.0.113.10 https://primer.bg/

Прегледайте началната страница, вътрешните страници, снимките, входа в админа и формите. При грешка 500 преименувайте .htaccess на .htaccess_old, защото според WordPress най-честата причина е повреден .htaccess, и после запазете Settings > Permalinks, за да се създаде нов. Проверете и версията на PHP в Tools > Site Health > Info > Server. Ако е по-нова от старата, някой плъгин може да не е готов за нея.

Запазете пощата при смяната

Пощата се доставя според MX записите. MX записът сочи към име, а то има собствен A запис. Ако MX сочи към самия домейн или към mail.primer.bg и смените A записа на това име, пощата също тръгва към новия сървър, където още няма Ваши пощенски кутии. Проверете накъде сочи MX и какъв A запис има името от отговора.

Ако пощата е при друг доставчик, например Google Workspace или Microsoft 365, MX записите не се пипат. В новия cPanel отворете Email Routing и изберете Remote Mail Exchanger. Автоматичното разпознаване гледа само зоната на сървъра, не прави истинска DNS заявка и може да реши, че пощата е локална. Тогава писма от сайта до адреси на Вашия домейн, например от формата за контакт, може да останат на сървъра. Грешна настройка тук може да спре получаването на поща, затова при съмнение попитайте хостинга.

Ако пощата е на стария хостинг, пренесете я отделно и след сайта. Създайте на новия хостинг същите кутии, добавете старата и новата кутия в пощенски клиент по IMAP и преместете папките от старата в новата. Сменете MX записите чак когато новите кутии са готови и им задайте нисък TTL.

Когато DNS зоната се мести заедно със сайта, копирайте и TXT записите. В тях са SPF, DKIM и DMARC, по които другите сървъри проверяват дали писмата от домейна Ви са истински. Как се проверяват, е описано в ръководството за SPF, DKIM и DMARC.

ЗаписКакво да направите при преместването
A на домейна и на wwwСменяте го към IP адреса на новия сървър, когато всичко е готово
MXНе го пипате, докато пощата не е готова на новото място, или изобщо, ако е при друг доставчик
TXT за SPF, DKIM и DMARCКопирате ги както са, ако DNS зоната се мести
CNAME и другите поддомейниКопирате ги както са, ако DNS зоната се мести

Сменете DNS записите без престой

Когато новият сайт е проверен и пощата е уредена, идва редът на DNS. Какво точно сменяте, зависи от това къде е зоната.

  • Зоната остава на същото място, при регистратора, в Cloudflare или при стария хостинг, ако го запазвате за DNS. Сменяте само A записите на домейна и на www към IP адреса на новия сървър. Това е най-бързият начин, защото важи TTL, който сте намалили.
  • Зоната се мести при новия хостинг. Първо създайте там всички записи наново, сравнете ги с dig към новите сървъри за имена и чак тогава сменете сървърите за имена при регистратора. Тази смяна минава през регистратора и може да стане видима по-късно от промяна на запис с нисък TTL. Ако домейнът има DNSSEC, първо го изключете при регистратора, защото според Cloudflare смяната на сървърите за имена при активен DNSSEC може да направи домейна недостъпен.
DNS
; Zone Editor в cPanel, панелът на регистратора или Cloudflare
primer.bg.      300  IN  A  203.0.113.10
www.primer.bg.  300  IN  A  203.0.113.10

Докато кешовете се обновят, част от посетителите са на стария сървър, а част на новия. При блог това няма значение. При магазин или сайт с форми поръчка, коментар или запитване може да попадне на стария сървър след Вашето копие и да липсва на новия. Затова малко преди смяната направете ново копие на базата от стария сайт и го импортирайте на новия със същите команди, в час с малко поръчки. След смяната проверявайте и стария сайт и пренесете ръчно каквото е пристигнало там.

Издайте SSL сертификата след смяната на DNS

Докато домейнът сочи към стария сървър, на новия не може да се издаде сертификат. Преди да издаде сертификат, AutoSSL проверява дали домейнът е Ваш, а най-често това става с проверочен файл, който се отваря на адреса на домейна. Затова проверката минава чак след смяната на DNS.

Отворете SSL/TLS Status в cPanel и изберете Run AutoSSL. Когато сертификатът е издаден, отворете https://primer.bg и https://www.primer.bg и проверете катинара. В Tools > Site Health > Info > WordPress редът „Is this site using HTTPS?“ също трябва да потвърждава, че сайтът ползва HTTPS.

Проверете с dig и задръжте стария хостинг още около седмица

Командите по-долу питат различни сървъри, за да видите дали всички вече знаят новия адрес.

Bash
# От Вашия компютър. Очаквате IP адреса на новия сървър, 203.0.113.10.
dig +short primer.bg A
dig @1.1.1.1 +short primer.bg A
dig @8.8.8.8 +short primer.bg A

Ако на Windows нямате dig, ползвайте nslookup primer.bg 1.1.1.1. Когато всички отговарят с новия адрес, махнете реда от hosts файла, върнете TTL на по-висока стойност и изтрийте SQL файла и архива и от двата хостинга.

Задръжте стария хостинг още около седмица. Така имате път назад, а пощата и посетителите, които още са на стария сървър, не се губят. През това време проверявайте и двете места за нова поща и поръчки. Когато всичко е на новото място, прекратете стария хостинг, но първо се уверете, че при него не са домейнът Ви и DNS зоната му.

Чеклист

  • Старият хостинг остава активен до края.
  • Известно е къде са регистрацията и DNS зоната, а записите са запазени.
  • TTL на записите на сайта е 300 секунди поне от един ден.
  • Има копие на файловете и базата, а SQL файлът и архивът не са в папката на сайта.
  • Домейнът е добавен на новия хостинг, базата е импортирана, а wp-config.php е с новите данни.
  • Сайтът е прегледан през hosts файла или с curl.
  • MX записите са пипнати само когато новите кутии са готови.
  • Малко преди смяната е направено ново копие на базата.
  • A записите сочат към новия сървър, dig го потвърждава, а SSL работи без предупреждение.
  • Редът е махнат от hosts файла, а TTL е върнат на по-висока стойност.
  • Старият хостинг се пази още около седмица.

Ако не искате да се занимавате с преместването

Малък сайт без поща на същия сървър се мести сравнително лесно. Магазините и сайтовете с пощенски кутии на сървъра изискват повече внимание, а грешка в DNS или в пощата се усеща веднага.

Ако местите сайта, защото е надраснал споделения хостинг, при преместването на собствен сървър го преместваме без престой в Hetzner или AWS, на сървър, който е Ваш. Разкажете ни за сайта и пощата му във формата за запитване.

Често задавани въпроси

Може ли сайт с WordPress да се премести на нов хостинг без прекъсване?

Да, защото старият и новият хостинг могат да работят едновременно. Докато копирате сайта, посетителите виждат стария, а към новия стигат едва когато смените записите в DNS, след като сте го прегледали и проверили. Не прекратявайте стария хостинг, докато не приключите.

Какво е TTL и защо да го намаля преди преместването?

TTL е времето в секунди, за което другите сървъри помнят отговора за домейна. Според документацията на Cloudflare по-дълъг TTL ускорява заявките, но забавя влизането на промените в сила. Затова поне ден преди преместването намалете TTL на записите A за домейна и за www на 300 секунди, а ако старият TTL е по-дълъг от ден, започнете толкова по-рано.

Как да направя пълно копие на сайта за преместване?

Трябват Ви и двете части, цялата папка на сайта с wp-content, wp-config.php и скрития .htaccess, и базата данни. С Terminal и WP-CLI базата се записва с wp db export, а папката се архивира, като двата файла отиват в домашната папка, а не в public_html. Без Terminal архивирайте папката с Compress в File Manager, след като включите Show Hidden Files, и експортирайте базата от phpMyAdmin.

Как да проверя сайта на новия хостинг, преди да сменя DNS?

С файла hosts на компютъра си, където записвате IP адреса на новия сървър за домейна. Тогава само Вашият компютър отваря домейна от новия сървър, а всички други виждат стария сайт. Прегледайте началната страница, вътрешните страници, изображенията, входа в админа и формите, а накрая махнете реда от файла hosts.

Какво става с имейла при смяна на хостинга?

Пощата следва записите MX. Ако MX сочи към самия домейн или към mail.primer.bg и смените записа A на това име, пощата тръгва към новия сървър, където още няма кутии. Ако пощата е на стария хостинг, преместете я отделно и по-късно от сайта и сменете MX едва когато новите кутии са готови, а ако е при друг доставчик, не пипайте MX.

Как да не загубя поръчки по време на преместването на магазина?

Докато кешовете се обновят, част от посетителите са на стария сървър, а част на новия, така че поръчка, коментар или запитване може да попадне на стария сървър след копието Ви. Малко преди смяната направете ново копие на базата от стария сайт и го импортирайте в новия в час с малко поръчки. След смяната следете и стария сайт и пренесете ръчно каквото е пристигнало там.

Кога да издам SSL сертификата на новия хостинг?

След смяната на DNS. Докато домейнът сочи към стария сървър, на новия не може да се издаде сертификат, защото AutoSSL проверява, че домейнът е Ваш, най-често с файл, който се отваря на адреса на домейна. Отворете SSL/TLS Status в cPanel, изберете Run AutoSSL и проверете катинара на адреса със и без www.

Колко време да пазя стария хостинг след преместването?

Около още една седмица. Така имате път назад, а пощата и посетителите, които още са на стария сървър, не се губят. Преди да прекратите стария хостинг, проверете, че той не държи домейна Ви и зоната му в DNS.

Източници

# ЕтикетиМестенеДомейни
СподелетеFacebookXLinkedIn