Migration Virtuozzo auf Proxmox
Wenn ein neuer Server und alle darauf angelegten Domains unter der IP des alten (Quell-) servers erreichbar gemacht werden sollen, empfiehlt sich die IP-Weiterleitung.
Vorbereitungen auf dem nagelneuen Zielhost
Profil & Einstellungen -> E-Mail Adresse - lautet diese bereits support@estugo.de? Wenn nicht, dann ändern auf support@estugo.de
Tools & Einstellungen -> E-Mail -> Mailserver-Einstellungen -> "SPF-Spamschutz aktivieren, um eingehende E-Mails zu überprüfen" -> DEAKTIVIEREN (falls aktiv)
Tools & Einstellungen -> E-Mail -> Spamfilter -> "Serverweiten Greylisting-Spamschutz aktivieren" -> DEAKTIVIEREN (falls aktiv)
CloudLinux Manager -> Users -> DEFAULT -> Edit (Stift-Icon rechts)
SPEED 150%
PMEM 1.5G
IO 20MB/s
CloudLinux Manager -> Selector -> Choose default modules for -> 5.6 auswählen
mysql DEAKTIVIEREN (falls aktiv)
mysqli DEAKTIVIEREN (falls aktiv)
nd_mysql AKTIVIEREN (falls inaktiv)
nd_mysqli AKTIVIEREN (falls inaktiv)
Abonnement zum Anlegen der *.estugo.de - Altservernamen erstellen
Abonnements -> Abonnement hinzufügen -> Domainname: mailserver.#neuerServer#.hostkraft.de -> Paket ist egal, die anderen Einstellungen auch
In diesem neuen Abo die Domain estugo.de hinzufügen -> + Domain hinzufügen -> Domainname: estugo.de
Wechseln in die Hosting-Einstellungen -> Zertifikat: Wildcardzertifikat "*.estugo.de" auswählen
Ganz wichtig: estugo.de -> E-Mail Einstellungen -> E-Mail-Service: Eingehende deaktiviert
Anpassen der TTL für die Domains die migriert werden so bald wie möglich im Voraus
- Besorge Dir die Namen aller Domains die auf dem Server angelegt sind
- Nutze hierfür ein vorbereitets Script (domainumzug.sh) welches Du wie folgt beziehen kannst:
wget -P /root/ https://www.hostingprimus.de/files/scripts/umzugspaket/umzugspaket.zip && unzip -o umzugspaket.zip
- - Es wird ein Paket von Scripten geladen und entpackt.
- - Führe das Domainumzug-Script aus und erhalte das Ergebnis via E-Mail an support@estugo.de
./domainumzug.sh
- Wechsele nun in die partner.providerbox.com
- - Nutze folgendes Menü
- Nameserver -> Zonen ändern -> Was soll verändert werden? TTL der Domain -> ersetzen -> Subdomains: alle [x] -> Neue SOA TTL: 600
- - In das Feld "folgende Liste von Domains" fügst Du alle Domains aus der Datei domainliste.txt ein
Kunden mit externer Domainverwaltung, deren Domains auf den Zielserver verweisen, im Vorfeld informieren. (Frist setzen, denn der Quellserver wird auch mal gestoppt)
[Bei den Servern www1., bis www69.estugo.de wurde mit web-Usern und Symlinks gearbeitet, daher gilt insbes. dort folgende Besonderheit VOR dem Transfer:]
Leider wurde früher mit diesen Symlinks gearbeitet, damit der Kunde nicht "var/www/vhosts/web1.wwwx.hostkraft.de/httpdocs" als Dokumentenpfad verwenden musste, sondern nur "/var/www/web1". Rächt sich jetzt und bei jeder Migration, sollte also tendenziell im Nachgang behoben werden.
- 1. Recherchiere, welche Sym-Links aktuell noch bestehen
- - Logge Dich als root auf dem Quellserver ein und sieh' die den Ordner /var/www an
mc /var/www/
- - Symlinks findest Du unterhalb des Ordners "/vhosts/". Sie sehen so aus: "~web1" (z.B. für den Symlink von var/www/vhosts/web1.wwwx.hostkraft.de/ auf /var/www/web1/)
- - Rot dargestellte Symlinks in diesem Ordner können entfernt/ignoriert werden.
- - Symlinks in weißer Farbe haben noch Verbindung zu einem aktuellen Abo unter "/var/www/vhosts/" und benötigen Deine Aufmerksamkeit.
- 2. Schaue nach, welche Symlinks, bzw. verkürzte Dokumentenstammangaben in den Shopkonfigs der betreffenden Abos aktiv genutzt werden
- - Traurig aber wahr: Du musst hierfür (vorzugsweise bei Gambio-Kunden) in die configure.php Dateien schauen
- - Denke auch an .htaccess Dateien
- 3. Ersetze im Kundenabo in der config den verkürzten Dokumentenstamm auf den kompletten Pfad
- Beispiel: "/var/www/web1/html/.." muss angepasst werden auf "/var/www/vhosts/web1.wwwx.hostkraft.de/html/..."
- 4. Leere den 'cache' und 'template_c' Ordner so wie Du es kennst.
- 5. Bei ganz alten Gambio-Shops ist der Stamm auch in der Datenbank enthalten
- - Öffne die Datenbank in phpMyAdmin (Du brauchst evtl. das DB-Passwort aus der configure.php)
- - suche nach /var/www/
- - Bearbeite den Eintrag innerhalb der Tabelle
Nimm Dir hierfür Zeit!
Domainnamen des Quellservers auf dem Zielserver anlegen damit Plesk, Mails und FTP auch weiter über den alten Domainnamen funktionieren
- 1. Entweder das Abonnement "mailserver.#neuerServer#.hostkraft.de" existiert bereits
- - dann füge eine neue Subdomain mit dem Namen des Quellservers hinzu -> Hosting-Typ: kein Webhosting
- (selbsterklärend aber gern am Beispiel: Migrierst Du von z.B. www12.estugo.de alle Kunden auf alice.estugo.de, legst Du in dem Abonnement "mailserver.alice.hostkraft.de" nun die Subdomain "www12.estugo.de" an.)
- 2. Wenn das Abonnement noch nicht existiert, dann hat bei Punkt 1 jemand geschlafen. Lege es spätestens nun an und füge die Subdomain hinzu
- - Abonnements -> Abonnement hinzufügen -> mailserver.#neuerServer#.hostkraft.de -> Paket ist egal
- - In diesem neuen Abo die Domain estugo.de hinzufügen -> + Domain hinzufügen -> Domainname: estugo.de
- - Wechseln in die Hosting-Einstellungen -> Zertifikat: Wildcardzertifikat "*.estugo.de" auswählen
- - Ganz wichtig: estugo.de -> E-Mail Einstellungen -> E-Mail-Service: Eingehende deaktiviert
- - dann füge eine neue Subdomain mit dem Namen des Quellservers hinzu -> Hosting-Typ: kein Webhosting
- (selbsterklärend aber gern am Beispiel: Migrierst Du von z.B. www12.estugo.de alle Kunden auf alice.estugo.de, legst Du in dem Abonnement "mailserver.alice.hostkraft.de" nun die Subdomain "www12.estugo.de" an.)
Migration aller Abos vom Quellserver auf den Zielserver
- 1. Stoppe auf dem Quellserver den iptables und fail2ban Dienst
service fail2ban stop && service iptables stop- - Beziehungsweise stoppe die Plesk Firewall sofern diese schon im Einsatz ist.
- - noch eleganter: Füge die IP des Zielhost in die Firewall ein.
- 2. Starte auf dem Zielserver den Migrationsmanager und migriere ALLE Kundenabos (bis auf die confixx-Subdomain Abos von www1., bis www69). Das dauert etwas. Mache in der Zwischenzeit etwas anderes. Richte zum Beispiel den nächsten Zielserver ein oder prüfe die Symlinks auf dem nächsten zu migrierenden Host.
- Schaue inwieweit Du die erhaltenen Warnmeldungen vor der Migration auf dem Quellserver beheben must, oder ob Du diese Warnungen ignorieren, bzw. die Fehler auf dem Zielserver beheben kannst.
- 2a. Nachdem zunächst mal alle Abos auf dem Zielserver gelandet sind, passe noch keine Servicepakete o.ä. an, denn Du willst vor dem tatsächlichen und finalen IP-Switch noch einmal eine allerletzte Synchronisierung machen.
- 3. Der Migrator legt in vielen Fällen kein "selector dir" für die migrierten User an. Du machst das also einmal global. (sudo -i)
/usr/sbin/cagefsctl --rebuild-alt-php-ini && /usr/sbin/cagefsctl --force-update
- 4. Wähle nun in Plesk, im Kundenabo, via PHP-Selector die vom Kunden auf dem Quellserver verwendete PHP-Version aus.
- 5. Achte darauf dass in den "normalen" PHP-Eisntellungen der Domain ein PHP-fastcgi Handler ausgewählt ist (sonst greift der selector nicht)
- 5.a Achte insbes. bei Weiterleitungsdomains darauf, dass in den Hosting-Einstellungen das Häckchen für die 301 Weiterleitung auf https entfernt ist.
Finale Synchronisierung der Kundendaten
Gehe dazu in den Migrations Manager, klicke vorn auf die IP der Migration und in dem darauf folgenden Fenster findest du die Option [Erneut synchronisieren]
Die Portweiterleitung vom Quellserver auf den neuen Zielserver
- 1. Logge Dich als User "root" auf dem Quellserver ein
Die Weiterleitung wird über den Dienst SOCAT realisiert. Hierfür benötigst Du neben socat, ein Script
(socat ist global ausgerollt, aber falls doch notwendig findest Du Hinweise zur Installation von "socat" siehe weiter unten "Zusatzinformationen")
- 1. Scriptdownload (falls noch nicht in Schritt 2 geschehen)
wget --user=Shopbenutzer12 --password='9k2aS2s' -P /root/ <https://www.estugo.de/files/scripts/umzugspaket.zip> && unzip -o umzugspaket.zip- Das Script socat.sh befindet sich nun ausführbar im Ordner /root/
- 2. Du kannst das Script auch manuell anlegen
mcedit socat.sh
Inhalt:
#!/bin/bash
ulimit -n 64000
socat -s TCP-LISTEN:143,fork,reuseaddr,bind=$1 TCP:$2:143 &
socat -s TCP-LISTEN:587,fork,reuseaddr,bind=$1 TCP:$2:587 &
socat -s TCP-LISTEN:80,fork,reuseaddr,bind=$1 TCP:$2:80 &
socat -s TCP-LISTEN:465,fork,reuseaddr,bind=$1 TCP:$2:465 &
socat -s TCP-LISTEN:25,fork,reuseaddr,bind=$1 TCP:$2:25 &
socat -s TCP-LISTEN:443,fork,reuseaddr,bind=$1 TCP:$2:443 &
socat -s TCP-LISTEN:110,fork,reuseaddr,bind=$1 TCP:$2:110 &
socat -s TCP-LISTEN:993,fork,reuseaddr,bind=$1 TCP:$2:993 &
socat -s TCP-LISTEN:995,fork,reuseaddr,bind=$1 TCP:$2:995 &
socat -s TCP-LISTEN:21,fork,reuseaddr,bind=$1 TCP:$2:21 &
socat -s TCP-LISTEN:20,fork,reuseaddr,bind=$1 TCP:$2:20 &
socat -s TCP-LISTEN:989,fork,reuseaddr,bind=$1 TCP:$2:989 &
socat -s TCP-LISTEN:990,fork,reuseaddr,bind=$1 TCP:$2:990 &
socat -s TCP-LISTEN:8443,fork,reuseaddr,bind=$1 TCP:$2:8443 &
socat -s TCP-LISTEN:8447,fork,reuseaddr,bind=$1 TCP:$2:8447 &
socat -s TCP-LISTEN:3306,fork,reuseaddr,bind=$1 TCP:$2:3306 &
socat -s TCP-LISTEN:7080,fork,reuseaddr,bind=$1 TCP:$2:7080 &
socat -s TCP-LISTEN:7081,fork,reuseaddr,bind=$1 TCP:$2:7081 &
socat -s TCP-LISTEN:8880,fork,reuseaddr,bind=$1 TCP:$2:8880 &
socat -s TCP-LISTEN:953,fork,reuseaddr,bind=$1 TCP:$2:953 &
socat -s TCP-LISTEN:53,fork,reuseaddr,bind=$1 TCP:$2:53 &
socat -s UDP-LISTEN:53,fork,reuseaddr,bind=$1 UDP:$2:53 &
Ports können hier nach Bedarf weggelassen oder hinzugefügt werden.
- 2a. Script ausführbar machen
chmod +x socat.sh
Alle Dienste stoppen, die das Script "umleiten" soll und Umleitung starten
- 1. Alle für die Weiterleitung relevanten Dienste müssen natürlich gestoppt werden, damit sie nicht mehr auf den Ports lauschen, auf die socat nun zugreifen soll. (siehe ganz unten)
Erst im Anschluss kann eine Portweiterleitung per socat erfolgen !!
- 2. Gestartet wird die Weiterleitung dann mittels
./socat.sh QUELL-IP ZIEL-IP
Bitte beachte, dass für die Dauer dieser Weiterleitung der fail2ban auf dem Zielsystem beendet werden oder die IP des Quellsystems gewhitelistet werden sollte, damit die Quell-IP nicht ggf. durch den fail2ban blockiert wird.
- 3. Noch ein Tipp
- Damit die Weiterleitungen rebootfest sind, die nicht mehr benötigten Dienste mittels
- CentOS7 ->
systemctl disable $Service
- CentOS6 ->
chkconfig $Service off
nicht mehr automatisch starteten lassen und das
./socat.sh QUELL-IP ZIEL-IP
in /etc/rc.local eintragen.
Prüfe die Erreichbarkeit der Kundendomains
- Im besten Fall hast Du eine Liste der Domains, die VOR dem Start des Scripts auf dem Quellserver funktionierten und prüfst nun, ob jede dieser Domains auf dem neuen Server ebenso funktioniert.
- - In dem Downloadpaket aus Schritt 1 ist auch das ausführbare Script webcheck.sh enthalten
- - Nachdem Du das Script ausgeführt hast
./webcheck.sh, bekommst Du eine Liste mit Domainname und Statuscode. Das kann Dir helfen.
Deaktiviere den Server in Zabbix, denn sonst würde Dir andauernd gemeldet, dass der Server down ist.
Shared-Server: http://sharon.estugo.de/
Managed-vServer: http://zabbix.estugo.de/zabbix/ oder http://mamonix.estugo.de/
Configuration > Hosts > Status -> Dort einfach auf "Enabled" klicken
Was ist final zu erledigen?
Neue IP in den Domain-DNS
- Verfahre wie in Punkt 1 beim Anpassen der TTL
- - Wechsele nun in die partner.providerbox.com
- - Nutze folgendes Menü
- Nameserver -> Zonen ändern -> Was soll verändert werden? A-Record -> ersetzen -> Subdomains: alle [x] -> alter Wert: QuellIP -> neuer Wert: ZielIP
- - In das Feld "folgende Liste von Domains" fügst Du alle Domains aus der Datei domainliste.txt ein
- Passe die Domain hostkraft.de und schlussendlich auch die Domain estugo.de an
Service-Pakete anpassen
Nachdem die Abos final synchronisiert sind und die Portweiterleitung läuft, passe unbedingt die mit migrierten Servicepakete an. Noch besser: Ordne dem Kunden am besten ein passendes aktuelles Paket zu
- Ressorcen
- "Acronis Backup Limit" -> 7
- Berechtigungen
- "Verwaltung des Zugriffs auf den Server via SSH" -> Zugriff nur auf chrooted-Umgebung erlauben (vernachlässigbar)
- "Verwaltung von PHP-Version und -Handler" -> DEAKTIVIEREN
- "Backup und Wiederherstellung der Abonnement-Daten mittels Serverspeicher" -> AUS
- "Backup und Wiederherstellung der Abonnement-Daten mithilfe des Remote-Speichers" -> AUS
- "Acronis Backup" AKTIVIEREN
- Hosting-Parameter >
- "Webbenutzer dürfen Skripte nutzen" -> aktivieren
- "FastCGI-Unterstützung" -> aktivieren
- PHP-Einstellungen
- "PHP-Unterstützung (PHP-Version)" -> eine fastcgi Version auswählen
Stoppen des alten Servers
- 1. Stoppe nach +/- 7 Tagen den alten Server
- 2. Um Speicherplatz freizugeben und auch die IP wieder verfügbar zu haben, setze Dir einen Termin für die Löschung des alten Servers +14 Tage
Zusatzinformationen
Freilich muss zunächst socat installiert werden. Das ist auf Maschinen mit CentOS6 nicht zu einfach, aber es geht:
- Die einfache Installation via yum scheitert zuverlässig daran, dass es für CentOS6 keine Standard yum-Repos mehr gibt. Alles was Du via yum machen willst, scheitert also.
- 1. Du musst also yum erstmal ein funktionierende Repos geben
curl <https://www.getpagespeed.com/files/centos6-eol.repo> --output /etc/yum.repos.d/CentOS-Base.repo
- Der Befehl zieht sich eine yum-Repo-Konfiguration mit funktionierenden Repos und schreibt diese gleich in die entsprechende yum-Konfiguration
- Genau nachlesen kannst Du das hier https://www.getpagespeed.com/server-setup/how-to-fix-yum-after-centos-6-went-eol
- 2. Spezielles Repo für socat hinzufügen
rpm -Uvh <https://forensics.cert.org/cert-forensics-tools-release-el6.rpm>
- 3. Installation von socat unter Verwendung dieses Repos
yum --enablerepo=forensics install socat
- 4. Repo deaktivieren (man weiß ja nie)
rpm -e cert-forensics-tools-release
Zu stoppende Dienste könnten sein:
service postfix stop && service xinetd stopservice spamassassin stopservice psa stopservice sw-engine stopservice sw-cp-server stopservice saslauthd stop && service courier-authdaemon stopservice courier-imapd stop && service courier-imaps stop && service courier-pop3d stop && service courier-pop3s stopservice crond stopservice mysqld stopservice mariadbd stopservice httpd stop && service nginx stop && service zabbix-agent stop
Hinterher via ps faux schauen ob noch Dienste laufen und ggfs. via netstat -tulpn schauen, ob noch ein Dienst auf einem Port lauscht den man weiterleiten möchte.