{"id":860,"date":"2026-02-22T14:24:46","date_gmt":"2026-02-22T13:24:46","guid":{"rendered":"https:\/\/brinkhaus-gmbh.de\/?p=860"},"modified":"2026-02-22T14:28:18","modified_gmt":"2026-02-22T13:28:18","slug":"ein-serverumzug-mit-claude-code-was-ging-was-ging-nicht-und-was-das-fuer-kleine-firmen-heisst","status":"publish","type":"post","link":"https:\/\/www.brinkhaus-gmbh.de\/en\/ein-serverumzug-mit-claude-code-was-ging-was-ging-nicht-und-was-das-fuer-kleine-firmen-heisst\/","title":{"rendered":"Ein Serverumzug mit Claude Code &#8211; Was ging, was ging nicht und was das f\u00fcr kleine Firmen hei\u00dft"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong>Ausgangslage<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-media-text has-media-on-the-right is-stacked-on-mobile\"><div class=\"wp-block-media-text__content\">\n<p>Ich leite ein kleines Ingenieurb\u00fcro. Wir machen IoT, Maschinenanbindung, Software-Entwicklung. F\u00fcnf Leute, keine IT-Abteilung. Die IT-Abteilung bin ich, abends und am Wochenende.<\/p>\n\n\n\n<p>Unser VPS bei Strato lief seit sieben Jahren. Docker-Container \u00fcber Container, Start-Skripte aus verschiedenen Epochen, ein Backup-Konzept, das man wohlwollend als \u201egewachsen&#8221; bezeichnen konnte. Manches lief noch, manches war seit Jahren gestoppt und lag einfach nur noch rum. Der Server funktionierte, aber wenn mich jemand gefragt h\u00e4tte, was da eigentlich alles drauf ist \u2014 ich h\u00e4tte raten m\u00fcssen.<\/p>\n\n\n\n<p>Der Umzug auf einen neuen VPS stand seit Monaten an. Bessere Hardware, aktuelleres Ubuntu, die Gelegenheit, mal auszumisten. Aber ein Serverumzug mit dutzenden Docker-Containern, VPN, Backups, Sicherheitskonfiguration \u2014 das ist ein Wochenende Arbeit. Mindestens. Und ich hatte dieses Wochenende seit Monaten nicht.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-768x1024.jpg\" alt=\"\" class=\"wp-image-752 size-full\" srcset=\"https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-768x1024.jpg 768w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-225x300.jpg 225w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-1152x1536.jpg 1152w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-1536x2048.jpg 1536w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-2000x2667.jpg 2000w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2024\/11\/Brinkhaus_2024_formell-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>SSH-Zugang und \u201eArbeite dich ein&#8221;<\/strong><\/h3>\n\n\n\n<p>Ich nutze Claude Code seit einiger Zeit f\u00fcr Softwareentwicklung. Irgendwann kam der Gedanke: Wenn das Ding per Terminal arbeitet und mein SSH-Key auf dem Server liegt \u2014 warum soll es nicht auch Serveradministration k\u00f6nnen?<\/p>\n\n\n\n<p>Der Anfang war simpel: Neuen VPS bestellt, Claude den SSH-Key auf den neuen Server kopieren lassen. Ab diesem Moment hatte die KI denselben Zugang wie ein Systemadministrator. Per SSH, mit Root-Rechten.<\/p>\n\n\n\n<p>Aber ich habe nicht mit \u201emigriere alles&#8221; angefangen. Der erste Auftrag war: <strong>\u201eArbeite dich auf dem alten Server ein.&#8221;<\/strong><\/p>\n\n\n\n<p>Claude sollte die Struktur unter `\/var\/dockerdata` analysieren. Jedes Verzeichnis durchgehen, herausfinden, welche Container noch aktiv sind, wie sie gestartet werden, welche Daten wo liegen. Die Backup-Skripte lesen und verstehen.<\/p>\n\n\n\n<p>Das Ergebnis war eine Dokumentation, die ich selbst nie geschrieben h\u00e4tte. Nicht aus Faulheit \u2014 sondern weil man als Betreiber eines Servers vieles im Kopf hat und es nie aufschreibt. Claude hatte keinen Kopf, in dem etwas implizit vorhanden war. Also schrieb es alles auf.<\/p>\n\n\n\n<p>Diese Dokumentation landete als README.md direkt in `\/var\/dockerdata`, neben der Infrastruktur selbst. Kein externes Wiki, kein separates Repo. Die Doku dort, wo die Sachen sind.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Aufr\u00e4umen, dann umziehen<\/strong><\/h3>\n\n\n\n<p>Vor dem Umzug kam das Ausmisten. Container, die seit Jahren nicht mehr liefen \u2014 Gitea, Spacedeck, ein alter Build-Slave, ein aufgegebenes Monitoring \u2014 wurden nicht gel\u00f6scht, sondern mitsamt ihrer Daten nach `\/old` verschoben. Raus aus der aktiven Struktur, aber wiederherstellbar. Das war mir lieber als endg\u00fcltiges L\u00f6schen.<\/p>\n\n\n\n<p>Das lief iterativ. Claude schlug eine Struktur vor, mir gefiel nicht alles, ich korrigierte, Claude passte an. Normaler Arbeitsprozess, wie mit einem Mitarbeiter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Neuer Server: Zielbild statt Schritt-f\u00fcr-Schritt<\/strong><\/h3>\n\n\n\n<p>Auf dem neuen Server habe ich Claude nicht Schritt f\u00fcr Schritt angewiesen, sondern ein Zielbild beschrieben:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zentrale Ablage unter `\/var\/docker_data` f\u00fcr alle Container<\/li>\n\n\n\n<li>VPN-Verbindung zur Fritzbox in der Firma<\/li>\n\n\n\n<li>N\u00e4chtliche Backups zum Firmenserver \u00fcber das VPN<\/li>\n\n\n\n<li>Brute-Force-Schutz<\/li>\n\n\n\n<li>Automatische Updates f\u00fcr Docker-Images und OS-Pakete<\/li>\n\n\n\n<li>Laufende Dokumentation im selben Verzeichnis<\/li>\n<\/ul>\n\n\n\n<p>Der letzte Punkt war wichtig. Ich sagte Claude: \u201eSchreib Dir selbst eine Dokumentation. Was ist eingerichtet, was fehlt noch, wie ist der Stand.&#8221; Das hatte einen praktischen Grund: Ein Serverumzug an einem St\u00fcck ist f\u00fcr einen Gesch\u00e4ftsf\u00fchrer unrealistisch. Es kommen Anrufe, Mails, Kundentermine dazwischen. Wenn ich nach drei Stunden Pause weitermachte, las Claude seine eigene Dokumentation und wusste, wo wir standen.<\/p>\n\n\n\n<p>Nebenbei konnte ich Wartezeiten nutzen. W\u00e4hrend der Datentransfer vom alten Server lief \u2014 Gigabytes \u00fcber die Leitung \u2014 besprachen wir die VPN-Strategie oder das Update-Konzept.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Was Diskussion brauchte und was nicht<\/strong><\/h3>\n\n\n\n<p>Eine Sache, die gut funktionierte: Claude unterschied von sich aus, was meine Meinung erfordert und was nicht.<\/p>\n\n\n\n<p>Das VPN war ein echtes Diskussionsthema. WireGuard, IPSec, OpenVPN \u2014 jeder Ansatz hat andere Implikationen, abh\u00e4ngig von der Fritzbox-Konfiguration. Claude legte Optionen vor, erkl\u00e4rte Vor- und Nachteile, und wir entschieden gemeinsam f\u00fcr strongSwan mit IKEv1 (das, was die Fritzbox am zuverl\u00e4ssigsten kann).<\/p>\n\n\n\n<p>SSH-H\u00e4rtung hingegen war kein Diskussionsthema. Fail2ban installieren, Passwort-Login deaktivieren, Key-Only-Auth erzwingen \u2014 das sind Best Practices, keine strategischen Entscheidungen. Claude richtete das ein und meldete das Ergebnis. Fertig, weiter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Wo es schiefging: das Backup<\/strong><\/h3>\n\n\n\n<p>Nicht alles lief glatt, und das geh\u00f6rt in einen ehrlichen Bericht.<\/p>\n\n\n\n<p>Das Backup richtete Claude zun\u00e4chst mit rsnapshot ein \u2014 ein bew\u00e4hrtes Tool, das inkrementelle Backups \u00fcber Hardlinks macht. Die Sicherung lief n\u00e4chtlich per Cronjob \u00fcber das VPN auf den Firmenserver, montiert per CIFS.<\/p>\n\n\n\n<p>Zwei Tage lang sah alles gut aus. Dann bat ich Claude, zu verifizieren, ob wirklich alle Dateien korrekt gesichert werden. Ergebnis: <strong>Symbolische Links wurden \u00fcber CIFS nicht korrekt \u00fcbertragen.<\/strong> Bei Docker-Containern, deren Verzeichnisstrukturen auf Symlinks angewiesen sind, ein echtes Problem.<\/p>\n\n\n\n<p>Das war kein Fehler, den Claude h\u00e4tte vermeiden m\u00fcssen \u2014 rsnapshot \u00fcber CIFS ist eine valide Konfiguration, und dass Symlinks \u00fcber SMB-Mounts Probleme machen, ist eine jener Eigenheiten, die man kennt oder eben nicht. Aber es zeigt: Man muss die Ergebnisse pr\u00fcfen. KI-Arbeit ist nicht fehlerfrei, und Vertrauen ohne Kontrolle w\u00e4re fahrl\u00e4ssig.<\/p>\n\n\n\n<p>Nach Beratung mit Claude sind wir auf Restic umgestiegen. Restic \u00fcbertr\u00e4gt die Daten als deduplizierte, verschl\u00fcsselte Bl\u00f6cke \u2014 das Dateisystem des Ziels spielt keine Rolle mehr. Symlinks, Berechtigungen, Hardlinks werden korrekt erfasst. Das Backup l\u00e4uft seitdem sauber.<\/p>\n\n\n\n<p>H\u00e4tte ich das Problem ohne KI schneller gefunden? Vielleicht. H\u00e4tte ich es ohne die systematische Verifikation \u00fcberhaupt gefunden, bevor es im Ernstfall zu sp\u00e4t gewesen w\u00e4re? Vermutlich nicht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Das Ergebnis<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Der Umzug dauerte, verteilt \u00fcber mehrere Sessions, etwa zwei Nachmittage meiner Zeit. Die H\u00e4lfte davon war Diskussion und Entscheidungsfindung, nicht Handarbeit.<\/p>\n\n\n\n<p>Am Ende steht ein Server mit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Traefik als Reverse Proxy mit automatischen Let&#8217;s-Encrypt-Zertifikaten<\/li>\n\n\n\n<li>Wiki.js, OpenClaw (Dokumentenmanagement), Minecraft-Server f\u00fcr die Kinder, Watchtower f\u00fcr automatische Image-Updates<\/li>\n\n\n\n<li>VPN per strongSwan\/IPSec zur Firmenzentrale, dar\u00fcber CIFS-Mounts zu zwei Synology-NAS<\/li>\n\n\n\n<li>N\u00e4chtliche Restic-Backups auf den Firmenserver<\/li>\n\n\n\n<li>fail2ban, SSH-H\u00e4rtung, unattended-upgrades<\/li>\n\n\n\n<li>Einer README.md, die den kompletten Zustand beschreibt<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"1024\" src=\"https:\/\/brinkhaus-gmbh.de\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-22-142138-684x1024.png\" alt=\"\" class=\"wp-image-862\" srcset=\"https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-22-142138-684x1024.png 684w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-22-142138-200x300.png 200w, https:\/\/www.brinkhaus-gmbh.de\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-22-142138.png 731w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Nicht perfekt: Der alte DokuWiki-Container basiert auf einem Image, das Docker Hub inzwischen entfernt hat. Ein Debian-Mirror-Container hat ein lokales Image, das nach der Migration nicht geladen wurde. Das steht in der Dokumentation unter \u201eKnown Issues&#8221; \u2014 auch das hat Claude selbst geschrieben. Offene Probleme zu dokumentieren statt sie zu verstecken, hat mir gefallen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dokumentation als Nebenprodukt<\/strong><\/h3>\n\n\n\n<p>Der Punkt, der mich r\u00fcckblickend am meisten besch\u00e4ftigt: die Dokumentation.<\/p>\n\n\n\n<p>Ich habe Server seit \u00fcber 15 Jahren selbst administriert. Ich hatte nie eine vollst\u00e4ndige, aktuelle Dokumentation meiner Infrastruktur. Nicht weil ich es nicht wollte, sondern weil es immer die Aufgabe war, die nach dem n\u00e4chsten Kundenanruf hinten runterfiel.<\/p>\n\n\n\n<p>Claude dokumentiert nicht nur, weil ich es anweise. Claude dokumentiert, weil ich ben\u00f6tige, dass es den Zustand f\u00fcr seine n\u00e4chste Session festgehalten hat. Es hat kein implizites Wissen, kein \u201eich wei\u00df ja, wie ich das damals eingerichtet habe&#8221;. Alles, was Claude wei\u00df, steht in Dateien. Die Dokumentation ist keine Tugend \u2014 sie ist eine technische Notwendigkeit.<\/p>\n\n\n\n<p>Aber: wenn morgen ein Auditor fragen w\u00fcrde, was auf meinen Servern l\u00e4uft und wie sie abgesichert sind \u2014 ich h\u00e4tte alle Dokumente sauber abgelegt vorliegen und griffbereit. Das gab es vorher so nicht &#x1f44c; .<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Was hei\u00dft das f\u00fcr IT-Abteilungen?<\/strong><\/h3>\n\n\n\n<p>Ich mache mir Gedanken \u00fcber IT-Abteilungen in kleinen und mittleren Unternehmen. Nicht, weil KI morgen alle Admins ersetzt \u2014 das ist Unsinn. Aber die Art der Arbeit verschiebt sich.<\/p>\n\n\n\n<p>Routine-Administration an Linux-Servern \u2014 Pakete aktualisieren, Dienste einrichten, Logs pr\u00fcfen, Backups konfigurieren \u2014 das kann eine KI heute schon brauchbar erledigen. Nicht perfekt, wie das Backup-Beispiel zeigt. Aber brauchbar genug, dass man die Ergebnisse pr\u00fcfen und korrigieren kann, statt alles selbst zu tippen. Und ehrlichgesagt w\u00fcrden auch IT-Fachkr\u00e4ften bestimmte Fehler passieren und sie w\u00e4ren darauf angewiesen, z.B. zu pr\u00fcfen, ob ein Backup \u00fcberhaupt wiederherstellbar ist.<\/p>\n\n\n\n<p>Was man weiterhin braucht: jemanden, der wei\u00df, welche Fragen man stellen muss. Der merkt, dass man Symlinks \u00fcber CIFS pr\u00fcfen sollte. Der entscheidet, ob WireGuard oder IPSec die richtige Wahl ist. Architekten statt Handwerker, wenn man so will.<\/p>\n\n\n\n<p>F\u00fcr ein kleines Unternehmen wie meines ist das eine gute Nachricht. Ich brauche keinen Admin, der regelm\u00e4\u00dfig vorbeikommt. Ich brauche mein eigenes technisches Verst\u00e4ndnis \u2014 und ein Werkzeug, das die Ausf\u00fchrung \u00fcbernimmt.<\/p>\n\n\n\n<p>&#8212;<\/p>\n\n\n\n<p><em>*Jan Brinkhaus leitet die Brinkhaus GmbH in Isernhagen. Das Ingenieurb\u00fcro ist spezialisiert auf IoT, Maschinenanbindung und Software-Entwicklung.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ausgangslage Ich leite ein kleines Ingenieurb\u00fcro. Wir machen IoT, Maschinenanbindung, Software-Entwicklung. F\u00fcnf Leute, keine IT-Abteilung. Die IT-Abteilung bin ich, abends und am Wochenende. Unser VPS bei Strato lief seit sieben Jahren. Docker-Container \u00fcber Container, Start-Skripte aus verschiedenen Epochen, ein Backup-Konzept, das man wohlwollend als \u201egewachsen&#8221; bezeichnen konnte. Manches lief noch, manches war seit Jahren gestoppt &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.brinkhaus-gmbh.de\/en\/ein-serverumzug-mit-claude-code-was-ging-was-ging-nicht-und-was-das-fuer-kleine-firmen-heisst\/\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;Ein Serverumzug mit Claude Code &#8211; Was ging, was ging nicht und was das f\u00fcr kleine Firmen hei\u00dft&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-860","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"en","enabled_languages":["de","en"],"languages":{"de":{"title":true,"content":true,"excerpt":false},"en":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/posts\/860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/comments?post=860"}],"version-history":[{"count":2,"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/posts\/860\/revisions"}],"predecessor-version":[{"id":866,"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/posts\/860\/revisions\/866"}],"wp:attachment":[{"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/media?parent=860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/categories?post=860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.brinkhaus-gmbh.de\/en\/wp-json\/wp\/v2\/tags?post=860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}