2009-04-07 16 views
25

Ahora es bastante práctica estándar que las aplicaciones de escritorio se actualicen automáticamente. En la Mac, todos los programas que no son de Apple que usan Sparkle en mi libro son una victoria instantánea. Para desarrolladores de Windows, this has already been discussed at length. Todavía no he encontrado información sobre aplicaciones web autoactualizadas, y espero que pueda ayudar.¿Cuáles son las mejores prácticas para actualizar automáticamente las aplicaciones PHP + MySQL?

Estoy construyendo una aplicación web que debe instalarse como Wordpress o Drupal: descomprímala en un directorio, acceda a alguna página de instalación y estará lista para funcionar. Para tener una amplia compatibilidad de servidor, me han pedido que use PHP y MySQL, ¿es eso ** MP? En cualquier caso, tiene que ser ampliamente multiplataforma. Por contexto, esta es básicamente una aplicación de mensajería web unificada para pequeñas empresas. No es otra plataforma CMS, piensa en webmail.

Quiero saber sobre las aplicaciones web que se actualizan automáticamente. En primer lugar, (1) ¿es esta una mala idea? A partir de Wordpress 2.7, la actualización automática es un botón único, que parece fácil, y sin embargo, puedo imaginar tantas maneras en que esto podría ir terriblemente mal. Además, ¿no es la idea de que los archivos web son grabables por el proceso web un agujero de seguridad?

(2) ¿Vale la pena el tiempo de desarrollo? Probablemente existan millones de instalaciones de WP en el mundo, por lo que probablemente valga la pena el tiempo que le llevó al equipo de WP facilitar las cosas, ahorrando millones de horas hombre en todo el mundo. Solo puedo imaginar unos pocos miles de instalaciones de mi software: ¿la autoevaluación merece la pena invertir tiempo? ¿O puedo suponer que los usuarios lo suficientemente sofisticados para descargar e instalar el software web en primer lugar podrían pasar por una lista de verificación de actualización?

Si no es un desastre de seguridad o una pérdida de tiempo, entonces (3) estoy buscando sugerencias de cualquier persona que lo haya hecho antes. ¿Mantiene una tabla de versión en su base de datos? ¿Cómo manejas las actualizaciones de DB? ¿Qué método utiliza para deshacer una actualización parcial en el contexto de una aplicación web que se actualiza automáticamente? ¿El uso de una capa de ORM lo hizo más fácil o más difícil? ¿Mantiene un delta de cambios de versión o simplemente lo apaga todo?

Agradezco sus comentarios sobre esto.

+0

gran pregunta. Creo que la actualización automática no solo reduce las horas de instalación, sino que también te permite corregir problemas de seguridad distribuidos sobre la marcha. muchas aplicaciones de código abierto se explotan en masa una vez que se encuentra un agujero de seguridad. pero tienes razón, hay tantas cosas que podrían salir mal. ¿y si el usuario personaliza su código para uno? – dqhendricks

+0

He hecho una [pregunta similar] (http://stackoverflow.com/questions/558535/should-a-web-app-have-automatic-updates) hace un tiempo que podría ser útil. – VirtuosiMedia

Respuesta

12

Francamente, realmente depende de su base de usuarios. Hay toneladas de aplicaciones PHP que no se actualizan automáticamente. Sus usuarios son lo suficientemente técnicos como para manejar el proceso de actualización, o simplemente no actualizan.

I propósito de dos pasos:

1) En serio preguntarse cuáles son sus usuarios es probable que realmente necesitan. ¿La auto-actualización proporcionará suficiente impulso a la adopción para justificar el trabajo adicional? Si está seguro de que la respuesta es sí, solo hágalo.

Como usted está preguntando aquí, creo que todavía no lo sabe. En ese caso, me refiero al paso 2:

2) Libere la versión 1.0 sin la función. Espere los comentarios de los usuarios. Sus usuarios pueden llorar inmediatamente por un proceso de actualización más simple, en cuyo caso debe priorizarlo. Alternativamente, puede descubrir que sus usuarios están mucho más preocupados por alguna otra característica.

Adivinar lo que sus usuarios desean sin preguntar es una buena manera de perder mucho tiempo de desarrollo en cosas que la gente realmente no necesita.

3

Supongo que ya ha descartado esto, pero podría alojarlo como un servicio. (Piense en wordpress.com)

+0

No lo he descartado en absoluto; queremos hacer ambas cosas, en realidad. –

1

Creo que su mejor opción es un mecanismo de verificación de actualizaciones que alertará al administrador cuando haya actualizaciones.

Como mencionas, hay una serie de posibles problemas de seguridad. Debido a esos solos, sugeriría no hacer esto. En cambio, intente crear una secuencia de comandos de actualización bastante inteligente.

3

Le sugiero que empaquete su aplicación con pear y set up a channel. Sus usuarios pueden actualizar la aplicación a través de una interfaz estándar (pera). No es completamente automático (a menos que los usuarios tengan algún tipo de automatización ejecutándose sobre la pera), pero es estándar, por lo que cualquier administrador del sistema puede mantenerlo.

1

Sólo mi 2 centavos: me gustaría considerar una solicitud de actualización automática auto dentro de mi CMS como un agujero de seguridad, por lo que si decide codificar esta función, usted debe considerar para aplicar diferentes niveles de este comportamiento:

  • actualizar automáticamente
  • Comprobar actualizaciones y notificar
  • Desactivar
4

he estado pensando en esto últimamente en lo que respecta a los cambios de esquema de base de datos. En este momento estoy investigando en WordPress para ver cómo han manejado los cambios de la base de datos entre las revisiones. Esto es lo que he encontrado hasta ahora:

$wp_db_version se carga desde wp-includes/version.php. Esta variable corresponde a un número de revisión de Subversion y se actualiza cuando se cambia wp-admin/includes/schema.php. (Posiblemente a través de un gancho? No estoy seguro.) Cuando se carga wp-admin/admin.php, la opción de WordPress llamada db_version se lee de la base de datos. Si este número no es igual a $wp_db_version, se carga wp-admin/upgrade.php.

wp-admin/includes/upgrade.php incluye una función llamada dbDelta(). dbDelta() escanea $wp_queries (una cadena de consultas SQL que creará el esquema de base de datos más reciente desde cero) y lo compara con el esquema en la base de datos, alterando las tablas según sea necesario para que el esquema se actualice.

upgrade.php posteriormente ejecuta una función llamada upgrade_all() que corre específicos upgrade_NNN() funciones si $wp_db_version es menor que los valores objetivo. (es decir, upgrade_250(), la actualización de WordPress 2.5.0, se ejecutará si la versión de la base de datos es inferior a 7499). Cada una de estas funciones ejecuta sus propios procedimientos de migración y población de datos, algunos de los cuales se invocan durante el script de instalación inicial de la base de datos. Muy bien reduce el código duplicado.

Entonces, esa es una forma de hacerlo.

4

Sí, sería una característica de seguridad si PHP pasó y sobrescribió sus archivos desde algún lugar en Internet sin previo aviso. No hay garantía de que el servidor se conecte correctamente al su servidor de actualización (podría descargar un código diseñado por otra persona si se produjera una intoxicación DNS), otorgando a otra persona acceso a los datos de su cliente. Por lo tanto, la firma digital sería importante.

El usuario podría controlar las actualizaciones estableciendo permisos en el directorio web para que PHP solo tenga acceso de lectura a los archivos; este procedimiento podría simplemente documentarse con su programa.

Queda una pregunta (realmente no sé la respuesta): ¿PHP puede sobrescribir los archivos si los está usando actualmente (por ejemplo, si el archivo update.php en sí necesitaba ser actualizado)? Vale la pena probar

Cuestiones relacionadas