Shell-Tricks

Anmeldung via SSH

Sofern du ein limePROopen in new window hosting bei uns besitzt, kannst du deinen SSH public key via unser Controlpanelopen in new window unter Menüpunkt SSH-Zugang hochladen. Beim erstmaligen Import deines SSH pubkeys (als Datei-Upload von z.B. .ssh/id_rsa.pub, resp. via copy-paste) wirst du aufgefordert, deine Adresse einzutragen und die "Vereinbarung zu SSH-Zugang" zu unterschreiben und uns zur Verifizierung zukommen zu lassen.

Lädst du denselben SSH pubkey im Anschluss in einem anderen Hosting von Onlime GmbHopen in new window hoch, gilt dieser bereits als verifiziert und wird sofort aktiviert.

Hast du noch kein SSH-Schlüsselpaar (private/public key)?

Falls du noch über kein SSH-Schlüsselpaar (private/public key) verfügst, kannst du ein solches wie folgt anlegen:

# erzeugt ~/.ssh/id_rsa (RSA 3072bit)
$ ssh-keygen

# resp. falls du den Schlüssel nicht in ~/.ssh/id_rsa speichern möchtest:
$ ssh-keygen -f ~/.ssh/id_rsa_onlime

Wir empfehlen dir, dabei den private key mittels einem zusätzlichen sicheren Passwort zu verschlüsseln (ssh-keygen fordert dich auf, ein Passwort einzugeben). Damit musst du den key jeweils nach jedem Systemstart neu entschlüsseln.

Moderne Systeme wie macOS Ventura (OpenSSH_9.0p1) verwenden standardmässig RSA mit einer Schlüssellänge von 3072 bits. Dies gilt als sicher. Wenn du deinen Schlüssel aber noch etwas "sicherer" machen möchtest, empfehlen wir dir RSA 4096bit resp. Ed25519 zu verwenden:

# RSA 4096bit
$ ssh-keygen -b 4096

# Ed25519 (KDF: 100 rounds)
$ ssh-keygen -a 100 -t ed25519

Mit ssh-keygen hast du nun folgende Dateien als Schlüsselpaar erstellt:

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

Die Datei id_rsa stellt dabei deinen private key dar, den du nie weiterreichen solltest! Bei id_rsa.pub handelt es sich um deinen public key, den du im Controlpanelopen in new window hochladen kannst.

Ist dein pubkey für Hosting webXYZ (dein Controlpanel/FTP login) aktiviert, kannst du dich wie folgt an unserem Webserver anmelden:

$ ssh webXYZ@web.onlime.ch # Beispiel: web33@web.onlime.ch

web.onlime.ch ist der Webserver für unsere shared hosting Kunden mit einem limeBASIC resp. limePRO. Besitzt du einen Dedizierten Webserver limeDEDICATED bei uns, melde dich direkt an deinem Server an:

$ ssh webXYZ@sXXX.onlime.ch # Beispiel: web33@s003.onlime.ch

Sobald du via SSH angemeldet bist, navigiere in dein Webhome:

$ cd ~/webhome/public_html/www

TIPP

Der Symlink ~/webhome zeigt auf dein /var/www/webXYZ/ Verzeichnis, wobei ~/webhome/public_html/www das "Wurzelverzeichnis" deiner Haupt-Domain ist.

Bei Fragen zu unserer Verzeichnisstruktur konsultiere unsere Anleitung Verzeichnisstruktur.

Verwende nun deinen Lieblings-Editor (vim, nano, joe sind bereits vorinstalliert), um eine Datei zu bearbeiten.

Monitoring Logfiles

Wir stellen dir sämtliche Raw-Logs im logs-Verzeichnis zur Verfügung. Diese kannst du auch via FTPS herunterladen.

Zur Problemsuche, folge all deinen Logs live (währenddem du deine Website / die Problem-URL im Browser aufrufst):

$ cd ~/webhome
$ tail -f logs/*.log
==> logs/access.log <==
==> logs/error.log <==
==> logs/php_error.log <==
==> logs/php_slow.log <==

Die Namen der Logfiles sollten selbsterklärend sein:

LogfileErklärung
access.logApache (Webserver) Access Logopen in new window
error.logApache (Webserver) Error Logopen in new window
php_error.logPHP Error Log
php_slow.logLangsame PHP requests (> 10s) mit Stacktrace

Apache Logs werden jeweils täglich rotiert und gzipped, PHP Logs wöchentlich. Um eine rotierte Log-Datei anzuschauen, kannst du z.B. zless verwenden (z.B. zless logs/access.log-20221110.gz für das Apache Access Log vom Vortag – Datum 20221110 betrifft den 10.11.2022) resp. dieses mittels zgrep nach einem bestimmten Wert durchsuchen.

Migration Webspace

Mirroring via rsync

Sofern der Fremd-Host den Zugang via SSH unterstützt und rsync installiert hat, kannst du deine Dateien ganz einfach rekursiv via Rsyncopen in new window synchronisieren resp. migrieren.

Anhand dieses Beispiels synchronisierst du das gesamte Verzeichnis public_html/www von deinem Fremd-Host via SSH in dein lokales public_html/www auf unserem Webserver:

$ cd ~/webhome
$ rsync -aAHX --delete username@remotehost:public_html/www/ public_html/www

Um echte 1:1 Synchronisation zu gewährleisten, verwenden wir stets folgende Optionen, vgl. man rsync:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-H, --hard-links            preserve hard links
-X, --xattrs                preserve extended attributes

In der Regel ist aber die Option -a ausreichend.

Mirroring via lftp

Achtung

Unterstützt dein Fremd-Host den Zugang via SSH und rsync, solltest du in jedem Fall rsync dem hier beschriebenen Tool lftp vorziehen. Verwende die Synchronisation via FTP(S) mit lftp nur, wenn du kein rsync via SSH einsetzen kannst!

Um ein komplettes Verzeichnis rekursiv via FTP(S) von einem Fremd-Hoster in dein Web-Verzeichnis zu synchronisieren, verwende am besten lftp. Unsere LFTP-Version unterstützt GnuTLS, d.h. es wird automatisch erkannt, ob der Fremd-Hoster eine verschlüsselte Verbindung via FTPS (FTP via SSL/TLS) unterstützt. Dank dem Standard-Konfigurationsparameter ftp:ssl-allow = true wird automatisch SSL/TLS gewählt.

Aktuelle Version unter Debian Bullseye (Stand: Nov 2022):

$ lftp -v
LFTP | Version 4.8.4 | Copyright (c) 1996-2017 Alexander V. Lukyanov
Libraries used: GnuTLS 3.7.1, idn2 2.3.0, Readline 8.1, zlib 1.2.11

Unten stehendes Beispiel unter folgender Annahme:

VariableBeschreibung
USERNAMEFTP-Benutzername des externen Hosters
PASSWORDFTP-Passwort des externen Hosters
HOSTNAMEFTP-Server des externen Hosters
SRCDIRpath to source directory (auf externem FTP)
DSTDIRpath to destination directory (lokal, auf unserem Webserver, wo du lftp ausführst)
$ lftp -u USERNAME,PASSWORD -e "mirror -c --delete --verbose SRCDIR DSTDIR" HOSTNAME

Ein etwas konkreteres Beispiel:

$ lftp -u myuser,myPa55w0rd -e "mirror -c --delete --verbose public_html/www public_html/www/" ftp.example.com

ACHTUNG

Achte bitte darauf, dass du die korrekten Pfade unter SRCDIR resp. DSTDIR wählst. SRCDIR ist relativ vom root-Verzeichnis, in welchem du dich befindest, sobald du dich mit dem FTP-Benutzer anmeldest. DSTDIR ist relativ vom ausgeführten lftp-command.

Wichtig und praktisch ist die Option -c, sozusagen ein "resume/syncing" nach abgebrochenem mirroring. Vgl. man lftp:

-c,    --continue                continue a mirror job if possible
-e,    --delete                  delete files not present at remote site

Migration Mailaccounts

imapsync

Grössere Mailkonten-Daten von deinem bisherigen Web-/Mail-Hoster zu übertragen kann sehr umständlich sein via herkömmliche Mail-Clients. Insbesondere wenn du über eine grosse Anzahl Mailkonten verfügst oder wenn du einzelne Mailkonten mit mehreren Gigabytes Daten belegt hast – eine manuelle Migration scheint oft ein Ding der Unmöglichkeit!

Onlime GmbH bietet dir ein professionelles Migrationstool, das dir all die manuelle Arbeit abnimmt und solche Migrationen auf einfache Weise erledigen lässt: imapsyncopen in new window

NOTE

Lass dich nicht von der grässlich veralteten imapsyncopen in new window-Website 😂 irritieren. Die Site sieht aus, als wäre sie vom Autor Gilles LAMIRAL während der letzten Steinzeit designed worden. Imapsync ist aber ein sehr ausgereiftes, verlässliches und gut gewartetes Stück Software, das auch von grossen Mail-Providern genutzt wird für Migrationen. Wir haben imapsync lizenziert und der Autor war bei Problemen immer sehr hilfsbereit.

Auf deinem Webserver läuft also stets die aktuellste Version von imapsync.

Die Migration eines einzelnen Mailaccounts geht ganz einfach:

$ export IMAPSYNC_PASSWORD1=oldPassword1234
$ export IMAPSYNC_PASSWORD2=newPasswordXYZ
$ imapsync --host1 imap.example.com --authmech1 PLAIN --user1 old_user \ 
           --host2 imap.onlime.ch   --authmech2 PLAIN --user2 new@example.com \
           --delete2 --delete2folders

TIPP

imapsync erkennt automatisch, ob die IMAP-Server jeweils SSL/TLS unterstützen und wählt in diesem Fall eine verschlüsselte Verbindung via Port 993.

Achtung

ACHTUNG: Wenn du den neuen Mailaccount bei Onlime bereits genutzt hast und nachträglich erneut die Daten des bisherigen Mailaccounts synchronisieren möchtest (z.B. nach einer Umstellung der MX-records im DNS), solltest du die Parameter --delete2 und --delete2folders entfernen!

Ansonsten riskierst du, dass die neu eingegangenen E-Mails im neuen Mailaccount unwiderruflich gelöscht werden.

$ export IMAPSYNC_PASSWORD1=oldPassword1234
$ export IMAPSYNC_PASSWORD2=newPasswordXYZ
$ imapsync --host1 imap.example.com --authmech1 PLAIN --user1 old_user \ 
           --host2 imap.onlime.ch   --authmech2 PLAIN --user2 new@example.com

Migration mehrerer Mailaccounts

Für die automatische Migration mehrerer Mailaccounts haben wir ein Script vorbereitet. Speichere dieses z.B. in die Datei imapsync.sh und passe den Quellhost deines bisherigen Hosting Providers an (SRCHOST=imap.example.com):

#!/bin/bash

############# CONFIGURATION ###########
ACCOUNTS=accounts.list
SRCHOST=imap.example.com
DSTHOST=imap.onlime.ch
#######################################

TSFORMAT="%Y-%m-%d %H:%M:%S"

# loop through all accounts
grep -ve '^#.*' $ACCOUNTS | while read SRCUSER SRCPW DSTUSER DSTPW
do
    MESSAGE="[`date +"$TSFORMAT"`] synchronizing $SRCUSER ($SRCHOST) to $DSTUSER ($DSTHOST) ..."
    echo $MESSAGE
    echo $MESSAGE >> imapsync_err.log
    echo $MESSAGE >> imapsync_results.log

    # security: use environment variables for passwords in order 
    # not to pass them directly by command line option
    export IMAPSYNC_PASSWORD1="$SRCPW"
    export IMAPSYNC_PASSWORD2="$DSTPW"
    
    ## VARIANT 1) source host supports SSL/TLS (imap port 993)
    imapsync --host1 $SRCHOST --authmech1 PLAIN --user1 $SRCUSER \
             --host2 $DSTHOST --authmech2 PLAIN --user2 $DSTUSER 2> imapsync_err.log > imapsync_results.log

    ## VARIANT 2) source host has different INBOX prefix, transform it while syncing
    #imapsync --host1 $SRCHOST --authmech1 PLAIN --user1 $SRCUSER \
    #         --host2 $DSTHOST --authmech2 PLAIN --user2 $DSTUSER \
    #         --regextrans2 "s/INBOX.INBOX/INBOX/" 2> imapsync_err.log > imapsync_results.log
done

MESSAGE="[`date +"$TSFORMAT"`] imapsync sucessfully completed!"
echo $MESSAGE
echo $MESSAGE >> imapsync_results.log
exit 0

Machen das Script ausführbar:

$ chmod u+x imapsync.sh

Die zu migrierenden Mailkonten definierst du in der Datei accounts.list. Pro Zeile gibst du jeweils die Zugangsdaten des alten Mailaccounts, gefolgt von den Zugangsdaten des neuen Accounts an, jeweils separiert durch einen Leerschlag:

# <SRCUSER> <SRCPW> <DSTUSER> <DSTPW>
old_user oldPassword1234 new@example.com newPasswordXYZ
old2 xyz123 new2@example.com xyz456

Lasse nun das Migrations-Script imapsync.sh rattern:

$ ./imapsync.sh

Achtung

Du kannst das Script ruhig auch mehrfach ausführen, um neu hinzugekommene E-Mails erneut zu synchronisieren. Es werden dabei nur die veränderten Daten übernommen.

Bei der Migration mit imapsync werden auch alle IMAP-Flags (Answered, Flagged, Deleted, Seen etc.) übernommen. Aus der READMEopen in new window:

Imapsync command is a tool allowing incremental and recursive imap
transfers from one mailbox to another. If you don't understand the
previous sentence, it's normal, it's pedantic computer-oriented jargon.

All folders are transferred, recursively, meaning the whole folder
hierarchy is taken, all messages in them, and all message flags (\Seen
\Answered \Flagged etc.) are synced too.

Imapsync reduces the amount of data transferred by not transferring a
given message if it already resides on the destination side. Messages
that are on the destination side but not on the source side stay as they
are. See the --delete2 option to have strict sync and delete them.

How does imapsync know a message is already on both sides? Same specific
headers and the transfer is done only once. By default, the
identification headers are "Message-Id:" and "Received:" lines but this
choice can be changed with the --useheader option, most often a
duplicate problem is solved by using --useheader "Message-Id"

All flags are preserved, unread messages will stay unread, read ones
will stay read, deleted will stay deleted. In the IMAP protocol, a
deleted message is not deleted, it is marked \Deleted and can be
undeleted. Real destruction comes with the EXPUNGE or UIDEXPUNGE IMAP
commands.

Sehr komfortabel! Unsere Erfahrung mit imapsync während all den Jahren ist durchwegs positiv.

TIPP

Wir empfehlen dir, imapsync.sh in einer screen-Session laufen zu lassen, denn so kannst du jederzeit die Session verlassen, ohne dass das Script abbricht:

$ screen
$ ./imapsync.sh

Verlassen der screen-Session (detach):

Ctrl-A D

Wiederaufnehmen der screen-Session (reattach):

$ screen -r

Kümmere dich sich nicht um den Output von imapsync.sh – dieser dient nur zur Info. Den gesamten Output findest du auch in den Logdateien, welche automatisch angelegt werden:

├── sync.log
└── LOG_imapsync
    ├── YYYY_MM_DD_HH_MM_SS_MS_user1.txt
    └── YYYY_MM_DD_HH_MM_SS_MS_user2.txt

Rekursives Search-Replace

sed

Jeder kennt sed, den standard "stream editor", welcher auf jedem Unix/Linux-System verfügbar ist. Damit lassen sich search-replaces einfach auf einzelne Dateien anwenden:

$ sed -i 's/fooBar/myReplacement/g' demo.php

Verwendete Parameter, vgl. man sed:

-i[SUFFIX], --in-place[=SUFFIX]
       edit files in place (makes backup if extension supplied)

Um das Ganze nun noch rekursiv zu machen, verwenden wir find:

$ find . -type f -exec sed -i 's/fooBar/myReplacement/g' {} \;

ACHTUNG

Bevor wir ein rekursives search-replace mit obigem Command absetzen, sollte stets überprüft werden, ob dieser auf die korrekten Dateien angewendet wird. Vorgängig also bitte find ausführen, ohne search-replacing:

$ find . -type f

Wir empfehlen dir auch, die Dateien vorgängig rekursiv nach dem Such-String abzusuchen mit grep:

$ grep -r 'fooBar' .

rpl

rpl ist ein hervorragendes Tool für rekursive search-replaces. Beispiel:

$ rpl -Rds "relaunch.example.com" "www.example.com" .

Verwendete Parameter, vgl. man rpl:

-R, --recursive
        Recurse into subdirectories.
-d, --keep-times
        Keep modification times when replacing files.
-s, --dry-run
        Simulation mode, no files are changed.

Wir führen nun also mit -s den simulation mode aus und schreiben den gesamten Output in die Datei rpl.dump, damit wir diese ausführlich durchstudieren können:

$ rpl -Rds "relaunch.example.com" "www.example.com" . > rpl.dump 2>&1

Danach führen wir den search-replace produktiv aus (ohne dry-run):

$ rpl -Rd "relaunch.example.com" "www.example.com" .

ACHTUNG

Falls versteckte "." Dateien (z.B. .htaccess, .htpasswd, .git) ebenfalls einbezogen werden sollen, verwende -a:

$ rpl -aRd "relaunch.example.com" "www.example.com" .

PHP

Standard PHP-CLI Version

PHP-Version deiner Website

Du befindest dich hier in den Shell Tipps & Tricks – Wir erklären dir hier also nur, wie du die PHP-Version in der Shell änderst, d.h. die Version von PHP-CLI. Willst du hingegen die PHP-Version deiner Website ändern (Aufruf via URL), befolge bitte diesen Hinweis: PHP Version & Upgrade Tipps > Up/Downgrade

(kurz: Dies geht via Controlpanelopen in new window > PHP-Manager)

ACHTUNG: Die standard PHP-CLI Version ist stets dieselbe, unabhängig davon, in welchem Verzeichnis du dich befindest. Es mag also sein, dass du in der Shell unter ~/webhome/public_html/www eine andere PHP-Version verwendest als effektiv via Controlpanel konfiguriert wurde. In der Shell kannst du also anstatt php einfach php81 verwenden, um explizit PHP 8.1 zu verwenden.

Möchtest du die Standard Version von PHP-CLI (php auf der command line) ändern, haben wir dazu für dich bereits das ~/bin Verzeichnis zur PATH Variable hinzugefügt, vgl. ~/.bash_profile (diese Datei sollte nicht editiert werden, da sie von Onlime verwaltet wird, verwende stattdessen ~/.bashrc):

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi

Standardmässig ist php mit PHP 8.2 verlinkt (Stand: März 2022):

$ php -v
PHP 8.2.7 (cli)

Alles was du also tun musst, um die Standard-Version auf PHP 8.1 zu downgraden:

$ mkdir -p ~/bin
$ ln -s /usr/bin/php8.1 ~/bin/php

... und schon (nach dem nächsten login) ist php mit der neuen Version verlinkt:

$ php -v
PHP 8.1.17 (cli)

Reset OPcache

OPcacheopen in new window ist für sämtliche Kunden und sämtliche PHP-Versionen stets aktiviert. Unter OPcache Status erklären wir, wie du den aktuellen Zustand des OPcache einsehen kannst. Normalerweise brauchst du dich aber nie um den OPcache zu kümmern, da sich dieser bei jeglichen Änderungen deiner PHP-files selbstständig aktualisiert.

ACHTUNG

Verwendest du beim Deployment deines Projekts einen Symlink current (üblicherweise so benannt), der auf den aktuellen Release zeigt? Dies ist die empfohlene Deployment-Methode. Du musst aber unbedingt bei jedem Deployment daran denken, nach Änderung des current-Symlinks immer auch den PHP OPcache zu resetten! – Ansonsten zeigen die Pfade im Cache noch immer auf das alte Verzeichnis, was zu sehr merkwürdigen Effekten führen kann.

Ein Beispiel einer solchen Verzeichnis-Struktur bei Symlink-Deployment:

public_html/
└── www
    ├── current -> releases/1680444960
    └── releases
        ├── 1679045574
        ├── 1680444200
        └── 1680444960

PHP OPcache resetten:

Bei einem solchen Symlink-Deployment, rufe am Ende deines Deployment-Scripts (resp. händisch via Shell) also unbedingt unser Helper-script auf, um den OPcache der entsprechenden (Web-)PHP-Version zu resetten:

$ opcache-reset php82

Weisst du gleich nicht, welche PHP-Version via Controlpanel für die jeweilige Haupt/Subdomain konfiguriert ist, kannst du auch den OPcache aller verfügbaren PHP-Versionen leeren:

$ opcache-reset
sucessfully reset opcache for webXYZ-php82
sucessfully reset opcache for webXYZ-php81
sucessfully reset opcache for webXYZ-php80

Der OPcache kann alternativ dazu auch via unser Controlpanelopen in new window unter «PHP-Manager» bei der jeweiligen PHP-Version via «OPcache leeren» resettet werden.

Replace short_open_tag

Short open tags (<? anstelle von <?php) sind hoffnungslos veraltet und wurden bereits ab PHP 5.5 standardmässig deaktiviert. Du solltest deine PHP-Webapplikation bereinigen und alle PHP short open tags ersetzen.

Wechsle dazu in das gewünschte Verzeichnis (z.B. public_html/www/) und führe ein rekursives Search-Replace aus:

$ find . -iname '*.php' -type f -print0 | xargs -0 sed -i -e 's/<? /<?php /g' -e 's/<?\/\//<?php \/\//g' -e 's/<?\/\*/<?php \/\*/g' -e 's/<?$/<?php/g'

Dieser Befehl macht in all deinen PHP-Dateien mit Endung .php folgende Ersetzungen:

vonnach
<?<?php
<?//<?php //
<?/*<?php /*

ACHTUNG

Sofern du deine PHP-Dateien im DOS/Windows-Format mit CRLF Zeilenenden abgespeichert hast, müssen diese zuvor ins Unix-Format (empfohlen!) mit LF Zeilenenden umgewandelt werden mittels dem von uns vorinstallierten Tool dos2unix:

$ find . -iname '*.php' -type f -print0 | xargs -0 dos2unix

Ansonsten klappt es mit der Ersetzung von <? nach <?php vor Zeilenende nicht.

WP-CLI (Wordpress)

WP-CLIopen in new window ist ein Kommandozeilen-Werkzeug, mit dem sich viele Aufgaben einer WordPress-Installation schnell und übersichtlich erledigen lassen.

Du brauchst WP-CLI nicht selbst zu installieren, denn es ist bereits von uns auf dem Webserver installiert und wird laufend von Onlime gewartet, d.h. es steht dir auch immer die aktuellste Version zur Verfügung. Verwende ganz einfach den command wp.

Anzeige WP-CLI Version

Aktuelle Version (Stand: Nov 2022):

$ wp --version
WP-CLI 2.7.1

Wordpress Installieren

Wordpress lässt sich mit WP-CLI command wp coreopen in new window ganz einfach installieren:

$ cd ~/webhome/public_html/www/
$ rm -f default-index.php

# download latest version of wordpress
$ wp core download

Du kannst beim Download von Wordpress auch gleich einen anderen Pfad und/oder eine andere Sprachvariante angeben:

$ wp core download --path=/var/www/web123/public_html/relaunch --locale=de_DE

Anstatt sich durch den Setup-Assistenten von Wordpress zu quälen, können du dafür auch WP-CLI verwenden (ACHTUNG: Die Datenbank muss zuvor via unser Controlpanelopen in new window eingerichtet werden. Auch empfehlen wir, vorgängig das SSL-Zertifikat aufzuschalten via unser Controlpanel, d.h. immer von der definitiven URL unter https://... ausgehen!):

$ wp core config --dbname=web123_wp --dbuser=web123_wp --dbpass=************
$ wp core install --url='https://www.deine-domain.ch' --title='Test Site' --admin_user='USER' --admin_email='EMAIL'

Anzeige Wordpress Version

Mit dem WP-CLI wp coreopen in new window command lässt sich auch die aktuell installierte Wordpress version anzeigen:

$ wp core version
6.x.x

Neuer WP Admin User

Hast du das Passwort für deinen Wordpress Admin-User vergessen oder benötigst du Admin-Zugang auf eine Wordpress-Installation, die du als Webmaster betreust? Mit dem WP-CLI wp useropen in new window command kannst du ganz einfach einen neuen Admin-User anlegen:

$ wp user create USERNAME EMAIL --role=administrator --user_pass=PASSWORD
# example:
$ wp user create myadmin demo@example.com --role=administrator --user_pass=demo1234Foo

Sofern du kein Passwort mit --user_pass mitgibst, wird dir ein neues generiert und auf der command line angezeigt.

Du kannst natürlich auch einfach das Passwort eines bestehenden Users resetten mit WP-CLI wp user reset-passwordopen in new window sub-command:

$ wp user reset-password admin

Unterdrücke dabei die E-Mail Benachrichtigung an den User, falls du ihm das Passwort lieber direkt mitteilen willst:

$ wp user reset-password admin --skip-email

Migration / Search-Replace

ACHTUNG

Bei Wordpress müssen auch sämtliche Links in der Datenbank angepasst werden. Ersetze diese bitte nie direkt in der MySQL-Datenbank! (Wordpress speichert die meisten Daten serialisiert!!)

Du kannst dazu eines der folgenden Wordpress-Plugins verwenden (nicht getestet):

Die beste Erfahrung haben wir aber mit wp search-replaceopen in new window gemacht!

Nachdem du eine Wordpress-Installation auf eine andere Subdomain verschoben hast (z.B. via unser Subdomain-Swapping im Controlpanelopen in new window unter "Subdomains"), solltest du danach umgehend alle Hostnames und Server-Pfade ersetzen. Mit wp search-replaceopen in new window ist dies ein Kinderspiel – WP-CLI behandelt dabei auch serialisierte Daten korrekt (was mit direkten SQL-Queries ein Ding der Unmöglichkeit wäre).

Dry-run (ohne die Änderungen durchzuführen):

$ cd ~webhome/public_html/www
$ wp search-replace 'relaunch.deine-domain.ch' 'www.deine-domain.ch' --dry-run
$ wp search-replace '/var/www/web123/public_html/relaunch' '/var/www/web123/public_html/www' --dry-run

Bist du dir sicher, dass du das korrekte search-replace Muster gewählt hast, führe diese Befehle ohne Parameter --dry-run aus:

$ wp search-replace 'relaunch.deine-domain.ch' 'www.deine-domain.ch'
$ wp search-replace '/var/www/web123/public_html/relaunch' '/var/www/web123/public_html/www'

Bei einer Umstellung auf HTTPS machst du am besten ein Search-replace auf eine genügend spezifische URL, z.B.:

$ wp search-replace 'http://www.deine-domain.ch' 'https://www.deine-domain.ch'
Zuletzt aktualisiert: