Eine immer wieder, auch im Forum von Contenido, gestellte Frage ist, wie mache ich ein Update/Upgrade von Contenido? Wie so oft im Internet und bei der Programmierung führen auch hier „viele Wege nach Rom“. Einen dieser Wege, und zwar einen Praxis erprobten, möchte ich hier aufzeigen.
1. Ausgangslage
Nehmen wir mal an wir haben eine funktionierendes Contenido 4.6.15 mit ModRewrite-Erweiterung und Standardmodulen installiert. Dieses ist (noch) nicht gehackt und alle Core-Dateien im Webspace sind noch original.
Wir möchten dieses nun auf eine aktuelle Version von Contenido (z.Z. 4.8.12), unter Verwendung des AMR-Plugins (Advanced ModRewrite Version 0.5.4), upgraden.
2. Vorbereitung
Um ordentlich und in Ruhe arbeiten zu können, sollte es nach Möglichkeit keinerlei Zugriffe auf Seite und DB geben. Bei Liveauftritten von Kunden führe ich daher solche Arbeiten gerne in der Nacht durch, wobei ich hingehe und die Seiten quasi „Offline“ nehme, indem ich eine Wartungsseite vorschalte.
Für den Fall das die Seite auf Wunsch des Kunden nun doch überhaupt nicht offline gehen , bzw. die Ausfallzeit minimiert werden, soll, besteht auch die Möglichkeit das Update über eine Kopie der Datenbank zu machen, wobei Zugriffe an der Live-DB während dieser Zeit verloren gehen. Es kommt also wie fast immer auf die mit dem Kunden gemachten Absprachen an.
Auch sollte man bevor man anfängt vorhandene errorlogs checken, nicht das schon Fehler eingebaut sind. Nach dem Update heißt es sonst oft dies oder jenes habe vorher funktioniert und geht nun nicht mehr.
Wichtig!
Ein vorhandenes ModRewrite sollte, je nach verwendeter Version, deaktiviert bzw. deinstalliert werden. Man sollte sich aber die Form der URL merken, so das man später mit dem AMR-Plugin versuchen kann, diese wieder nachzubilden.
3. Backup
Das Wichtigste machen wir zuerst. Backup… Backup… Backup…
Die Datenbank
Sicherlich kann man einfach einen DB-Dump machen und fertig, ich gehe aber grundsätzlich hin und mache mir zusätzlich ein wenig mehr Arbeit. Bestimmte Einträge in der DB benötigen wir bei unserem Backup bzw. für unser Update nicht, da diese z.B. einen Dump unnötig aufblähen. Dazu gehören die Tabellen con_code oder auch con_mod_history, die es in einer 4.8er Version nicht mehr gibt, da hier die Modulhistory über XML-Dateien gemacht wird. Potentielle Kandidaten sind aber auch die Tabellen con_actionlog (Backendbenutzer Log) oder con_stat_archive (Statistik Archiv).
Nur bitte, keine dieser DB-Tabellen löschen, wenn ihr die Daten nicht mehr benötigt, dann nur Leeren.
Auch sollte man die Datenbank prüfen bzw. optimieren. Funktionen dazu gibt es sowohl für den Kommandozeilen Client als auch bei phpMyAdmin.
Für große Datenbanken kann ich für das Backup MySQLdumper oder BigDump empfehlen, beide benötigen aber zusätzliche Installationen und auch etwas Zeit zur Einarbeitung, wobei BigDump da einfacher, aber auch nur auf Englisch ist.
Der Webspace
Hier reicht es zumeist ersteinmal aus alle Verzeichnisse von Contenido in ein neu zu erstellendes Verzeichnis, z. B. /backup, zu verschieben. Man kann auch zur Sicherheit alles downloaden oder, falls man Zugriff per SSH hat, in ein zip oder gzip Archiv packen.
Um Fragen zuvor zu kommen, nein ich spiele die neuen Dateien nicht einfach über die alte Installation. Dieses kann man sicherlich noch bei einem Update von 1 oder 2 Versionsschritten machen. Bei so einem großen Sprung kann ich es nicht empfehlen. Dateien die in der neuen Version nicht vorhanden sind, bzw. auch nicht mehr benötigt werden, verbleiben von der alten Version und können dann immer noch potentielle Sicherheitslöcher darstellen. Also besser Alles runter und neu hochgeladen.
4. Contenido Update/Upgrade
Ich denke jedem der bis hier gelesen hat ist klar was nun kommt. Nun gut, trotzdem zum Nachvollziehen. Wir laden uns die Sourcen der benötigten Version von contenido.org und entzippen diese entweder, und wenn möglich, direkt auf unserem Webspace, oder machen dies erst lokal und laden dann alles per FTP hoch. Hierbei empfehle ich FileZilla, da dessen Grundeinstellung schon weitestgehend für den Praxiseinsatz optimiert sind.
Sind alle Dateien „oben“ kopieren wir noch aus unserem Backupverzeichnis die Konfigdatei (contenido/includes/config.php) in das entsprechende Verzeichnis unserer Upgradeversion und Starten das Setup durch Aufruf von unsere_domain.tld/setup. Nach Auswahl der Sprache im 1. Schritt, wählen wir im nächsten Schritt „Bestehende Contenido Installation upgraden“. Alle weiteren Schritte sind prinzipiell die selben wie bei einer Neuinstallation, wobei es noch einen wichtigen Punkt zu beachten gibt.
Schreibrechte
Da das Setup bei einem Upgrade zum Einen davon ausgeht, das ja nur die Dateien überschrieben wurden und zum Anderen auch nicht wissen kann, wo der aktive Mandant liegt, bzw. ob es mehrere Mandanten gibt, wird vom Setup auch nicht auf die Schreibrechte geprüft. Setup geht einfach davon aus, das alles korrekt ist. Da wir unseren CMS-Ordner aber neu hochgeladen haben, stimmen dort die Schreibrechte garantiert nicht. Also müssen wir den wichtigsten Verzeichnissen erst die richtigen Rechte geben, bevor wir mit Contenido problemlos arbeiten können. Welche Verzeichnisse das sind kann man in der mitgelieferten README.txt nachlesen.
Kopieren von Dateien
Nachdem das Setup fertig ist und wir die heruntergeladene config.php wieder per FTP hochgeladen haben, rufen wir im nächsten Schritt das Backend auf und testen dort Zugang und Funktionen. Geht dort Alles, können wir zwar das Frontend nun auch schon aufrufen, da aber Bilder und CSS noch fehlen, sieht es meist noch etwas „unschön“ aus.
Also kopieren wir nun im nächsten Schritt alle benötigten Dateien, wie Bilder, CSS , den upload-Ordner, Javascripte und/oder zusätzliche php-Dateien, aus unserem Backupordner in den CMS-Ordner. Nun sollte unser Frontend wieder funktionieren.
5. Module
Hier scheiden sich die Gemüter. Oft bekomme ich recht aktuelle Installationen von Contenido zu Gesicht, bei denen noch „ältere“ Versionen von Modulen laufen. Gerade bei Navigation oder Sitemap sollte man sich aber überlegen, diese gegen die „Neuen“ der Upgradeversion auszutauschen. Dieses ist Mehrarbeit, die sich in Form von Performancegewinn und zufriedenen Kunden bemerkbar macht.
Durch neuere verwendete Funktionen aus dem Core von Contenido sind die Module der neuen Version schneller und besser abgestimmt.
6. AMR-Plugin installieren
Läuft unsere Installation wieder können wir nun noch das Advanced ModRewrite Plugin installieren und Einrichten. Dieses gibt es immer passend zu der aktuellen Contenidoversion, soll aber hier nicht ausführlicher besprochen werden. Informationen zur aktuellen Version und Installation findet ihr im Contenido Forum.
7. Aufräumen
Zu guter Letzt sollten wir noch unseren „Arbeitsplatz“ aufräumen. Dazu gehört ein Umbenennen oder Löschen des Setup-Verzeichnisses (besser Löschen!) genauso, wie ein nochmaliges Prüfen des Front- und Backends.
Unseren Backupordner sollten wir noch eine Zeit lang im Web liegen lassen, wir können ihn aber zur Sicherheit mit einer htaccess-Datei vor Zugriffen schützen. Spätestens beim nächsten Upgrade gehört er dann aber in den Papierkorb oder ins Archiv.
8. Resumée
Auch wenn wir für dieses Upgrade etwas länger brauchen, als wenn wir nur einfach alles Neue hochladen und ein Setup drüber fahren, finde ich diese Vorgehensweise besser. Alle, nicht mehr benötigten, „Altlasten“ werden dabei entsorgt und man kann sicher sein, das es nicht weiterhin noch Dateien mit altbekannten Sicherheitslücken gibt.
Ich hoffe, ich konnte euch mit diesem Beitrag zum Upgrade von Contenido helfen. Eine punktuell zusammengefasste Version des Updatevorgangs könnt ihr auch in der Contenido-FAQ finden.
Und wie immer, Fragen und Anregungen sind natürlich willkommen. 😉
Hallo Reinhardt,
hmm, das hatte ich so noch nicht. Bei mir hat bei einem Upgrade immer das Setup solche, bei älteren Versionen, fehlenden DB-Felder geschrieben.
Werd ich mir aber auf alle Fälle beim nächsten Upgrade einer 4.6.15er mal anschauen.
Gruß Ortwin
Hallo Ortwin,
habe nun das Upgrade von 4.6.15 auf 4.8.12 gemacht! Also: Neuinstallation mit Restore der alten Daten. Und siehe da: Das Login im Backend funktioniert nicht mehr. Die errorlog.txt (im Verzeichnis contenido/logs) offenbart einen Fehler in einer WHERE-Clausel. Ich musste in der mySQL-Tabelle phplib_auth_user_md5 zwei Spalten einfügen: „valid_from“ und „valid_to“ vom Typ „Date“. Nun funktioniert die Anmeldung im Backend.
Vielleicht hilft diese Vorgehensweise jemandem …
Nochmals vielen Dank!
Hallo Ho,
vielen Dank für die Rückmeldung.
Dann kann dieser Teil ja so in mein Contenido-Buch Einzug halten.
Und was das Kopieren betrifft, gerne, immer, für die private Nutzung. Ansonsten gilt wie schon in der Werbung.
Gruß Ortwin
Hallo Ortwin,
vorweg: Klasse Anleitung, auch die Begründung warum eine Neuistallation einfach besser ist als das „Darüberbügeln“.
Habe Deine Anleitung für ca. 10 Websites durchgeführt. Ergebnis: NoProb´s.
So und jetzt kopiere ich mir Deine Anleitung zu meinen Doku´s, damit ich das nie wieder vergesse.
Nochmals Dank für Deine Arbeit.
Ho
Hallo Reinhardt,
vielen Dank für das Lob. 🙂
Besondere Hinweise zu geben für solch ein Upgrade ist immer schwierig wenn man den Umfang der Installation nicht kennt.
Ich empfehle dabei immer sowas erst einmal Lokal, oder in einem temporären Verzeichnis auf dem Server, welches man per .htaccess und .htpasswd absichert, zu machen.
Naja, und das wichtigste ist natürlich immer ein Backup. 😉
Gruß Ortwin
Hallo Ortwin,
vielen Dank für die tolle Anleitung.
Ich muss ein 4.6.15-System upgraden, welches seit Jahren stabil läuft. Der Kunde möchte aber die Version 4.8 …
Hast du für diesen Schritt noch besondere Hinweise für mich?
Grüße
Reinhardt
Hallo,
dann mail mir mal, was es kosten würde, wenn Du das System neu aufsetzt.
Gruß
Martin
Hallo Martin,
kann ich mir garnicht vorstellen, das man dir im Forum nicht helfen konnte.
Nun gut, sei es wie es sei…
Ich kann dazu nicht viel sagen, da ich deine Installation nicht kenne.
Grundsätzlich ist es so, das deine Domain auf das root-Verzeichnis, in dem Contenido liegt, zeigen sollte. Dort liegt eine index-Datei die eine Weiterleitung auf die front_content.php macht. Bei Aufruf von meinedomain.tld oder meinedomain.tld/cms/ kommt man zum Frontend und bei meinedomain.tld/contenido/ kommt man dann zum Login von Contenido.
Mehr dazu kann ich nur sagen wenn ich selbst prüfen kann, bzw. wenn du mich dazu (kostenpflichtig) beauftragst.
Hi,
ich nochmal. Zunchst ein frohes neues Jahr. Ich hab immer noch Probleme nach dem Update 4.6.24. Installation wie von der Routine vorgegeben mit ordner cms. Frontend funktioniert, Backend läßt sich nicht aufrufen.
Serverpfad weist auf /cms. Im Contenido Forum hab ich leider keine Hilfe gefunden. Kanst Du mir weiter helfen?
Ach ja, fast vergessen,
Deine Anleitung ist wirklich gut.
Gruß
Martin
Hallo Ortwin,
ja, das war eine 4.4.5 und die lief seit 2006 ohne Probleme, ist die Webpräsenz einer benachbarten kleinen Gemeinde. Ich woltle Contenido jetzt mal auf einen neueren Stand bringen.Bei der damaligen Installation hatte ich die Dateien aus dem cms-Ordner direkt in den Root installiert. Ich probier das gleich nochmal mit einem neuen Upgrade aus.
Gruß
Martin
Hallo Martin,
ist die 4.4er Installation vor dem Upgrade gelaufen?
Gibt es während oder nach dem Upgrade auf 4.6.24 irgendwelche Fehlermeldungen (auch ins Log schauen)?
Gruß Ortwin
Hallo,
ich habe lange nicht mit Contenido gearbeitet und heute eine alte 4.4 Installation auf eine 4.624 nach der o. g. Anleitung upgegradet. Backend funktiniert. Frontend wird nicht angezigt (Fehler 404). Vermutlich muss ich die Pfade für das Frontend noch anpassen. In der 4.4. gab es das Verzeichnis CMS bei mir nicht.
Kann mir das mal bitte jemand auf die Sprünge helfen.
Danke schon mal
Martin
Vielen Dank für das Lob 😉
Sehr gut, sehr hilfreich.
Vielen Dank!
Hallo Björn,
da ich selbst nicht so begeistert bin vom Mandantensystem von Contenido, habe ich eigentlich so gut wie keine Mehrmandantensysteme am Laufen. Daher habe ich bisher auch noch keine Upgrades dazu machen müssen.
Falls mir mal so ein Upgrade unter die Finger gerät, werde ich gerne darüber einen Artikel schreiben.
Hi, mich würde es noch interessieren wie ich ein Update mache wenn es mehr als nur ein Mandant in Contenido gibt…