Was sind best practices für self-Update PHP+MySQL-Anwendungen?
Es ist ziemlich standard-die Praxis jetzt für desktop-Anwendungen zur selbst-Aktualisierung. Auf dem Mac, alle nicht-Apple-Programm, das verwendet Sparkle in meinem Buch ist ein instant-win. Für Windows-Entwickler, dies wurde bereits ausführlich diskutiert. Ich habe noch nicht gefunden Informationen zu self-updating-web-Anwendungen, und ich hoffe, Sie können helfen.
Ich bin Aufbau einer web-Anwendung, die gemeint ist, um installiert werden, wie WordPress oder Drupal - entpacken Sie es in ein Verzeichnis, traf installieren-Seite, und es ist bereit zu gehen. Um breiten-server Kompatibilität, ich wurde gebeten, den Einsatz von PHP und MySQL -- ist, dass **MP? In jedem Fall, es hat im großen und ganzen cross-Plattform. Für Kontext ist dies im Grunde eine unified-web-messaging-Anwendung für kleine Unternehmen. Es ist nicht ein anderes CMS-Plattform, denke webmail.
Ich will wissen, zur selbst-Aktualisierung von web-Anwendungen. Zunächst (1) ist das eine schlechte Idee? Ab WordPress 2.7 das automatische update ist eine einzelne Schaltfläche, die scheint einfach, und doch kann ich mir vorstellen, so viele Möglichkeiten, wie das gehen könnte schrecklich, schrecklich schief. Auch ist es nicht die Idee, dass die web-Dateien sind beschreibbar durch den web-Prozess eine Sicherheitslücke?
(2) lohnt sich der Entwicklungsaufwand? Es gibt wahrscheinlich Millionen von WP installiert in der Welt, so lohnt es sich wahrscheinlich, die Zeit, die die WP-team machen es einfach, sparen Sie Millionen von Arbeitsstunden, die weltweit. Ich kann mir nur vorstellen, ein paar tausend Installationen meiner software -- ist der Aufbau von self-upgrade lohnt sich die einmalige Investition, oder kann ich davon ausgehen, dass die Benutzer hoch entwickelt genug, um download und Installation von web-software in den ersten Platz gehen konnte, durch eine upgrade-Checkliste?
Wenn es nicht eine security-Katastrophe oder Verschwendung von Zeit, dann (3) ich bin auf der Suche nach Anregungen aus wer es getan hat, bevor. Halten Sie eine version der Tabelle in deiner Datenbank? Wie verwalten Sie DB-upgrades? Welche Methode verwenden Sie für Rollback ein teilweises upgrade im Rahmen eines self-updating-web-Anwendung? Habe mit einem ORM-layer machen es leichter oder schwieriger? Haben Sie eine delta von version änderungen oder tun Sie nur sprengen, die ganze Sache, jedes mal?
Ich Schätze Ihre Gedanken dazu auf.
- Ich hatte gefragt, eine ähnliche Frage vor einer Weile, die hilfreich sein könnten.
- gute Frage. Ich denke, selbst die Aktualisierung nicht nur die Schnitte nach unten auf installieren Stunden, aber gibt Ihnen die Fähigkeit zu beheben distributed security-Probleme on the fly. so viele open-source-Anwendungen erhalten Masse ausgenutzt sobald eine Sicherheitslücke gefunden wird. aber Sie haben Recht, es gibt so viele Dinge, die schief gehen könnte. was ist, wenn der Benutzer passt den code für eine?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ehrlich gesagt, eigentlich hängt es davon ab, Ihre userbase. Es gibt Unmengen von PHP-Anwendungen, die nicht automatisch aktualisiert sich selbst. Ihre Benutzer sind technisch genug, um den upgrade-Prozess, oder eben nicht aktualisieren.
Ich Zweck in zwei Schritten:
1) Ernst Fragen Sie sich, was Ihre Zielgruppe wahrscheinlich wirklich brauchen. Wird selbst-Aktualisierung bieten genug Auftrieb, um die Annahme zu rechtfertigen, die zusätzliche Arbeit? Wenn Sie sicher sind, dass die Antwort ja ist, tun Sie es einfach.
Da bist du gefragt, hier würde ich vermuten, dass Sie es noch nicht wissen. In diesem Fall, ich Zweck, Schritt 2:
2) version 1.0 ohne Funktion. Warten auf Benutzer-feedback. Ihre Benutzer können sofort Ruf nach einer einfacheren upgrade-Prozess, in diesem Fall sollten Sie priorisieren Sie. Alternativ finden Sie möglicherweise, dass Ihre Benutzer sind viel mehr besorgt, mit einigen anderen Funktion.
Raten, was Ihre Kunden wollen, ohne zu Fragen Sie ist ein guter Weg, um Verschwendung eine Menge Entwicklung Zeit auf Dinge, die Menschen eigentlich gar nicht nötig.
Ich habe darüber nachgedacht in letzter Zeit in Bezug auf Datenbank-schema änderungen. Im moment bin ich zu Graben in WordPress zu sehen, wie Sie gemeistert haben Datenbank-änderungen zwischen den Revisionen. Hier ist, was ich bisher gefunden habe:
$wp_db_version
geladen istwp-includes/version.php
. Diese variable entspricht einem Subversion-Revisionsnummer und wird aktualisiert, wennwp-admin/includes/schema.php
geändert wird. (Möglicherweise durch einen Haken? Ich bin mir nicht sicher.) Wennwp-admin/admin.php
geladen ist, wird die WordPress-option mit dem Namendb_version
aus der Datenbank gelesen. Wenn diese Anzahl nicht gleich$wp_db_version
,wp-admin/upgrade.php
geladen wird.wp-admin/includes/upgrade.php
enthält eine Funktion namensdbDelta()
.dbDelta()
durchsucht$wp_queries
(ein string, der SQL-Abfragen zu entwerfen, das die letzten Datenbank-schema von Grund auf neu) und vergleicht das schema in der Datenbank, verändern der Tabellen wie nötig, so dass das schema gebracht up-to-date.upgrade.php
läuft dann eine Funktion namensupgrade_all()
läuft das spezifischeupgrade_NNN()
Funktionen, wenn$wp_db_version
kleiner ist als der soll-Werte. (dh.upgrade_250()
der WordPress-2.5.0-upgrade wird ausgeführt, wenn die Datenbank-version ist weniger als 7499.) Jede dieser Funktionen ein eigenes Daten-migration und Bevölkerung-Verfahren, von denen einige genannt werden, die während der ersten Datenbank-setup-Skript. Schön reduziert auf den doppelten code.So, das ist der Weg, es zu tun.
Dann wäre es ja ein Sicherheits-feature, wenn PHP ging und überschrieb seine Dateien von einem Ort auf das internet, ohne Warnung. Es gibt keine Garantie, dass der server ordnungsgemäß verbunden ist, um Ihre update-server (es kann den download jemand code Handarbeit von jemand anderem, wenn DNS-Vergiftung aufgetreten) - was jemand anderes Zugriff auf Ihre Kundendaten. Deshalb die digitale Signatur wäre wichtig.
Könnte der Benutzer die Kontrolle von updates durch das festlegen von Berechtigungen auf dem web-Verzeichnis, so dass PHP nur lese-Zugriff auf die Dateien - diese Prozedur könnte auch einfach dokumentiert werden mit Ihrem Programm.
Bleibt eine Frage (ich weiß es wirklich nicht, die Antwort auf): kann PHP-Dateien überschreiben, wenn es momentan mit Ihnen (z.B. wenn die update.php die Datei selbst aktualisiert werden mussten)? Wert getestet zu werden.
Ich nehme an, du hast bereits entschieden, diese aus, aber man konnte host " it as a service. (Denken Sie wordpress.com)
Ich würde vorschlagen, dass Sie Ihre Anwendung Verpacken, mit Birne und einrichten eines Kanals. Die Benutzer können dann aktualisieren Sie die Anwendung über eine standard-Schnittstelle (Birne). Es ist nicht vollkommen automatisch (es sei denn, die Benutzer haben eine Art von Automatisierung mit Birne), aber es ist standard, so dass jeder sysadmin halten kann.
Ich denke, dass Ihre beste Möglichkeit ist, eine update-überprüfung Mechanismus, der alarmiert den administrator, wenn es update(s).
Wie Sie erwähnen, gibt es eine Reihe potenzieller Sicherheitsprobleme. Durch diese allein, würde ich vorschlagen, dies nicht zu tun. Stattdessen versuchen Sie einen ziemlich smart Upgrade-Skript.
Nur meine 2 Cent: ich würde überlegen, eine sich automatisch selbst aktualisieren Anwendung innerhalb meines CMS eine Sicherheitslücke, so, wenn Sie sich entscheiden, um code dieser Funktion, sollten Sie die Implementierung der verschiedenen Ebenen dieses Verhalten: