lokale Kopie des WordPress Blogs erstellen

Ich möchte eine Kopie meines WordPress Blogs auf einem lokalen Webserver erstellen.
Dient mir als lauffähiges Backup meines Blogs und ist auch ideal um Themes und sonstige Modifikation ohne Gefahr mal auszuprobieren.

Der lokale Server ist ein LXC Container mit Debian 11 und LEMP Stack. (Linux, NGINX, MariaDB, PHP)
Auf dem neuen Server muss WordPress nicht installiert werden, eine LAMP oder LEMP Umgebung muss aber eingerichtet sein!

WordPress (aktueller Server)

Datenbank und wwwroot sichern. (Da ich SSH Zugriff habe, erledige ich das auf der Konsole.)

# Datenbank exportieren
$ mysqldump --no-tablespaces --host=DB_HOST --user=DB_USER --password=DB_PASS DB_NAME > bachmann-lan.de.sql

# www Verzeichnis packen
$ tar cvfz bachmann-lan.de.tgz /httpdocs/bachmann-lan.de

Beide Dateien auf den lokalen Server kopieren.

WordPress (neuer Server)

Neue Datenbank und Benutzer erstellen.

$ mysql
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'localhost' identified by 'DB_PASSWORT';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

Damit alle links (home, eigene downloads) auf den lokalen Server verweisen, muss der sqldump vor dem Import noch angepasst werden.

suchen nach    : https://www.bachmann-lan.de     # aktuelle URL
ersetzen durch : http://192.168.50.175           # neue URL

# auf der Konsole mit sed:
sed -i "s/https:\/\/www.bachmann-lan.de/http:\/\/192.168.50.175/g" bachmann-lan.de.sql

sqldump importieren

$ mysql wordpress < bachmann-lan.de.sql

Ggf. noch das WP-Admin Passwort ändern.

$ mysql
MariaDB [(none)]> use wordpress;
MariaDB [wordpress]> UPDATE wp_users SET user_pass = MD5( 'NEUES_PASSWORT' ) WHERE wp_users.user_login = "WP_ADMIN_BENUTZERNAME";
Query OK, 1 row affected (0.000 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [wordpress]> quit

Das gepackte Verzeichnis nach /var/www/html direkt in die root entpacken. Der Inhalt der *.tgz Datei ist /httpdocs/bachmann-lan.de/DATEIEN

$ tar tvfz bachmann-lan.de.tgz
/httpdocs/bachmann-lan.de/wp-commentsrss2.php
/httpdocs/bachmann-lan.de/liesmich.html
/httpdocs/bachmann-lan.de/wp-settings.php
--- SNIP ---

Die ersten zwei Verzeichnisse beim entpacken weglassen.

$ tar xvfz bachmann-lan.de.tgz -C /var/www/html --strip-components=2

Berechtigungen anpassen.

$ chown -R www-data:www-data /var/www/html/

In der wp-config.php die Daten für die neue Adresse und die neue Datenbank anpassen.

/** Website URL **/
define( 'WP_SITEURL', 'http://192.168.50.175' );
define( 'WP_HOME', 'http://192.168.50.175' );

/** Database **/
define('WP_MEMORY_LIMIT', '40M');
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'DB_PASSWORT');
define('DB_HOST', 'localhost');

Neue Sicherheitsschlüssel und WordPress-Salts erstellen und ebenfalls in die wp-config.php einfügen.

$ curl -s https://api.wordpress.org/secret-key/1.1/salt/

define('AUTH_KEY',         'Iv||i`Xy/Qe+7U9g;~Uj|8%p7ZZ3.qyIU:g+JHz}zd0-;b%8[}-4lupDPk2Sm{9{');
define('SECURE_AUTH_KEY',  'epOMFUTGGX*UQV!z$@gR+dS@p.L&]:_X5ttln|]E)-?Ri:h!c?k;/54Z4JDjD2UP');
define('LOGGED_IN_KEY',    'VVdn}cwGo[mtg%;%u7U4q4SMV T4,zmiuyslzKOZ=h$(8t.GxU[fiX>{:A-I<;8H');
define('NONCE_KEY',        'gkL3tu}/mB5D^f??;Xo`+Ei6AL}K8N!mZt6{y`$-<!qrDoGZsL?5Dp(c^4Eeu_N8');
define('AUTH_SALT',        '2MWzH$C?S4]G>9;r}OzK+l+5)FM;%$#,3mog<+epnDmtb|*XBodcC/1S?6@}F@bF');
define('SECURE_AUTH_SALT', ')shl_SQK,5}mM{-Trm{pz~d(?ZXA7l?Jqq,_@ha/MXOLhzWhF6,D@>GBQf>QF_vZ');
define('LOGGED_IN_SALT',   'sT?9Cl]R|;Q=E:+a@P`xqAvv~<8RrnG8Ka0=4l(_Ga6*LNNF1Vu |9Jk34q w|fK');
define('NONCE_SALT',       'gIA(AP>C%|Vw^PoFz[n04Y7ngv0.1871HOdD-Oq 6zf:,xt*O_BSQ3^|3x4n|]Sk');

WordPress nginx rewrite rule aktivieren. Im Server Block der nginx Konfiguration am Ende einfügen.

if (!-e $request_filename)
{
rewrite ^(.+)$ /index.php?q=$1 last;
}

Meine minimale /etc/nginx/sites-available/default Konfiguration.

### default server configuration
server {
        listen 80 default_server;
        root /var/www/html;
        index index.php;
        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        }

        # deny access to .htaccess files
        location ~ /\.ht {
                deny all;
        }

        # WordPress rewrite rule
        if (!-e $request_filename) {
                rewrite ^(.+)$ /index.php?q=$1 last;
        }
}

nginx testen und neu starten

$ nginx -t
$ systemctl restart nginx

Test

Die Seite ist jetzt über http://192.168.50.175 erreichbar und alle links funktionieren ohne Fehler.

Optional

Man könnte jetzt noch einen FQDN nutzen und SSL aktivieren.

Schreibe einen Kommentar