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.