m158/docs/migration
2024-07-12 16:28:43 +02:00
..
README.md [a] config 2024-07-12 16:28:43 +02:00

Realisieren: Gameservermigration

Inhaltsverzeichnis

Vorbereitung

Nach langem nachdenken haben wir doch entschieden eine dedizierte IP zu bestellen, da Clustering von zwei Hosts über einer SOCKS5 Proxy schlecht verlaufen wird. Deswegen probieren wir es erst recht nicht, und sparen uns die Mühe.

ip order

Zum Glück kostet so eine IPv4 nicht so viel. Wir bestellen hier nur eine, da wir kein Subnetz oder eine Failover IP brauchen.

ip order confirmation

Das geht auch sehr schnell, schon ist der Bestellauftrag raus. Sobald die IP Adresse konfiguriert ist, sollte eine Mail ankommen.

ip configured

Jetzt müssen wir die VM und Wings selber noch umkonfigurieren:

  1. Netzwerkinterface von Wings VM ändern

    change interface of vm

    Dann muss man auch noch die richtige MAC-Adresse setzen, um MAC-Address-Spoofing zu vermeiden. Diese ist in diesem Screenshot jetzt einfach nicht sichtbar.

  2. Neue IP Adresse auf VM konfigurieren

    # edit netplan config
    $ vim /etc/netplan/50-cloud-init.yaml
    

    old configuration of IPs

    wird zu

    new configuration of IPs

    geändert

    Dann fehlt noch ein Reload der Konfiguration:

    # apply netplan
    $ netplan apply
    

    ip addr

  3. Wings Konfiguration anpassen

    Wings muss jetzt auch von der neuen IP Adresse wissen, denn momentan ist die Verbindung wieder gekappt. Dazu gehen wir zurück ins Panel → Administrationspanel → Nodes → kubelo Editieren → Settings:

    changes to configuration

    Hier ändern wir nur diese Optionen. Die neue Konfiguration ist mit der nest.sangelo.space erreichbar (die A Records wurden bereits erstellt), Wings sollte über einer SSL Verbindung erreichbar sein (konfigurieren wir jetzt gleich), und die neue Konfiguration ist nicht hinter einer Proxy.

    Bevor wir hier speichern, pflanzen wir kurz SSL Zertifikate auf dem Server.

  4. SSL Zertifikate

    Um auf dem Server Zertifikate zu installieren, nutzen wir certbot, da dieses Tool das dramatisch vereinfacht und auch automatisiert.

     # install certbot
     $ sudo apt update && sudo apt install certbot
    
     # get DNS challenge instructions
     $ certbot -d nest.sangelo.space --manual --preferred-challenges dns certonly
    

    certbot

    Wir erstellen jetzt dieses TXT-Record auf der Domain, und klicken nach ein paar Minuten auf Enter um weiterzumachen.

    certbot finish

    Das Zertifikat ist jetzt aktiv und einsatzbereit. In einer Produktionsumgebung würde man diesen Prozess von hier an automatisieren, aber das würde hier zu viel zum Dokumentieren sein.

  5. Verbinden

    Nachdem Wings die neue Konfiguration und den angepassten Zertifikatspfaden lesen kann, sollte die Verbindung zu Wings klappen, nachdem wir den Service neustarten

    # restart wings
    $ systemctl restart wings.service
    

    Jetzt können wir im Pterodactyl Panel sehen, wie die Verbindung aufgebaut wird:

    healthy node

Vom alten Node migrieren

  1. SSH Key generieren

    sangelo@panel:~$ ssh-keygen -t ed25519 -f .ssh/ptero-transfer
    Generating public/private ed25519 key pair.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in .ssh/ptero-transfer
    Your public key has been saved in .ssh/ptero-transfer.pub
    The key fingerprint is:
    SHA256:gNcU43mDzyS3RdZG+p6LtsjDHe9PWMsHI+549GOJzNQ sangelo@panel.sangelo.space
    The key's randomart image is:
    +--[ED25519 256]--+
    |        +.  oo.  |
    |     . + + o .o  |
    |    . o * = o.   |
    |     . . B + .   |
    |        S + ..+ .|
    |           .+oE*.|
    |         . *.=++o|
    |         .o+B.*o.|
    |          ++++oo.|
    +----[SHA256]-----+
    sangelo@panel:~$
    

    und hinterlegen auf dem lunivity.com Server:

    # pterodactyl transfer
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJaGCBu4qekZQbrBlyt7CqvlNePu6u5ExqyBUF8/K1L9 sangelo@panel.sangelo.space
    
  2. Serverdateien kopieren

    # rclone
    $ rclone sync /var/lib/pterodactyl/volumes/ sangelo@lunivity.com:/home/sangelo/old-server-volumes/ --copy-unsafe --preserve-perms --verbose --ignore-existing
    
  3. Server erstellen

    Für den Skelett-Server haben wir zu Demonstrationszwecken einen Beispielsserver erstellt im Panel. Die Konfiguration ist unten im Screenshot ersichtlich. Dabei sind wir nicht weit von der Standardkonfiguration abgewichen, ausser dass wir die Java Verison auf 17 gesetzt haben und die Minecraft Version als als 1.19.2 definiert haben.

    skeleton server config

  4. Initiale Serverfiles löschen und mit neuen ersetzen

    $ rm -rf /var/lib/volumes/<uuid-of-server>/* && copy /home/sangelo/old-server-volumes/<uuid-of-server>/* /var/lib/volumes/<uuid-of-server>/
    
  5. Server starten und verbinden

Altes Node auflösen

Um die alte Node aufzulösen kümmere ich mich ausserhalb diesem Projekt, aber im Endeffekt muss nur Wings Service deaktivieren und stoppen, und die Pterodactyl Panel Container mit der Docker CLI runtergenommen werden.
Der Rest wird automatisch gelöst (Daten löschen) sobald ich den Server abbestelle.

# stop services
$ sudo systemctl disable --now wings.service
$ sudo docker compose -f /etc/pterodactyl/docker/docker-compose.yml down