¿Cuáles son las mejores prácticas para llevar las actualizaciones del sitio del entorno dev/stage/testing a la producción?


8

Ahora mismo tengo un servidor de desarrollo que ejecuta una configuración básica de LAMP. El servidor de producción es un slicehost. Pero me pregunto cuál es la mejor manera de impulsar las instancias del código/db a las etapas de desarrollo> etapa> producción. ¿Tiene que ver con la forma en que creas las etapas?

¿Cómo lo haces sin bajar el sitio? ¿Es posible incluso si no haces balanceo de carga?

Sé que esto es algo general, solo estoy buscando que me apunten en la dirección correcta.

1

Me gustaría buscar en algún tipo de entorno de estilo de "compilación" automatizado para la lámpara donde tienes scripts que empacan y preparan tus lanzamientos para cada entorno.

Reconozco que no existe un edificio real para PHP pero puede configurar la automatización para cambiar cualquier problema de configuración o configuración y guardar todo en una carpeta lista para ser implementada.

No creo que pueda eliminar completamente el tiempo de inactividad sin entornos de equilibrio de carga/estilo de granja web. Sin embargo, la manera más fácil de reducirlo en mi libro es estableciendo un proceso de preparación de código consistente y probando el proceso varias veces. La automatización ayudaría allí.

En cuanto al hecho de copiar realmente los archivos, bueno, no sé mucho más que usar algo como FTP o lo que sea conveniente. Tal vez poniendo un mensaje de carga. Una vez más, todo esto podría tener un guión.

Finalmente, tenga en cuenta que, dado que PHP no está construido, podría funcionar bien para rastrear las diferencias entre lo que hay ahora y lo que ha cambiado y solo mover esos archivos. A veces eso puede agregar una complejidad innecesaria.


2

Uso .htaccess para crear un jiffy de "modo de mantenimiento" donde solo mi IP puede ver el sitio principal durante la actualización. Todos los demás pueden ver un mensaje corto para que sepan que todo debería volver a estar en línea en unos pocos tics.

Entonces:

  1. Hacer cualquier DB edita
  2. SVN de exportación/cargar los archivos
  3. Ejecutar pruebas automatizadas y dar tanto como sea posible una rápida mirar por encima para asegurarse de que no hay nada terriblemente equivocado
  4. revertir el .htaccess

Es un hecho, pero debe probar las cosas tanto como sea posible a nivel local antes de pus Hing a un servidor en vivo. Algunas personas usan dos servidores en vivo (como un subdominio de nombre críptico en el servidor de producción) para actuar como un área de prueba para las actualizaciones en tiempo real. Esto puede reducir el tiempo de inactividad real del sitio principal.

Debo recalcar que es importante no enviar actualizaciones a un servidor activo sin cerrarlo de antemano (especialmente si está utilizando binarios a través de ASPNET) porque los usuarios que intentan usar el sitio mientras lo actualizan recibirán mensajes de error horribles y es posible que obtenga archivos bloqueados.

  0

Y agregaré que el .htaccess-swap-out, DB-edits, svn checkout/file-uploading y las pruebas unitarias automatizadas pueden ser todos con guiones, por lo que una actualización ocurre mucho, mucho más rápido. 23 sep. 082008-09-23 19:14:11


1

No sé si esta es una buena idea, pero ¿qué ocurre con las transferencias automáticas desde un sistema de control de origen? Tal vez tenga algunas ramas de desarrollo: pruebas de vanguardia, desarrollo para mantenimiento/pequeñas mejoras y producción para el código de producción.Cuando el desarrollo sea estable, combínelo en la rama de producción y haga que la máquina de producción lo revise de manera automática.


0

En cuanto a enviar archivos a todos los servidores web encuentro que el robocopy bueno hace el truco. Mis entornos dev/stage/prod son idénticos, por supuesto. Simplemente ponga una página temporal que les diga a los usuarios que el sitio volverá enseguida.


0

En este momento utilizamos una serie de scripts de shell con archivos de configuración que cargan nuestros archivos modificados, los scp a cada servidor del clúster y luego los desactiven una vez que estén allí. Este método tiene sus desventajas, por supuesto, y estamos contemplando un método donde cada miembro del servidor tenga un cliente svn instalado y, una vez que etiquetemos una nueva versión, cambiaremos la copia de trabajo en los servidores de producción a esa nueva etiqueta. Por supuesto, hacemos lanzamientos durante nuestra hora de mantenimiento hoy en día, así que no tenemos que hacer nada especial para nuestros usuarios (de todos modos ven una página de mantenimiento).


0

Tengo una opción en mi configuración central para permitir el acceso al sitio o una lista de URL preestablecidas a las que puedo redirigir a todos los usuarios (y detener el tráfico API con un código http apropiado).

Estas URL son enlaces a archivos html estáticos que explican al usuario lo que está sucediendo.

Cuando esto está habilitado, no hay solicitudes en las bases de datos ni en ningún archivo, ya que todas las solicitudes se envían al archivo HTML antes de que eso suceda, lo que me da un espacio "claro" para implementar las actualizaciones.


0

apache ant con tareas para svn y ftp pagan la cuenta por mí. Incluso hay personas que hacen las cosas de DB con ANT, pero tiendo a querer verlas personalmente. Una vez que tenga una compilación limpia y push para ftp en todas sus ubicaciones, se sorprenderá de lo fácil que es.