Migrace WordPressu na jiný server

Chci se podělit o zkušenost s migrací redakčního systému WordPress na jiný server. U mě šlo o vynucenou situaci, kdy bylo nutno povýšit OS z CentOS 7 na CentOS 8 Stream a musel jsem tedy přenést obsah 1:1. Z různých návodů a tipů jsem poskládal postup, který se mi osvědčil. Snad bude k užitku i dalším administrátorům.

Prvním krokem je záloha:

  • databáze
  • adresáře webserveru s instalací WordPressu
  • konfigurace Apache webserveru
  • zjištění verze PHP – důležité pro kompatibilitu s nasazenou verzí WP

Pro zálohu databáze použijte utilitu mysqldump pro MySQL nebo mariadb-dump pro MariaDB.

mariadb-dump --single-transaction -u root --databases wordpress > wordpressbackup.sql

Zálohu adresáře s instalací WordPressu a konfigurace Apache httpd proveďte nástrojem, na jaký jste zvyklý (vlastní backup software, rsync, atd.). My používáme IBM Spectrum Protect (dříve Tivoli Storage Manager), takže v našem případě to bude:

/opt/tivoli/tsm/client/ba/bin/dsmc incr "/var/www/html/*" -sub=yes
/opt/tivoli/tsm/client/ba/bin/dsmc incr "/etc/httpd/*" -sub=yes

Zjištění verze php je jednoduché:

[root@www bin]# php -v
PHP 8.1.27 (cli) (built: Dec 19 2023 20:35:55) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.27, Copyright (c) Zend Technologies

Samozřejmě pokud chceme přenést server 1:1 vč. dalších software, je ideální záloha celého adresáře /etc, případně dalších.

Nyní přeskočíme instalaci CentOSu 8. Předpokládejme čistou instalaci v módu „Minimal install“. Nainstalujte repository EPEL a repozitář REMI, odkud budeme instalovat potřebnou verzi PHP.

dnf install epel-release
dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm

Vylistujte si aktuální dostupné verze PHP.

 dnf module list php
\Last metadata expiration check: 0:00:10 ago on Sat 02 Mar 2024 09:31:19 PM CET.
CentOS Stream 8 - AppStream
Name                                       Stream                                        Profiles                                                        Summary
php                                        7.2 [d]                                       common [d], devel, minimal                                      PHP scripting language
php                                        7.3                                           common [d], devel, minimal                                      PHP scripting language
php                                        7.4                                           common [d], devel, minimal                                      PHP scripting language
php                                        8.0                                           common [d], devel, minimal                                      PHP scripting language
php                                        8.2                                           common [d], devel, minimal                                      PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                                       Stream                                        Profiles                                                        Summary
php                                        remi-7.2                                      common [d], devel, minimal                                      PHP scripting language
php                                        remi-7.3                                      common [d], devel, minimal                                      PHP scripting language
php                                        remi-7.4                                      common [d], devel, minimal                                      PHP scripting language
php                                        remi-8.0                                      common [d], devel, minimal                                      PHP scripting language
php                                        remi-8.1                                      common [d], devel, minimal                                      PHP scripting language
php                                        remi-8.2                                      common [d], devel, minimal                                      PHP scripting language
php                                        remi-8.3                                      common [d], devel, minimal                                      PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Nyní deaktivujeme PHP 7.2 a naopak aktivujeme PHP 8.1 z repozitáře REMI a poté instalujeme příslušné moduly PHP a Apache httpd server.

dnf module disable php:7.2
dnf module enable php:remi-8.1
dnf install httpd php-mysqlnd php-fpm  tar curl php-json
systemctl enable httpd --now

Zkontrolujte, že verze PHP opdpovídá původnímu serveru:

[root@www ~]# php -v
PHP 8.1.27 (cli) (built: Dec 19 2023 20:35:55) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.27, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.27, Copyright (c), by Zend Technologies

Nyní nainstalujeme MariaDB, ale nikoliv z CentOS repozitáře, ale přímo z MariadDB repa.

[root@www ~]# wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
--2024-03-02 21:40:22--  https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
Connecting to 192.168.156.40:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 36328 (35K) [application/octet-stream]
Saving to: ‘mariadb_repo_setup’

mariadb_repo_setup                                   100%[======================================================================================================================>]  35.48K  --.-KB/s    in 0.02s

2024-03-02 21:40:23 (1.61 MB/s) - ‘mariadb_repo_setup’ saved [36328/36328]

[root@www ~]# chmod +x mariadb_repo_setup
[root@www ~]# ./mariadb_repo_setup
# [info] Checking for script prerequisites.
# [info] MariaDB Server version 11.3 is valid
# [info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
# [info] Adding trusted package signing keys...
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
error: https://supplychain.mariadb.com/MariaDB-Enterprise-GPG-KEY: import read failed(2).
# [error] Failed to add trusted package signing keys
# [info] Cleaning package cache...
71 files removed
dnf install mariadb-server
systemctl enable mariadb --now
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
mariadb-secure-installation

Obnovte instalaci WP a konfiguraci Apache httpd serveru.

/opt/tivoli/tsm/client/ba/bin/dsmc restore "/var/www/html/*" -sub=yes
/opt/tivoli/tsm/client/ba/bin/dsmc restore "/etc/httpd/*" -sub=yes

Z původního serveru z wp-config.php zjistíme uživatele, kterého používá WP pro přístup do databáze a jeho heslo. Vytvoříme ho a naimportujeme zálohu databáze WP.

# mysql -u root -p
mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

mysql -u root < wordpressbackup.sql

Pro jistotu restartujte server a pokud vše proběhlo v pořádku, máte identický WordPress jako před zahájením akce.