Sofern der Fremd-Host den Zugang via SSH unterstützt und rsync
installiert hat, können Sie Ihre Dateien ganz einfach rekursiv via Rsync synchronisieren resp. migrieren.
Anhand dieses Beispiels synchronisieren Sie das gesamte Verzeichnis public_html/www
von Ihrem Fremd-Host in Ihr lokales public_html/www
:
$ rsync -aAHXS -e ssh --numeric-ids --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
rsync
dem hier beschriebenen Tool lftp
vorziehen. Verwenden Sie die Synchronisation via FTP mit lftp nur, wenn Sie kein rsync einsetzen können!
Um ein komplettes Verzeichnis rekursiv via FTP von einem Fremd-Hoster in Ihr Web-Verzeichnis zu synchronisieren, verwenden Sie 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.
$ lftp -v LFTP | Version 4.3.6 | Copyright (c) 1996-2012 Alexander V. Lukyanov Libraries used: Readline 6.2, GnuTLS 2.12.20, zlib 1.2.7
Beispiel unter folgender Annahme:
Variable | Beschreibung |
---|---|
USERNAME | FTP-Benutzername des externen Hosters |
PASSWORD | FTP-Passwort des externen Hosters |
HOSTNAME | FTP-Server des externen Hosters |
SRCDIR | path to source directory (auf externem FTP) |
DSTDIR | path to destination directory (lokal, auf unserem Webserver, wo Sie lftp ausführen) |
$ 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
SRCDIR
resp. DSTDIR
wählen. SRCDIR
ist relativ vom root-Verzeichnis, in welchem Sie sich befinden, sobald Sie sich mit dem FTP-Benutzer anmelden. DSTDIR
ist relativ vom ausgeführten lftp-command.man lftp
:-c, --continue continue a mirror job if possible -e, --delete delete files not present at remote site
Grössere Mailkonten-Daten von Ihrem bisherigen Webhoster zu übernehmen kann sehr umständlich sein. Insbesondere wenn Sie über eine grosse Anzahl Mailkonten verfügen oder wenn Sie einzelne Mailkonten mit mehreren GB belegt haben - eine manuelle Migration scheint oft ein Ding der Unmöglichkeit.
Onlime Webhosting bietet Ihnen ein professionelles Migrationstool, das Ihnen all die manuelle Arbeit abnimmt und solche Migrationen auf einfache Weise erledigen lässt: 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
–delete2
und –delete2folders
entfernen!$ 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. Speichern Sie dieses z.B. in die Datei imapsync.sh
und passen Sie den Quellhost Ihres 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 Sie das Script ausführbar:
$ chmod u+x imapsync.sh
Die zu migrierenden Mailkonten definieren Sie in der Datei accounts.list
. Pro Zeile geben Sie 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
Lassen Sie nun das Migrations-Script imapsync.sh
rattern:
$ ./imapsync.sh
Bei der Migration mit imapsync werden auch alle IMAP-Flags (Answered
, Flagged
, Deleted
, Seen
etc.) übernommen. Aus dem README:
imapsync is a good tool because it reduces the amount of data transferred by not transferring a given message if it is already on both sides. Same headers and the transfer is done only once. All flags are preserved, unread will stay unread, read will stay read, deleted will stay deleted. You can stop the transfer at any time and restart it later, imapsync works well with bad connections.
Sehr komfortabel! Unsere Erfahrung mit imapsync während den letzten Jahren ist durchwegs positiv.
imapsync.sh
in einer screen
-Session laufen zu lassen, denn so können Sie 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ümmern Sie sich nicht um den Output von imapsync.sh
- dieser dient nur zur Info. Den gesamten Output finden Sie auch in den Logdateien, welche automatisch angelegt werden:
sync.log LOG_imapsync/YYYY_MM_DD_HH_MM_SS_user1.txt LOG_imapsync/YYYY_MM_DD_HH_MM_SS_user2.txt
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' {} \;
find
ausführen, ohne search-replacing:$ find . -type f
Wir empfehlen Ihnen auch, die Dateien vorgängig rekursiv nach dem Such-String abzusuchen mit grep
:
$ grep -r 'fooBar' .
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 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" .
-a
:$ rpl -aRd "relaunch.example.com" "www.example.com" .
Möchten Sie die Standard Version von php-cli ändern, haben wir dazu für Sie bereits das ~/bin
Verzeichnis zur PATH
Variable hinzugefügt, vgl. ~/.bash_profile
(diese Datei sollte nicht editiert werden, da sie von Onlime verwaltet wird, verwenden Sie stattdessen ~/.bashrc
):
# set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" fi
Alles was Sie also tun müssen:
$ mkdir -p ~/bin $ ln -s /usr/bin/php7.4 ~/bin/php
… und schon (nach dem nächsten login) ist php
mit der neuen Version verlinkt:
$ php -v PHP 7.4.4 (cli) (built: Mar 20 2020 14:30:40) ( NTS )
Short open tags (<?
anstelle von <?php
) sind veraltet und wurden bereits ab PHP 5.5 standardmässig deaktiviert. Sie sollten Ihre PHP-Webapplikation bereinigen und alle PHP short open tags ersetzen.
Wechseln Sie dazu in das gewünschte Verzeichnis (z.B. public_html/www/
) und führen Sie 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 Ihren PHP-Dateien mit Endung .php
folgende Ersetzungen:
von | nach |
---|---|
<? | <?php |
<?// | <?php // |
<?/* | <?php /* |
CRLF
Zeilenenden abgespeichert haben, müssen Sie diese zuvor ins Unix-Format (empfohlen!) mit LF
Zeilenenden umwandeln:$ find . -iname '*.php' -type f -print0 | xargs -0 dos2unix
Ansonsten klappt es mit der Ersetzung von <?
→ <?php
vor Zeilenende nicht.
WP-CLI ist ein Kommandozeilen-Werkzeug, mit dem sich viele Aufgaben einer WordPress-Installation schnell und übersichtlich erledigen lassen.
Sie brauchen 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 Ihnen auch immer die aktuellste Version zur Verfügung. Verwenden Sie ganz einfach den command wp
.
$ wp --version
WP-CLI 2.4.0
Wordpress lässt sich mit WP-CLI command wp core ganz einfach installieren:
$ cd ~/webhome/public_html/www/ $ rm -f default-index.php # download latest version of wordpress $ wp core download
Sie können 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 Sie dafür auch WP-CLI verwenden (ACHTUNG: Die Datenbank muss zuvor via unser Controlpanel eingerichtet werden, auch empfehlen wir, vorgängig das SSL-Zertifikat aufzuschalten via unser Controlpanel, sofern Sie die Site über HTTPS laufen lassen wollen:
$ wp core config --dbname=web123_wp --dbuser=web123_wp --dbpass=************ $ wp core install --url='https://www.example.com' --title='Test Site' --admin_user='USER' --admin_email='EMAIL'
Nachdem Sie eine Wordpress-Installation auf eine andere Subdomain verschieben (z.B. via unser Subdomain-Swapping im Controlpanel), sollten Sie danach umgehend alle Hostnames und Server-Pfade ersetzen. Mit wp search-replace ist dies ein Kinderspiel - WP-CLI behandelt dabei auch serialisierte Daten korrekt (was mit direkten SQL-Queries ein Ding der Unmöglichkeit wäre):
$ wp search-replace 'relaunch.example.com' 'www.example.com' --dry-run $ wp search-replace '/var/www/web123/public_html/relaunch' '/var/www/web123/public_html/www' --dry-run
Sind Sie sich sicher, dass Sie das korrekte search-replace Muster gewählt haben, führen Sie den Befehl ohne Parameter –dry-run
aus:
$ wp search-replace 'relaunch.example.com' 'www.example.com' $ wp search-replace '/var/www/web123/public_html/relaunch' '/var/www/web123/public_html/www'
Bei einer Umstellung auf SSL machen Sie am besten ein Search-replace auf eine genügend spezifische URL, z.B.:
$ wp search-replace 'http://www.example.com' 'https://www.example.com'