Вступ
Перенесення веб-сайту WordPress на новий сервер – непросте завдання, особливо коли мінімізація часу простою має вирішальне значення. У цій статті я покажу вам, як я успішно переніс свій сайт WordPress з одного Raspberry Pi на інший, скоротивши час простою лише на кілька хвилин. Цей покроковий посібник охоплює все: від налаштування LAMP і Certbot до резервного копіювання файлів і заміни SD-карт.

Основна причина такої міграції полягає в тому, що під час останнього невдалого відновлення системи багато сервісів на основній распбері пай не запустилися, проте сайт продовжував працювати, а саме служба апач та бази даних продовжували працювати коректно.
Оскільки на відновлення інших важливих сервісів знадобилося би багато часу, то мною було прийнято рішення на резервній распбері пай відновити роботу цього сайту, а інші сервіси довстановити пізніше.
Враховуючи факт, що сайт продовжував працювати коректно, то моя задача була відновити його паралельно на другому пристрої, щоб потім мені залишилося замінити карту пам’яті, і даунтайм роботи сайту зменшити до мінімуму.
Підготовка нової Raspberry Pi
За допомогою застосунка Raspberry Pi Imager встановити базову 64 бітну версію Raspberry Pi OS. Під час ініціалізації ввімкнути доступ по SSH та оновити систему в цілому:
sudo apt-get update
sudo apt-get upgrade
Під час оновлення користувач зіткнеться із зависанням процесу оновлення через наявність vnc сервера. Щоб продовжити оновлення без перешкод, необхідно видалити vnc сервер:
sudo apt-get remove realvnc-vnc-server
Після цього продовжити оновлення. Це особливість распбері пай 5. На распбері пай 4 з такої поведінки я не зустрічав.
Установка пакету сервісів LAMP
Після оновлення системи необхідно встановити ЛАМП стек
sudo apt install apache2 php libapache2-mod-php php-mysql mariadb-server
Також вордпрес іноді вимагає додаткові модулі
sudo apt install php-curl php-gd php-mbstring php-xml php-zip
Перевірка роботи Apache
sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-04-09 11:37:31 EEST; 55s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 10645 (apache2)
Tasks: 6 (limit: 9559)
CPU: 51ms
CGroup: /system.slice/apache2.service
Перевірка роботи Mariadbservice:
sudo systemctl status mariadb
● mariadb.service - MariaDB 10.11.11 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-04-09 11:37:28 EEST; 2min 6s ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: 9401 (mariadbd)
Status: "Taking your SQL requests now..."
Tasks: 9 (limit: 63092)
CPU: 411ms
CGroup: /system.slice/mariadb.service
└─9401 /usr/sbin/mariadbd
Оскільки сервіси працюють – значить все зроблено правильно.
Установка Certbot та переніс сертифікатів
Certbot – це утиліта від letsencrypt за допомогою якої виписуються та оновлюються сертифікати. Щоб встановити сертбот, необхідно виконати наступну команду:
sudo apt install certbot python3-certbot-apache
Враховуючи факт, що в мене вже є раніше згенерований сертифікат, то його треба скопіювати на нову распбері пай. За допомогою команди рсінк по ссш копіюю весь вміст директорії /etc/letsencrypt/ із старої распбері пай на нову.
sudo rsync -avz RPIB/etc/letsencrypt/ [email protected]:/etc/letsencrypt/
В цій команді, RPIB – це директорія де сберігається весь бекап з распбері пай до її відновлення. Цей бекап зберігається на ПК, як вказано на схемі вище.
Бекап даних WordPress
Треба виконати дві прості дії:
- Копіювання фізичних файлів (медіа, плагіни, тощо)
- Дамп бази даних
Копіювання фізичних файлів
У проміжку часу між резервним копіюванням файлів і змінами бази даних на сайті не було явних змін у структурі чи нових повідомлень, тому я буду використовувати фізичні файли з резервної копії, що зберігаються в каталозі RPIB на комп’ютері.
sudo rsync -avz /home/home/RPIB/var/www/html/ --rsync-path="sudo rsync" [email protected]:/var/www/html/
Дамп бази даних
На своєму Host Raspberry Pi я роблю дамп бази даних:
mysqldump -u username -ppassword wordpress_db > backup-9-4-2025.sql
Потім я переношу його до нового RPI за допомогою команди rsync
sudo rsync -avz backup-9-4-2025.sql [email protected]:/home/rpi/wrdprs-sql/
Це пов’язано з заходами безпеки, які унеможливлюють віддалене підключення до бази даних навіть у локальній мережі, тільки на самому хості. Таким чином, наші налаштування та дані WordPress копіюються повністю.
Налаштування бази даних
Більшість налаштувань збережено в файлах конфігурації і не будуть змінені, тому в деяких випадках достатньо просто скопіювати ці файли. У випадку із БД, краще створити нового користувача, а не використовувати рут доступ. Для початку треба підключитися до БД
sudo mysql -u root -p
Користувача root не було створено з паролем, тому, коли буде запропоновано ввести пароль, просто натисніть enter, щоб увійти в базу даних. Наступним кроком є створення бази даних і користувача. Надайте користувачеві привілеї для роботи з цією базою даних. Застосуйте зміни. Я надам шаблон команди, де вам потрібно буде замінити свої значення. Це створює базу даних і користувача з необхідними правами доступу.
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Наступним кроком є відновлення бази даних у цю базу даних:
mysql -u wp_user -p wordpress_db < backup-9-4-2025.sql
Ніяких додаткових налаштувань бази даних не потрібно. Переходимо до налаштування веб-сервера.
Налаштування Apache сервера
Після установки сервера необхідно налаштувати віртуальний хост. Для цього необхідно створити файл конфігурації, або змінити вже існуючий. Я подивився що в мене є наступні дефолтні файли, які раніше були створені. Я передивлюся їх вміст і скопіюю в нову конфігурацію:
- 000-default.conf
- 000-default-le-ssl.conf
Щоб оптимізувати процес я скопіював всю директорію:
sudo rsync -avz /home/home/RPIB/etc/apache2/ --rsync-path="sudo rsync" [email protected]:/etc/apache2/
Проте перезавантажувати сервер ще зарано, адже ми не підготували файли сертифікатів.
Ініціалізація сертифікатів
Сертифікати мають зберігатися за замовчуванням у каталозі /etc/letsencrypt/, тому вам потрібно створити ці каталоги або перемістити їх із каталогу резервного копіювання
sudo rsync -avz /home/home/RPIB/etc/letsencrypt/ --rsync-path="sudo rsync" [email protected]:/etc/letsencrypt/
Після цього ви можете перевірити, чи certbot приймає сертифікат за допомогою команди:
sudo certbot certificates
Ви отримаєте приблизну відповідь:
Certificate Name: ostrich.kyiv.ua
Serial Number: 60f74de1ba240148e78c1efa7e7cf846417
Key Type: ECDSA
Domains: ostrich.kyiv.ua
Expiry Date: 2025-06-22 08:12:46+00:00 (VALID: 73 days)
Certificate Path: /etc/letsencrypt/live/ostrich.kyiv.ua/fullchain.pem
Private Key Path: /etc/letsencrypt/live/ostrich.kyiv.ua/privkey.pem
І після цього можна перезапустити сервер Apache, в цьому випадку помилки про відсутність сертифікатів не буде:
sudo systemctl restart apache2
Вам також потрібно видалити файл index.html, що належить серверу Apache, з каталогу /var/www/html/, щоб індекс PHP оброблявся під час запуску сайту
Поміняти карти пам’яті
Оскільки карти пам’яті мають однакові налаштування, їх можна сміливо міняти місцями. Після перезавантаження Raspberry Pi я знову відвідав свій сайт, переконався, що все працює. У такому форматі простої були мінімальними!
Висновок
Цей метод міграції WordPress на новий Raspberry Pi показує, наскільки важливо:
- Майте надійну резервну стратегію
- Підготуйте середовище заздалегідь
- Використовуйте правильний підхід до передачі даних
Роблячи все заздалегідь, ви можете досягти мінімального простою міграції WordPress. Незалежно від того, оновлюєте ви Raspberry Pi чи просто змінюєте обладнання хостингу, цей посібник допоможе вам зробити це з легкістю.